Skip to content

Driving WIZnet W5100S Without an SDK on a Custom RP2354B

Custom RP2354B computer runs its own OS and drives WIZnet W5100S directly over SPI, implementing hardware sockets, blocking I/O, and a TCP server.

irina

Published September 14, 2026

Original author: atwardzikvOriginal source (new tab)

Driving WIZnet W5100S Without an SDK on a Custom RP2354B

Project description

๐Ÿ“Œ ์ง์ ‘ ๋งŒ๋“  ์ปดํ“จํ„ฐ์—์„œ ์ง์ ‘ ๋งŒ๋“  OS๋ฅผ ์‹คํ–‰ํ•˜๋‹ค

GeT Computer๋Š” RP2354B ๊ธฐ๋ฐ˜์˜ ์ปค์Šคํ…€ ์‹ฑ๊ธ€๋ณด๋“œ ์ปดํ“จํ„ฐ์ž…๋‹ˆ๋‹ค. VGA, PS/2 keyboard, microSD์™€ ํ•จ๊ป˜ ์œ ์„  Ethernet์„ ์œ„ํ•œ WIZnet W5100S๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, KiCad ํšŒ๋กœ๋„์™€ PCB layout, BOM, Gerber ๋“ฑ์˜ ํ•˜๋“œ์›จ์–ด ์„ค๊ณ„ ์ž๋ฃŒ๊ฐ€ ๊ณต๊ฐœ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ํ”„๋กœ์ ํŠธ์˜ ํŠน์ง•์€ ํ•˜๋“œ์›จ์–ด๋ฟ ์•„๋‹ˆ๋ผ GeT OS๊นŒ์ง€ ์ง์ ‘ ๊ตฌํ˜„ํ–ˆ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. GeT OS๋Š” ARM Assembly์™€ C ๊ธฐ๋ฐ˜์˜ monolithic kernel์ด๋ฉฐ, Pico SDK๋‚˜ RTOS, WIZnet ioLibrary ์—†์ด W5100S Ethernet driver๊นŒ์ง€ ์ง์ ‘ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

No Pico SDK ยท No ioLibrary ยท No RTOS

๐Ÿ“Œ ์ง์ ‘ ๋งŒ๋“  ์ปดํ“จํ„ฐ์—์„œ ์ง์ ‘ ๋งŒ๋“  OS๋ฅผ ์‹คํ–‰ํ•˜๋‹ค

๐Ÿ” W5100S๋ฅผ SPI Register๋กœ ์ง์ ‘ ์ œ์–ด

GeT OS๋Š” SPI0๋ฅผ ํ†ตํ•ด W5100S์™€ ์ง์ ‘ ํ†ต์‹ ํ•ฉ๋‹ˆ๋‹ค.

SignalGPIO
MISOGPIO 16
CSGPIO 17
SCKGPIO 18
MOSIGPIO 19
INTGPIO 21

Write์—๋Š” 0xF0, Read์—๋Š” 0x0F opcode๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ์ดํ›„ 16-bit register address์™€ data๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

GeT OS โ†’ Custom SPI Driver โ†’ W5100S Register

Driver๋Š” software reset, retransmission ์„ค์ •, socket TX/RX buffer ์„ค์ •๋„ ์ง์ ‘ ์ฒ˜๋ฆฌํ•˜๋ฉฐ, VERR๋ฅผ ์ฝ์–ด 0x51์„ ํ™•์ธํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ W5100S๋ฅผ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ” W5100S๋ฅผ SPI Register๋กœ ์ง์ ‘ ์ œ์–ด

๐ŸŒ W5100S Hardware Socket์„ OS Socket์œผ๋กœ ์—ฐ๊ฒฐ

GeT OS๋Š” W5100S์˜ hardware socket์„ ์ž์ฒด socket/file abstraction๊ณผ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

open_socket(), bind_socket(), listen_socket(), accept_socket(), connect_socket()์€ SN_CR, SN_SR ๋“ฑ์˜ W5100S socket register๋ฅผ ์ด์šฉํ•ด ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

DirectionFlow
TXSN_TX_FSR โ†’ TX Buffer โ†’ SN_TX_WR โ†’ CMD_SEND
RXSN_RX_RSR โ†’ RX Buffer โ†’ SN_RX_RD โ†’ CMD_RECV

Application์—์„œ๋Š” ์ผ๋ฐ˜์ ์ธ read()์™€ write()๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ, ๊ทธ ์•„๋ž˜์—์„œ๋Š” W5100S hardware socket์ด ์ง์ ‘ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

Test code์—๋Š” port 8080์—์„œ connection์„ acceptํ•˜๊ณ  HTTP/1.1 200 OK์™€ ๊ฐ„๋‹จํ•œ HTML์„ ๋ฐ˜ํ™˜ํ•˜๋Š” TCP server๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

โฑ๏ธ RTOS ์—†์ด ๊ตฌํ˜„ํ•œ Blocking I/O

TCP socket์—์„œ read()๋ฅผ ํ˜ธ์ถœํ–ˆ์ง€๋งŒ ๋ฐ์ดํ„ฐ๊ฐ€ ์•„์ง ์—†๋‹ค๋ฉด process๋ฅผ WAITING_FOR_RESOURCE ์ƒํƒœ๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  ๋‹ค๋ฅธ process๋กœ context switchํ•ฉ๋‹ˆ๋‹ค.

์ดํ›„ W5100S์˜ INT๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด eth_irq()๊ฐ€ SN_IR์„ ํ™•์ธํ•˜๊ณ  ํ•ด๋‹น socket์„ ๊ธฐ๋‹ค๋ฆฌ๋˜ process๋ฅผ ๋‹ค์‹œ READY ์ƒํƒœ๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

Blocking read() โ†’ WAITING โ†’ W5100S INT โ†’ READY

W5100S์˜ hardware socket event๋ฅผ ์ง์ ‘ ๋งŒ๋“  OS scheduler์™€ ์—ฐ๊ฒฐํ–ˆ๋‹ค๋Š” ์ ์ด ์ด ํ”„๋กœ์ ํŠธ์˜ ํ•ต์‹ฌ์ ์ธ ํŠน์ง•์ž…๋‹ˆ๋‹ค.

โฑ๏ธ RTOS ์—†์ด ๊ตฌํ˜„ํ•œ Blocking I/O

๐Ÿงฉ ์ด ํ”„๋กœ์ ํŠธ์—์„œ W5100S์˜ ์—ญํ• 

W5100S๋Š” ๋‹จ์ˆœ Ethernet MAC/PHY๊ฐ€ ์•„๋‹ˆ๋ผ Hardwired TCP/IP Ethernet Controller๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

TCP client/server๋Š” W5100S์˜ hardware TCP/IP socket์„ ์ด์šฉํ•˜๊ณ , RP2354B์—์„œ๋Š” SPI register access์™€ OS-level socket abstraction์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

SDK๋‚˜ ioLibrary abstraction์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— W5100S์˜ register์™€ hardware socket์ด ์‹ค์ œ OS API๊นŒ์ง€ ์–ด๋–ป๊ฒŒ ์—ฐ๊ฒฐ๋˜๋Š”์ง€๋ฅผ ์ฝ”๋“œ ์ˆ˜์ค€์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โš ๏ธ ํ˜„์žฌ ์ƒํƒœ

GeT OS๋Š” ์•„์ง experimental ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค.

W5100S๋Š” 4๊ฐœ์˜ hardware socket์„ ์ œ๊ณตํ•˜๋ฉฐ, ํ˜„์žฌ ๊ตฌํ˜„์—์„œ๋Š” ํ•˜๋‚˜๋ฅผ raw/MACRAW ์šฉ๋„๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. Source comment์—๋Š” ํ–ฅํ›„ MACRAW ๊ธฐ๋ฐ˜ software TCP/IP stack๊ณผ Modbus ๊ตฌํ˜„๋„ ์–ธ๊ธ‰๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

Standalone bootloader๋Š” ์•„์ง ์—†์œผ๋ฉฐ ํ˜„์žฌ Raspberry Pi Debug Probe๋ฅผ ํ†ตํ•ด code๋ฅผ loadํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ”— ๋น„์Šทํ•œ WIZnet Maker ํ”„๋กœ์ ํŠธ์™€ ๋น„๊ต

ProjectPlatform / SWW5100S ์‚ฌ์šฉ ๋ฐฉ์‹GeT Computer์™€์˜ ์ฐจ์ด
GeT ComputerRP2354B + GeT OSDirect SPI register + Hardware SocketNo SDK / No RTOS / ์ž์ฒด OS
Zephyr์šฉ W5100S-EVB-Pico ์ปค์Šคํ…€ ๋ณด๋“œ ์ •์˜RP2040 + Zephyr RTOSZephyr ๋ณด๋“œ ์ •์˜๋ฅผ ๋งŒ๋“ค์–ด Zephyr ์ž์ฒด ๋„คํŠธ์›Œํฌ ์Šคํƒ์— ์—ฐ๊ฒฐ์ฒ˜์Œ๋ถ€ํ„ฐ ๋งŒ๋“  OS๊ฐ€ ์•„๋‹ˆ๋ผ, ๊ธฐ์กด RTOS(Zephyr) ์•ˆ์— ๋ณด๋“œ ์ง€์›๋งŒ ์ถ”๊ฐ€
Modbus TCP Server ExampleRP2040 + Pico SDK (RTOS ์—†์Œ)WIZnet ๊ณต์‹ ioLibrary_Driver๋กœ ์†Œ์ผ“ ์ƒํƒœ(Sn_SR)๋ฅผ ํด๋งPico SDK์™€ ioLibrary๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉ โ€” GeT OS๋Š” ์ด ๊ณ„์ธต ์ž์ฒด๋ฅผ ๊ฑท์–ด๋‚ด๊ณ  ์ง์ ‘ ๊ตฌํ˜„
W5100S-EVB-Pico Ethernet Communication Basics with Arduino IDERP2040 + Arduino IDEArduino Ethernet.h ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ (Ethernet.begin() ํ•œ ์ค„ ํ˜ธ์ถœ)๊ฐ€์žฅ ๋†’์€ ์ˆ˜์ค€์˜ ์ถ”์ƒํ™” โ€” GeT OS์˜ ๋ ˆ์ง€์Šคํ„ฐ ์ง์ ‘ ์ œ์–ด์™€ ์ •๋ฐ˜๋Œ€ ๊ทน๋‹จ
Ultra Small Ethernet + RP2040 Board Production RecordRP2040(XIAO) ์ปค์Šคํ…€ PCBํ‘œ์ค€ Pico SDK / ioLibrary ํŽŒ์›จ์–ดํ•˜๋“œ์›จ์–ด๋Š” GeT Computer์ฒ˜๋Ÿผ ์ฒ˜์Œ๋ถ€ํ„ฐ ์„ค๊ณ„ํ–ˆ์ง€๋งŒ, ์†Œํ”„ํŠธ์›จ์–ด๋Š” ํ‘œ์ค€ ์Šคํƒ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉ

Zephyr์šฉ W5100S-EVB-Pico ์ปค์Šคํ…€ ๋ณด๋“œ ์ •์˜

W5100S-EVB-Pico๋ฅผ Zephyr RTOS์—์„œ ์ธ์‹์‹œํ‚ค๊ธฐ ์œ„ํ•ด boards/arm/w5100s_evb_pico/ ์•„๋ž˜์— board.cmake, devicetree(.dts), Kconfig ๋“ฑ์„ ์ง์ ‘ ์ž‘์„ฑํ•œ ์‚ฌ๋ก€์ž…๋‹ˆ๋‹ค.

GeT Computer์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ "๋ณด๋“œ๋ฅผ ์ƒˆ ์†Œํ”„ํŠธ์›จ์–ด ํ™˜๊ฒฝ์— ํŽธ์ž…์‹œํ‚ค๋Š”" ์ž‘์—…์ด์ง€๋งŒ, Zephyr๋ผ๋Š” ๊ธฐ์กด RTOS์™€ ๊ทธ ๋„คํŠธ์›Œํฌ ์Šคํƒ ์œ„์— ์–น๋Š”๋‹ค๋Š” ์ ์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค. GeT OS๋Š” ๊ทธ RTOS ์ž์ฒด๊ฐ€ ์—†๊ณ  ์Šค์ผ€์ค„๋ŸฌยทVFSยท์†Œ์ผ“ ๊ณ„์ธต๊นŒ์ง€ ์ „๋ถ€ ์ž์ฒด ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

Modbus TCP Server Example

RP2040 + W5100S(๋˜๋Š” W5500)๋กœ Modbus TCP ์„œ๋ฒ„๋ฅผ ๊ตฌํ˜„ํ•œ ํŠœํ† ๋ฆฌ์–ผ์ž…๋‹ˆ๋‹ค. WIZnet ๊ณต์‹ ioLibrary_Driver๋ฅผ ์‚ฌ์šฉํ•ด wizchip_initialize(), getSn_SR(), listen(), send() ๊ฐ™์€ ํ•จ์ˆ˜๋กœ ์†Œ์ผ“์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

Pico SDK ๊ธฐ๋ฐ˜ bare-metal(RTOS ์—†์Œ)์ด๋ผ๋Š” ์ ์€ GeT OS์™€ ๋น„์Šทํ•˜์ง€๋งŒ, W5100S ๋ ˆ์ง€์Šคํ„ฐ ์ ‘๊ทผ์„ ioLibrary๊ฐ€ ๋Œ€์‹  ์ฒ˜๋ฆฌํ•ด์ค€๋‹ค๋Š” ์ ์ด ๊ฐ€์žฅ ํฐ ์ฐจ์ด์ž…๋‹ˆ๋‹ค. GeT OS๋Š” ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ณ„์ธต์„ ์—†์• ๊ณ  SPI ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ์ง์ ‘ ๋‘๋“œ๋ฆฝ๋‹ˆ๋‹ค.

W5100S-EVB-Pico Ethernet Communication Basics with Arduino IDE

Arduino IDE์™€ Ethernet.h ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ Ethernet ์ดˆ๊ธฐํ™”, TCP/UDP ํด๋ผ์ด์–ธํŠธยท์„œ๋ฒ„, ์›น ์„œ๋ฒ„ ๋“ฑ 11๊ฐ€์ง€ ์˜ˆ์ œ๋ฅผ ์ œ๊ณตํ•˜๋Š” ํŠœํ† ๋ฆฌ์–ผ ์ €์žฅ์†Œ์ž…๋‹ˆ๋‹ค. Ethernet.init(csPin), Ethernet.begin(mac) ๊ฐ™์€ ํ•œ๋‘ ์ค„์˜ ํ•จ์ˆ˜ ํ˜ธ์ถœ๋กœ ๋„คํŠธ์›Œํ‚น์ด ๋๋‚ฉ๋‹ˆ๋‹ค.

์ด ํ”„๋กœ์ ํŠธ๊ฐ€ ์ŠคํŽ™ํŠธ๋Ÿผ์˜ ํ•œ์ชฝ ๋(์ตœ๋Œ€ ์ถ”์ƒํ™”)์ด๋ผ๋ฉด, GeT Computer๋Š” ๋ฐ˜๋Œ€์ชฝ ๋(์ถ”์ƒํ™” ์—†์Œ)์ž…๋‹ˆ๋‹ค. ๊ฐ™์€ W5100S๋ฅผ ๋‹ค๋ฃจ๋ฉด์„œ๋„ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ณด๊ฒŒ ๋˜๋Š” ์ฝ”๋“œ์˜ ๊นŠ์ด๊ฐ€ ์™„์ „ํžˆ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

Ultra Small Ethernet + RP2040 Board Production Record

W5100S๋ฅผ Seeed XIAO RP2040 ๋ณด๋“œ์™€ ๊ฒฐํ•ฉํ•ด ์ดˆ์†Œํ˜• Ethernet ๋ณด๋“œ๋ฅผ ์ง์ ‘ ์„ค๊ณ„ยท์ œ์ž‘ํ•œ ๊ธฐ๋ก์ž…๋‹ˆ๋‹ค.

GeT Computer ๋ณด๋“œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํ•˜๋“œ์›จ์–ด๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ์„ค๊ณ„ํ–ˆ๋‹ค๋Š” ์ ์€ ๊ฐ™์ง€๋งŒ, ๊ทธ ์œ„์—์„œ ๋„๋Š” ์†Œํ”„ํŠธ์›จ์–ด๋Š” ํ‘œ์ค€ Pico SDK/ioLibrary ํŽŒ์›จ์–ด์ž…๋‹ˆ๋‹ค. GeT Computer๋Š” ํ•˜๋“œ์›จ์–ด๋ฟ ์•„๋‹ˆ๋ผ ๊ทธ ์œ„์˜ OS์™€ ๋“œ๋ผ์ด๋ฒ„๊นŒ์ง€ ์ „๋ถ€ ์ž์ฒด ์ œ์ž‘ํ–ˆ๋‹ค๋Š” ์ ์—์„œ ํ•œ ๋‹จ๊ณ„ ๋” ๋‚˜์•„๊ฐ‘๋‹ˆ๋‹ค.

โ“ FAQ

Q. WIZnet ioLibrary๋‚˜ Pico SDK๋ฅผ ์‚ฌ์šฉํ•˜๋‚˜์š”?
์•„๋‹ˆ์š”. W5100S register๋ฅผ SPI๋กœ ์ง์ ‘ ์ฝ๊ณ  ์“ฐ๋Š” Ethernet driver๋ฅผ ์ง์ ‘ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.

Q. TCP/IP stack๋„ RP2354B์—์„œ ์ง์ ‘ ๊ตฌํ˜„ํ–ˆ๋‚˜์š”?
ํ˜„์žฌ TCP client/server๋Š” W5100S Hardwired TCP/IP socket์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. MACRAW ๊ธฐ๋ฐ˜ software TCP/IP stack์€ ํ–ฅํ›„ ์ž‘์—…์œผ๋กœ ์–ธ๊ธ‰๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

Q. ์‹ค์ œ TCP Server๊ฐ€ ๋™์ž‘ํ•˜๋‚˜์š”?
๋„ค. Port 8080์—์„œ connection์„ acceptํ•˜๊ณ  HTTP response์™€ HTML body๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” test server๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

Q. Wi-Fi๋„ ์‚ฌ์šฉํ•˜๋‚˜์š”?
PCB์—๋Š” Raspberry Pi Radio Module 2์šฉ footprint๊ฐ€ ์žˆ์ง€๋งŒ ๊ธฐ๋ณธ์ ์œผ๋กœ ์‹ค์žฅ๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฉฐ, ํ˜„์žฌ GeT OS์—์„œ ๊ตฌํ˜„๋œ networking path๋Š” W5100S wired Ethernet์ž…๋‹ˆ๋‹ค.


English

๐Ÿ“Œ A Custom Computer Running a Custom OS

GeT Computer is a custom single-board computer based on the RP2354B MCU. It combines VGA, PS/2 keyboard, microSD, and a WIZnet W5100S for wired Ethernet.

The unusual part is GeT OS, a custom monolithic kernel written primarily in ARM assembly and C. Instead of using the Pico SDK, an RTOS, or WIZnet ioLibrary, the project implements its own W5100S Ethernet driver and accesses the controller directly through SPI registers.

No Pico SDK ยท No ioLibrary ยท No RTOS

๐Ÿ“Œ A Custom Computer Running a Custom OS

๐Ÿ” Direct SPI Control of W5100S

The driver connects SPI0 directly to W5100S.

SignalGPIO
MISOGPIO 16
CSGPIO 17
SCKGPIO 18
MOSIGPIO 19
INTGPIO 21

Writes use opcode 0xF0, while reads use 0x0F.

GeT OS โ†’ Custom SPI Driver โ†’ W5100S Registers

The driver also handles software reset, retransmission configuration, socket-buffer setup, and checks VERR for the expected 0x51 value.

๐Ÿ” Direct SPI Control of W5100S

๐ŸŒ Hardware Sockets as OS Sockets

GeT OS maps W5100S hardware sockets into its own socket/file abstraction.

Functions such as open_socket(), bind_socket(), listen_socket(), accept_socket(), and connect_socket() operate directly on registers including SN_CR and SN_SR.

DirectionFlow
TXSN_TX_FSR โ†’ TX Buffer โ†’ SN_TX_WR โ†’ CMD_SEND
RXSN_RX_RSR โ†’ RX Buffer โ†’ SN_RX_RD โ†’ CMD_RECV

Applications can use read() and write() while the kernel maps those operations to W5100S hardware sockets.

The repository also contains a port 8080 TCP server that accepts a connection and returns HTTP/1.1 200 OK with a small HTML body.

โฑ๏ธ Blocking I/O Without an RTOS

When a blocking read() has no data available, GeT OS places the process into WAITING_FOR_RESOURCE and schedules another process.

When W5100S asserts INT, eth_irq() checks the socket interrupt registers and returns the corresponding process to READY.

Blocking read() โ†’ WAITING โ†’ W5100S INT โ†’ READY

This directly connects W5100S hardware socket events with the custom OS scheduler.

โฑ๏ธ Blocking I/O Without an RTOS

๐Ÿงฉ Why W5100S Matters

W5100S is used as a Hardwired TCP/IP Ethernet Controller, not simply as an Ethernet MAC or PHY.

Its hardware TCP/IP sockets handle the current TCP client/server networking while the RP2354B implements SPI access and the OS-level socket abstraction.

This makes the project a useful reference for seeing how a WIZnet hardware TCP/IP controller can be integrated into a custom OS without an existing networking SDK.

โš ๏ธ Current Status

GeT OS is still experimental.

The W5100S provides four hardware sockets, with one currently used for raw/MACRAW operation. Source comments also mention future work on a software TCP/IP stack over MACRAW and possible Modbus support.

There is no standalone bootloader yet, and code is currently loaded through a Raspberry Pi Debug Probe.

๐Ÿ”— Comparison with Related WIZnet Maker Projects

ProjectPlatform / SoftwareW5100S ApproachDifference from GeT Computer
GeT ComputerRP2354B + custom GeT OSDirect SPI register + hardware socketNo SDK / No RTOS / custom OS
Custom W5100S-EVB-Pico Board for ZephyrRP2040 + Zephyr RTOSCustom Zephyr board definition wired into Zephyr's own network stackAdds board support to an existing RTOS rather than writing an OS from scratch
Modbus TCP Server ExampleRP2040 + Pico SDK (no RTOS)WIZnet's official ioLibrary_Driver polling socket status (Sn_SR)Uses the Pico SDK and ioLibrary as-is; GeT OS removes that layer entirely and talks to registers directly
W5100S-EVB-Pico Ethernet Communication Basics with Arduino IDERP2040 + Arduino IDEArduino Ethernet.h library (Ethernet.begin())The most abstracted end of the spectrum \u2014 the opposite extreme from GeT OS's direct register access
Ultra Small Ethernet + RP2040 Board Production RecordRP2040 (XIAO) custom PCBStandard Pico SDK / ioLibrary firmwareHardware designed from scratch like GeT Computer, but the software stays on the standard SDK

Custom W5100S-EVB-Pico Board for Zephyr

This project hand-writes Zephyr board files (board.cmake, devicetree, Kconfig) under boards/arm/w5100s_evb_pico/ so the RTOS recognizes the W5100S-EVB-Pico board.

Like GeT Computer, it's about bringing a board into a new software environment \u2014 but here that environment is an existing RTOS (Zephyr) and its own network stack. GeT OS has no underlying RTOS at all; its scheduler, VFS, and socket layer are all custom.

Modbus TCP Server Example

A tutorial implementing a Modbus TCP server on RP2040 with W5100S (or W5500), using WIZnet's official ioLibrary_Driver \u2014 functions like wizchip_initialize(), getSn_SR(), listen(), and send() handle the sockets.

Like GeT OS, it's bare-metal on the Pico SDK with no RTOS, but ioLibrary does the W5100S register work here. GeT OS removes that library layer and drives the SPI registers itself.

W5100S-EVB-Pico Ethernet Communication Basics with Arduino IDE

A tutorial repository of eleven Arduino IDE examples (Ethernet init, TCP/UDP client and server, web server, and more) built on the Ethernet.h library, where networking comes down to a line or two like Ethernet.init(csPin) and Ethernet.begin(mac).

If this project sits at the most-abstracted end of the spectrum, GeT Computer sits at the opposite end. Both drive the same chip, but the amount of code a developer actually sees is completely different.

Ultra Small Ethernet + RP2040 Board Production Record

A build log for a custom, ultra-compact Ethernet board pairing a W5100S with a Seeed XIAO RP2040.

Like the GeT Computer board, the hardware is designed from scratch \u2014 but the firmware on top of it is standard Pico SDK / ioLibrary. GeT Computer goes a step further by also writing its own OS and driver instead of the standard stack.

โ“ FAQ

Does it use WIZnet ioLibrary or the Pico SDK?
No. The Ethernet driver directly accesses W5100S registers over SPI.

Is TCP/IP implemented in software on the RP2354B?
The current TCP client/server uses W5100S Hardwired TCP/IP sockets. A software stack over MACRAW is future work.

Does the TCP server actually run?
Yes. The repository contains a port 8080 server that accepts connections and returns an HTTP response.

Does it use Wi-Fi?
The PCB includes an unpopulated Raspberry Pi Radio Module 2 footprint, but the networking path currently implemented by GeT OS is W5100S wired Ethernet.

Documents

Comments

Comments