#FPGA/ASIC 수정: 2026-11-01

W5100, W5500 계열 HW TCP/IP 칩과 개발 자료

Hardwired TCP/IP(TOE)의 구조와 설계상 장단점, W5100 계열과 W5300, W6100의 차이, 공개 개발 자료 및 검증 관점을 소개합니다.

W5100 계열 칩은 내가 직접 설계하고 RTL로 구현해서 만들어 냈다. 이 페이지에서는 W5100, W5500, W5100S를 중심으로 HW TCP/IP(TOE)가 임베디드 장치에서 어떤 역할을 하는지, 제품마다 설계 초점이 어떻게 다른지, 더 알아보려면 어디를 보면 좋은지 소개한다.

W5100이 Arduino Ethernet Shield V1에, W5500이 Ethernet Shield 2에 사용된 사실은 이 분야에서 내가 특히 자랑스럽게 생각하는 부분이다. 그 배경이 되는 기술과 공식 자료를 한곳에 모아 두고 싶었다.

WIZnet iEthernet W5100 칩 외관
W5100: Arduino Ethernet Shield V1에 사용된 칩 (이미지: WIZnet)
WIZnet W5500 칩 외관
W5500: Arduino Ethernet Shield 2에 사용된 칩 (이미지: WIZnet)

HW TCP/IP(TOE)는 어떤 역할을 하나

일반적인 임베디드 Ethernet 설계에서는 MCU가 TCP/IP 스택을 실행하고, Ethernet MAC/PHY와 드라이버까지 연결해야 한다. HW TCP/IP 칩은 TCP/IP 처리 기능과 MAC/PHY를 칩에 통합해, MCU가 SPI나 병렬 인터페이스를 통해 네트워크 기능을 사용하도록 한다. WIZnet은 이를 hardwired TCP/IP라고 부르며, ioLibrary는 Internet Offload Library의 약자라고 설명한다.

개념적인 연결은 다음과 같다.

애플리케이션 / MCU
        |
호스트 인터페이스와 드라이버
        | SPI 또는 병렬 버스
HW TCP/IP ASIC
        | Ethernet MAC / PHY
이더넷 네트워크

실제 칩의 내부 구성은 초기 제품인 W3150A+ 구조도에서 잘 볼 수 있다. 애플리케이션은 socket API와 드라이버를 거쳐 MCU 인터페이스(MCU bus 또는 SPI)로 칩에 접근하고, 칩 안에서는 TCP, UDP, ICMP, IP, ARP 처리와 802.3 Ethernet MAC, 송수신 버퍼가 동작한다. 이 구성에서는 MII를 통해 외부 Ethernet PHY를 따로 연결한다. W5xxx 시리즈는 이런 W3150 계열의 hardwired TCP/IP 코어에 Ethernet PHY를 내장해, 외부 PHY 없이 칩 하나로 Ethernet 연결을 구성하는 원칩 제품으로 발전했다.

W3150A+ 구조도: Application, Socket API, Driver Program, MCU Interface, TCP/IP 처리 블록과 Tx/Rx Buffer, MII Interface, Ethernet PHY
W3150A+ 블록 다이어그램: 외부 PHY를 연결하는 구성. W5xxx 시리즈는 여기에 PHY를 내장한 원칩 구조다. (이미지: WIZnet)

이 구조에서 얻는 대표적인 장점은 다음과 같다.

  • MCU의 네트워크 처리 부담을 덜 수 있다. TCP/IP 프로토콜 처리를 칩이 맡으므로 MCU는 애플리케이션과 장치 제어에 더 집중할 수 있다. CPU와 메모리가 제한된 시스템에서 유용한 선택지가 된다.
  • 네트워크 구현을 단순화할 수 있다. TCP/IP 스택 전체를 MCU에 포팅하는 대신 칩 드라이버와 socket API를 사용해 연결을 구성할 수 있다.
  • Ethernet 기능을 한 칩에 모을 수 있다. 제품에 따라 TCP/IP 코어뿐 아니라 MAC, PHY, 송수신 버퍼와 하드웨어 socket도 통합되어 외부 부품과 소프트웨어 구성이 간결해질 수 있다.
  • 익숙한 인터페이스로 MCU에 연결할 수 있다. 제품군은 SPI 또는 병렬 버스 등 MCU에서 활용하기 쉬운 호스트 인터페이스를 제공한다.

개념적으로는 MCU가 socket 송신 버퍼에 데이터를 쓰고 전송을 요청하면 칩이 네트워크 처리를 맡는다. 수신 데이터는 socket 수신 버퍼와 상태 레지스터를 통해 MCU가 확인한다. 세부 순서와 레지스터는 칩마다 다르지만, 애플리케이션이 Ethernet 프레임과 TCP 상태를 직접 다루지 않고 socket 단위로 통신한다는 점이 핵심이다.

물론 모든 네트워크 기능이 칩 안에서 끝나는 것은 아니다. DHCP, DNS, MQTT 같은 상위 기능은 제품과 라이브러리 구성에 따라 MCU 쪽 모듈이나 애플리케이션이 맡는다. 사용할 수 있는 socket 수와 버퍼 크기는 제품에 정해져 있고, MCU 쪽에는 드라이버와 애플리케이션도 필요하다. 프로토콜을 자유롭게 바꾸거나 운영체제 네트워크 스택을 그대로 쓰고 싶다면 lwIP 같은 소프트웨어 스택이 더 잘 맞을 수 있다. TOE는 무조건 더 좋은 방식이라기보다, 제한된 MCU에서 구현 부담을 줄이는 설계 선택이다.

제품별 주요 사양

WIZnet의 Ethernet 제품군 자료는 제품별 인터페이스와 버퍼, 하드웨어 socket 수를 비교해 보여 준다. 아래 값은 제품 선택의 출발점이다. 제품 자료의 최대 성능 표기나 SPI clock은 실제 시스템 처리량을 보장하지 않으므로, MCU와 드라이버를 포함한 시스템에서 따로 확인해야 한다.

칩 호스트 인터페이스 내부 버퍼 하드웨어 socket 설계에서 볼 점
W5100 8-bit bus, SPI 16 KB 4 Ethernet Shield V1 적용 사례
W5100S 8-bit bus, SPI 16 KB 4 SPI 최대 70 MHz, 병렬 버스 지원
W5500 Fast SPI 32 KB 8 Ethernet Shield 2 적용 사례
W5300 8/16-bit direct 또는 indirect bus 128 KB 8 버스 폭과 큰 내부 버퍼를 활용하는 설계
W6100 SPI, parallel bus 32 KB 8 IPv4와 IPv6 dual-stack

W5100S의 SPI 인터페이스는 제품 설명에 최대 70 MHz로 기재되어 있다. 이 수치는 SPI 신호의 clock 사양이지 애플리케이션의 Ethernet 처리량이 아니다. 버퍼 크기와 socket 수, 호스트 인터페이스와 필요한 IP 버전을 함께 보면 제품마다 어떤 요구에 맞는지 비교하기 쉽다. 실제 설계 전에는 각 제품의 최신 데이터시트와 errata를 확인해야 한다.

광고

제품마다 달라진 설계의 초점

제품을 단순히 신형과 구형으로 나누기보다, 어떤 시스템 제약을 해결하려 했는지 비교하는 편이 유용하다.

  • W5100과 W5100S는 SPI 또는 병렬 인터페이스를 통해 MCU에 Ethernet 기능을 제공하는 hardwired TCP/IP 칩이다. W5100S 자료에는 Ethernet MAC/PHY와 4개 하드웨어 socket이 명시되어 있다.
  • W5500은 8개 하드웨어 socket과 32 KB 내부 버퍼를 갖춘 Fast SPI 제품이다. Arduino Ethernet Shield 2와 오픈소스 드라이버 덕분에 실제 코드와 회로 자료를 찾아보기 쉽다.
  • W5300은 8/16-bit bus와 128 KB 내부 버퍼가 필요한 설계에서 비교할 제품이다. SPI 기반 MCU 연결과는 다른 호스트 인터페이스 선택지를 보여 준다.
  • W6100은 IPv4와 IPv6를 함께 지원한다. 새 제품에서 IPv6 요구가 있다면 W5100이나 W5500의 사양을 그대로 일반화하지 말고, W6100 같은 dual-stack 제품의 데이터시트를 기준으로 검토해야 한다.

이 차이는 하나의 칩이 모든 조건에서 더 좋다는 뜻이 아니다. 필요한 동시 연결 수, MCU의 버스 구성, 버퍼 예산, IP 버전, 기존 드라이버와 전력 조건이 선택을 좌우한다.

칩 개발과 검증에서 놓치기 쉬운 부분

네트워크 칩은 TCP/IP 상태 머신만 RTL에서 맞게 동작한다고 완성되지 않는다. 프로토콜 처리와 Ethernet MAC 사이의 데이터 흐름, socket별 버퍼 관리, 호스트 버스 응답, reset과 clock, PHY 연결까지 함께 맞아야 한다. 특히 여러 상태 변화가 겹칠 때의 우선순위와 경계 조건은 시뮬레이션에서 놓치지 않도록 따로 다루는 편이 좋다.

검증도 한 단계에서 끝나지 않는다.

  1. RTL 시뮬레이션에서 프로토콜 상태 변화와 버퍼 경계, 패킷 입출력 조건을 확인한다.
  2. FPGA 프로토타입으로 호스트 버스와 주변 회로를 연결해 실제 데이터 경로를 확인한다.
  3. C/C++ 드라이버와 loopback 테스트로 socket API를 통해 패킷이 왕복하는지 살펴본다.
  4. 실제 보드와 Ethernet 연결에서 clock, reset, PHY, 전원과 케이블을 포함한 시스템 동작을 확인한다.

내가 개발 과정을 오래 지켜보며 느낀 점은, RTL 시뮬레이션 결과가 좋아도 실제 네트워크 연결까지 검증해야 안심할 수 있다는 것이다. 이런 이유로 칩 자료를 볼 때는 데이터시트뿐 아니라 드라이버, 회로도, 예제 코드와 보드에서 확인한 기록을 같이 보는 편이 좋다.

책상에서 노트북을 보는 사람 옆에 작은 칩 보드와 파형이 놓인 낙서풍 삽화
시뮬레이션이 끝나도, 책상 위 보드에서 직접 확인하는 시간이 남아 있다 (삽화: 직접 생성)

Arduino Ethernet Shield와 W5100/W5500

Arduino의 Ethernet Shield V1 공식 설명은 W5100 기반이라고 밝히고, Ethernet Shield 2 공식 설명은 W5500을 사용한다고 설명한다. Arduino Ethernet 라이브러리에서도 W5100, W5200, W5500 계열 지원을 볼 수 있다.

모든 Arduino 제품의 표준 칩이라고 넓혀 말할 필요는 없다. 두 세대의 공식 Ethernet Shield에서 W5100과 W5500이 각각 사용됐다는 사실만으로도 내게는 충분히 자랑스러운 기록이다.

자료를 찾아보는 순서

처음부터 모든 문서를 읽기보다 아래 순서로 좁혀 가면 편하다.

  1. 제품 선택: WIZnet Ethernet 제품군에서 인터페이스, 버퍼와 socket 수를 비교한다.
  2. 하드웨어 제약 확인: 선택한 칩의 W5100 데이터시트와 자료, W5100S 데이터시트와 errata, W5500 제품 자료, W5300 자료, W6100 자료를 읽는다. 전기 조건과 타이밍, 버퍼 설정, interrupt, reset, errata는 요약 페이지보다 데이터시트가 기준이다.
  3. 드라이버 흐름 확인: WIZnet ioLibrary_Driver의 칩별 드라이버와 socket API를 따라가며 MCU가 어떤 순서로 socket을 열고 송수신하는지 확인한다. DHCP나 DNS 같은 모듈은 하드웨어 TCP/IP 처리와 별도로 제공되는 소프트웨어임을 구분해 본다.
  4. 실제 적용과 대조: Arduino의 Ethernet Shield V1 자료, Ethernet Shield 2 자료, Ethernet 라이브러리를 읽고 회로와 코드가 데이터시트 설명과 어떻게 연결되는지 본다.

코드와 보드에서 어떻게 쓰이는지 보고 싶다면 Pico와 W5100S Azure IoT 프로젝트, Pico W5500/W5100S CircuitPython 예제, WIZnet5k CircuitPython 드라이버 포크, Pico W5500 저장소도 함께 볼 수 있다. 이 프로젝트 글들은 현재 환경의 재현을 보장하는 설치 튜토리얼이 아니라 당시 코드와 구조를 살펴보는 참고 자료다.

W5500을 비롯한 W5100 계열 칩이 Arduino와 여러 MCU 프로젝트에서 네트워크 연결에 쓰이는 모습을 보는 것은 지금도 기쁜 일이다. 이 페이지가 칩을 처음 접하는 사람에게 구조를 이해하고 좋은 자료를 찾는 출발점이 되면 좋겠다.

광고