Wiznet makers

mark

Published May 23, 2026 ©

125 UCC

8 WCC

43 VAR

0 Contests

0 Followers

0 Following

Original Link

How to Teach Socket Register Control with WIZnet W5500 on MCU Platforms?

This education-focused project explains the WIZnet W5500 socket register area and how an MCU controls TCP, UDP, IPRAW, MACRAW, transmit buffers, receive buffers

COMPONENTS
PROJECT DESCRIPTION

How to Teach Socket Register Control with WIZnet W5500 on MCU Platforms?

Summary

This education-focused project explains the WIZnet W5500 socket register area and how an MCU controls TCP, UDP, IPRAW, MACRAW, transmit buffers, receive buffers, socket interrupts, and socket states through SPI-accessible registers. W5500’s role is to provide the Ethernet MAC/PHY, hardwired TCP/IP stack, 8 hardware sockets, and internal packet buffers, while the MCU learns network-stack behavior by reading and writing socket registers directly.

What the Project Does

The source article is a register-level walkthrough of the W5500 socket register block. It is not a finished application such as HTTP, FTP, MQTT, or Modbus TCP. Instead, it explains the registers that make those applications possible: socket mode, socket command, socket interrupt, socket status, source port, destination MAC, destination IP, destination port, MSS, TOS, TTL, socket buffer sizing, TX/RX pointers, interrupt mask, fragmentation, and keep-alive timing.

The network-stack learning path starts with Sn_MR, where each socket is assigned a protocol mode such as closed, TCP, UDP, IPRAW, or MACRAW. The article also explains socket options such as UDP multicast enable, broadcast blocking, TCP no-delayed-ACK behavior, and MACRAW filtering. This is useful for education because students can see how a network protocol is selected by register bits before any higher-level socket API is used.

The article then moves through socket execution and state. Sn_CR issues commands such as OPEN, LISTEN, CONNECT, SEND, SEND_KEEP, and RECV, while Sn_SR reports states such as SOCK_CLOSED, SOCK_INIT, SOCK_LISTEN, SOCK_ESTABLISHED, SOCK_CLOSE_WAIT, SOCK_UDP, and SOCK_MACRAW. This makes W5500 a useful teaching target for showing how a hardware socket moves through the same concepts students later see in TCP clients and TCP servers.

Where WIZnet Fits

The exact WIZnet product is W5500. W5500 is the wired Ethernet controller between the external MCU and the LAN. It integrates a hardwired TCP/IP stack, SPI access up to 80 MHz, an embedded 10/100 Ethernet MAC and PHY, 8 independent sockets, and 32 KB of internal Tx/Rx memory. It supports hardwired protocols including TCP, UDP, ICMP, IPv4, ARP, IGMP, and PPPoE.

In this architecture, the MCU does not implement the full TCP/IP stack in software. The MCU performs SPI transactions, writes socket registers, checks socket states, moves payload data into the TX buffer, reads payload data from the RX buffer, and runs the application logic. W5500 handles the Ethernet-side MAC/PHY path, protocol offload, hardware socket state, and internal packet buffering.

The performance-relevant register group is the socket buffer area. The source explains that W5500 has 16 KB of RX memory and 16 KB of TX memory across 8 sockets, with each socket configurable in 1 KB, 2 KB, 4 KB, 8 KB, or 16 KB blocks. The official ioLibrary documentation also warns that data larger than Sn_TX_FSR should not be written into the TX buffer without splitting, because it can overwrite unsent data.

Implementation Notes

File: Ethernet/W5500/w5500.h in WIZnet ioLibrary
What it configures: socket protocol mode, command execution, interrupt status, socket state, and source port addressing.
Why it matters: these definitions are the core network-stack control points. They decide whether a socket behaves as TCP, UDP, IPRAW, or MACRAW, and they provide the command and state registers used by firmware state machines.

 
#define Sn_MR(N)   (_W5500_IO_BASE_ + (0x0000 << 8) + (WIZCHIP_SREG_BLOCK(N) << 3))
#define Sn_CR(N)   (_W5500_IO_BASE_ + (0x0001 << 8) + (WIZCHIP_SREG_BLOCK(N) << 3))
#define Sn_IR(N)   (_W5500_IO_BASE_ + (0x0002 << 8) + (WIZCHIP_SREG_BLOCK(N) << 3))
#define Sn_SR(N)   (_W5500_IO_BASE_ + (0x0003 << 8) + (WIZCHIP_SREG_BLOCK(N) << 3))
#define Sn_PORT(N) (_W5500_IO_BASE_ + (0x0004 << 8) + (WIZCHIP_SREG_BLOCK(N) << 3))
 

The article explains the same register sequence: Sn_MR selects socket mode, Sn_CR issues commands, Sn_IR reports socket-level events, and Sn_SR reports the socket’s current state. The official ioLibrary notes that after a command is accepted, Sn_CR clears to 0x00, but firmware should still check Sn_IR or Sn_SR to confirm completion.

File: Ethernet/W5500/w5500.h in WIZnet ioLibrary
What it configures: per-socket buffer sizing and TX/RX data movement.
Why it matters: network performance is not only link speed. The firmware must check available TX space, manage write pointers, check received byte counts, update RX read pointers, and issue SEND or RECV commands at the right time.

 
#define Sn_RXBUF_SIZE(N) (_W5500_IO_BASE_ + (0x001E << 8) + (WIZCHIP_SREG_BLOCK(N) << 3))
#define Sn_TXBUF_SIZE(N) (_W5500_IO_BASE_ + (0x001F << 8) + (WIZCHIP_SREG_BLOCK(N) << 3))
#define Sn_TX_FSR(N)     (_W5500_IO_BASE_ + (0x0020 << 8) + (WIZCHIP_SREG_BLOCK(N) << 3))
#define Sn_TX_WR(N)      (_W5500_IO_BASE_ + (0x0024 << 8) + (WIZCHIP_SREG_BLOCK(N) << 3))
#define Sn_RX_RSR(N)     (_W5500_IO_BASE_ + (0x0026 << 8) + (WIZCHIP_SREG_BLOCK(N) << 3))
#define Sn_RX_RD(N)      (_W5500_IO_BASE_ + (0x0028 << 8) + (WIZCHIP_SREG_BLOCK(N) << 3))
 

The source article explains that Sn_TX_FSR reports how much free TX buffer space remains, Sn_TX_WR advances after data is placed into the TX buffer, Sn_RX_RSR reports how much received data is available, and Sn_RX_RD must be updated before the MCU issues the RECV command. These details are exactly where register-level education connects to real socket throughput and data loss prevention.

Practical Tips / Pitfalls

  • Check Sn_SR after every socket command. Sn_CR can clear before the command’s effect is fully visible, so firmware should verify state or interrupt flags before assuming success. 
  • Teach TCP server flow with SOCK_INIT → SOCK_LISTEN → SOCK_ESTABLISHED, not only with high-level listen() calls. This makes the hidden socket state machine visible to students. 
  • Do not write more data than Sn_TX_FSR reports. Oversized writes can overwrite data that has not yet been transmitted. 
  • Allocate TX/RX buffers according to the protocol. A telemetry socket may work with 2 KB, while FTP-like or bulk-transfer exercises may need larger buffers.
  • In RX handling, read Sn_RX_RSR, copy from RX buffer, update Sn_RX_RD, then issue RECV. Skipping the pointer update leaves W5500 believing the data is still unread. 
  • Use Sn_KPALVTR or SEND_KEEP deliberately in TCP lessons. The keep-alive register is valid only in TCP mode and uses 5-second units. 

FAQ

Q: Why use WIZnet W5500 for a socket-register education project?
A: W5500 exposes the network stack as hardware registers and buffers. Students can see how TCP, UDP, IPRAW, MACRAW, socket commands, interrupts, socket states, TX free size, RX received size, and keep-alive timing are controlled, while still using a real Ethernet controller with hardwired TCP/IP, 8 sockets, and 32 KB internal memory.

Q: How does W5500 connect to the MCU platform?
A: W5500 connects to an external MCU through SPI. The MCU selects W5500 register or buffer blocks using the SPI control phase, then reads or writes socket registers such as Sn_MR, Sn_CR, Sn_SR, Sn_TX_FSR, and Sn_RX_RSR. A complete board should also route reset and interrupt signals so firmware can recover the controller and respond to socket events.

Q: What role does W5500 play in this register project?
A: W5500 is the hardware socket engine being studied. The MCU controls each socket through mode, command, status, port, destination, buffer-size, pointer, interrupt-mask, and keep-alive registers, while W5500 handles the Ethernet MAC/PHY path and the hardwired TCP/IP behavior behind those registers.

Q: Can beginners follow this education project?
A: Yes, but it is best for learners who already understand SPI, hexadecimal register offsets, IPv4 basics, and simple TCP/UDP concepts. It is lower-level than a socket API tutorial, but that is the point: it shows what the socket API eventually manipulates inside W5500.

Q: How does W5500 compare with ENC28J60 and Wi-Fi for this lesson?
A: Compared with ENC28J60, W5500 teaches a hardware TCP/IP socket model because it includes hardwired TCP/IP, 8 sockets, and internal Tx/Rx buffers; Microchip identifies ENC28J60 as a 10Base-T Ethernet controller with SPI interface, so the host side normally carries more software-stack responsibility. Compared with Wi-Fi, W5500 is better for deterministic register-level Ethernet lessons because students work with fixed wired link state, socket registers, and buffer pointers; Wi-Fi is useful for mobility, but latency-sensitive Wi-Fi deployments often need QoS mechanisms to improve consistency in dense or challenging environments.

Source

Original article: CSDN, “W5500之Socket寄存器区介绍,” published on 2025-08-06 and marked as CC 4.0 BY-SA.

WIZnet product reference: W5500 documentation and ioLibrary Driver.

Alternative references for comparison: Microchip ENC28J60 product page and Wi-Fi Alliance QoS Management overview.

Tags

#W5500 #WIZnet #SocketRegisters #NetworkRegisters #SPI #MCU #Education #NetworkStack #Performance #TCP #UDP #IPRAW #ENC28J60 #WiFi

 

MCU 플랫폼에서 WIZnet W5500으로 소켓 레지스터 제어를 학습하는 방법은?

요약

이 교육용 프로젝트는 WIZnet W5500의 소켓 레지스터 영역을 설명하고, MCU가 SPI로 접근 가능한 레지스터를 통해 TCP, UDP, IPRAW, MACRAW, 송신 버퍼, 수신 버퍼, 소켓 인터럽트, 소켓 상태를 제어하는 방법을 다룹니다. W5500은 Ethernet MAC/PHY, 하드웨어 TCP/IP 스택, 8개 하드웨어 소켓, 내부 패킷 버퍼를 제공하고, MCU는 소켓 레지스터를 직접 읽고 쓰면서 네트워크 스택 동작을 학습합니다.

프로젝트가 하는 일

이 자료는 W5500 소켓 레지스터 블록을 설명하는 레지스터 수준의 walkthrough입니다. HTTP, FTP, MQTT, Modbus TCP 같은 완성형 애플리케이션이 아니라, 그런 애플리케이션이 동작할 수 있게 만드는 기초 레지스터를 설명합니다. 여기에는 socket mode, socket command, socket interrupt, socket status, source port, destination MAC, destination IP, destination port, MSS, TOS, TTL, socket buffer size, TX/RX pointer, interrupt mask, fragmentation, keep-alive timing이 포함됩니다.

네트워크 스택 학습은 Sn_MR에서 시작합니다. 이 레지스터는 각 소켓을 closed, TCP, UDP, IPRAW, MACRAW 같은 protocol mode로 설정합니다. 원문은 UDP multicast enable, broadcast blocking, TCP no-delayed-ACK behavior, MACRAW filtering 같은 socket option도 설명합니다. 이를 통해 학생들은 고수준 socket API를 사용하기 전에, 네트워크 프로토콜이 어떤 register bit로 선택되는지 직접 확인할 수 있습니다.

이후 원문은 socket execution과 state를 다룹니다. Sn_CROPEN, LISTEN, CONNECT, SEND, SEND_KEEP, RECV 같은 command를 실행하고, Sn_SRSOCK_CLOSED, SOCK_INIT, SOCK_LISTEN, SOCK_ESTABLISHED, SOCK_CLOSE_WAIT, SOCK_UDP, SOCK_MACRAW 같은 상태를 보고합니다. 이 구조는 학생들이 TCP client와 TCP server에서 보게 되는 상태 전이를 하드웨어 소켓 관점에서 이해하는 데 유용합니다.

WIZnet이 들어가는 위치

이 프로젝트에서 사용되는 WIZnet 제품은 W5500입니다. W5500은 외부 MCU와 LAN 사이에 위치하는 유선 Ethernet controller입니다. W5500은 하드웨어 TCP/IP 스택, 최대 80 MHz SPI 접근, 내장 10/100 Ethernet MAC 및 PHY, 8개 독립 socket, 32 KB 내부 Tx/Rx memory를 제공합니다. TCP, UDP, ICMP, IPv4, ARP, IGMP, PPPoE 같은 하드웨어 프로토콜도 지원합니다.

이 아키텍처에서 MCU는 전체 TCP/IP stack을 소프트웨어로 직접 구현하지 않습니다. MCU는 SPI transaction을 수행하고, socket register를 쓰고, socket state를 확인하며, payload data를 TX buffer에 넣고, RX buffer에서 payload data를 읽고, application logic을 실행합니다. W5500은 Ethernet 측 MAC/PHY 경로, protocol offload, hardware socket state, 내부 packet buffering을 처리합니다.

성능과 직접 연결되는 register group은 socket buffer 영역입니다. 원문은 W5500이 8개 socket에 대해 16 KB RX memory와 16 KB TX memory를 제공하며, 각 socket은 1 KB, 2 KB, 4 KB, 8 KB, 16 KB 단위로 설정할 수 있다고 설명합니다. 또한 Sn_TX_FSR보다 큰 데이터를 TX buffer에 나누지 않고 쓰면 아직 전송되지 않은 데이터를 덮어쓸 수 있으므로, firmware가 반드시 available TX space를 확인해야 합니다.

구현 참고 사항

파일: Ethernet/W5500/w5500.h in WIZnet ioLibrary
설정 내용: socket protocol mode, command execution, interrupt status, socket state, source port addressing
중요한 이유: 이 정의들은 네트워크 스택 제어의 핵심 지점입니다. 소켓이 TCP, UDP, IPRAW, MACRAW 중 어떤 방식으로 동작할지 결정하고, firmware state machine이 사용하는 command 및 state register를 제공합니다.

 
#define Sn_MR(N)   (_W5500_IO_BASE_ + (0x0000 << 8) + (WIZCHIP_SREG_BLOCK(N) << 3))
#define Sn_CR(N)   (_W5500_IO_BASE_ + (0x0001 << 8) + (WIZCHIP_SREG_BLOCK(N) << 3))
#define Sn_IR(N)   (_W5500_IO_BASE_ + (0x0002 << 8) + (WIZCHIP_SREG_BLOCK(N) << 3))
#define Sn_SR(N)   (_W5500_IO_BASE_ + (0x0003 << 8) + (WIZCHIP_SREG_BLOCK(N) << 3))
#define Sn_PORT(N) (_W5500_IO_BASE_ + (0x0004 << 8) + (WIZCHIP_SREG_BLOCK(N) << 3))
 

원문도 같은 register sequence를 설명합니다. Sn_MR은 socket mode를 선택하고, Sn_CR은 command를 실행하며, Sn_IR은 socket-level event를 보고하고, Sn_SR은 현재 socket state를 보고합니다. ioLibrary 기준으로 command가 수락되면 Sn_CR0x00으로 clear되지만, firmware는 완료 여부를 확인하기 위해 Sn_IR 또는 Sn_SR을 계속 확인해야 합니다.

파일: Ethernet/W5500/w5500.h in WIZnet ioLibrary
설정 내용: socket별 buffer size와 TX/RX data movement
중요한 이유: 네트워크 성능은 링크 속도만으로 결정되지 않습니다. Firmware는 available TX space를 확인하고, write pointer를 관리하며, received byte count를 확인하고, RX read pointer를 갱신한 뒤, 적절한 시점에 SEND 또는 RECV command를 실행해야 합니다.

 
#define Sn_RXBUF_SIZE(N) (_W5500_IO_BASE_ + (0x001E << 8) + (WIZCHIP_SREG_BLOCK(N) << 3))
#define Sn_TXBUF_SIZE(N) (_W5500_IO_BASE_ + (0x001F << 8) + (WIZCHIP_SREG_BLOCK(N) << 3))
#define Sn_TX_FSR(N)     (_W5500_IO_BASE_ + (0x0020 << 8) + (WIZCHIP_SREG_BLOCK(N) << 3))
#define Sn_TX_WR(N)      (_W5500_IO_BASE_ + (0x0024 << 8) + (WIZCHIP_SREG_BLOCK(N) << 3))
#define Sn_RX_RSR(N)     (_W5500_IO_BASE_ + (0x0026 << 8) + (WIZCHIP_SREG_BLOCK(N) << 3))
#define Sn_RX_RD(N)      (_W5500_IO_BASE_ + (0x0028 << 8) + (WIZCHIP_SREG_BLOCK(N) << 3))
 

원문은 Sn_TX_FSR이 남아 있는 TX buffer free space를 보고하고, Sn_TX_WR은 data가 TX buffer에 기록된 뒤 증가하며, Sn_RX_RSR은 수신된 data size를 보고하고, Sn_RX_RD는 MCU가 RECV command를 실행하기 전에 갱신해야 한다고 설명합니다. 이 지점이 register-level 학습과 실제 socket throughput, data loss 방지가 만나는 부분입니다.

실무 팁 / 주의점

  • 모든 socket command 이후에는 Sn_SR을 확인해야 합니다. Sn_CR은 command 효과가 완전히 반영되기 전에 clear될 수 있으므로, firmware는 state 또는 interrupt flag를 확인한 뒤 성공으로 판단해야 합니다.
  • TCP server flow는 high-level listen() 호출만으로 설명하지 말고 SOCK_INIT → SOCK_LISTEN → SOCK_ESTABLISHED 흐름으로 가르치는 것이 좋습니다. 이렇게 하면 숨겨진 socket state machine이 눈에 보입니다.
  • Sn_TX_FSR이 보고하는 크기보다 많은 데이터를 쓰면 안 됩니다. 과도한 write는 아직 전송되지 않은 데이터를 덮어쓸 수 있습니다.
  • TX/RX buffer는 protocol에 맞게 할당해야 합니다. 짧은 telemetry socket은 2 KB로 충분할 수 있지만, FTP 같은 bulk-transfer 실습은 더 큰 buffer가 필요할 수 있습니다.
  • RX 처리에서는 Sn_RX_RSR을 읽고, RX buffer에서 데이터를 복사하고, Sn_RX_RD를 갱신한 뒤, RECV command를 실행해야 합니다. Pointer 갱신을 생략하면 W5500은 해당 데이터를 아직 읽지 않은 것으로 간주합니다.
  • TCP 수업에서는 Sn_KPALVTR 또는 SEND_KEEP를 의도적으로 사용해야 합니다. Keep-alive register는 TCP mode에서만 유효하며, 5초 단위를 사용합니다.

FAQ

Q: 소켓 레지스터 교육 프로젝트에서 왜 WIZnet W5500을 사용하나요?
A: W5500은 네트워크 스택을 하드웨어 레지스터와 버퍼 형태로 명확하게 보여줍니다. 학생들은 TCP, UDP, IPRAW, MACRAW, socket command, interrupt, socket state, TX free size, RX received size, keep-alive timing이 어떻게 제어되는지 확인할 수 있습니다. 동시에 W5500은 하드웨어 TCP/IP, 8개 socket, 32 KB internal memory를 갖춘 실제 Ethernet controller입니다.

Q: W5500은 MCU 플랫폼에 어떻게 연결하나요?
A: W5500은 SPI를 통해 외부 MCU에 연결됩니다. MCU는 SPI control phase를 사용해 W5500 register 또는 buffer block을 선택하고, Sn_MR, Sn_CR, Sn_SR, Sn_TX_FSR, Sn_RX_RSR 같은 socket register를 읽고 씁니다. 완전한 보드 설계에서는 controller recovery와 socket event 처리를 위해 reset 및 interrupt signal도 연결하는 것이 좋습니다.

Q: 이 register project에서 W5500은 어떤 역할을 하나요?
A: W5500은 학습 대상인 hardware socket engine입니다. MCU는 mode, command, status, port, destination, buffer-size, pointer, interrupt-mask, keep-alive register를 통해 각 socket을 제어합니다. W5500은 이 register 뒤에서 Ethernet MAC/PHY 경로와 하드웨어 TCP/IP 동작을 처리합니다.

Q: 초보자도 이 교육용 프로젝트를 따라갈 수 있나요?
A: 가능합니다. 다만 SPI, hexadecimal register offset, IPv4 기초, 간단한 TCP/UDP 개념을 이미 알고 있는 학습자에게 더 적합합니다. 일반 socket API tutorial보다 낮은 계층을 다루지만, 그 점이 핵심입니다. 이 자료는 socket API가 결국 W5500 내부에서 어떤 register를 조작하는지 보여줍니다.

Q: W5500은 ENC28J60 및 Wi-Fi와 비교했을 때 이 수업에서 어떤 차이가 있나요?
A: ENC28J60과 비교하면 W5500은 하드웨어 TCP/IP, 8개 socket, 내부 Tx/Rx buffer를 포함하므로 hardware TCP/IP socket model을 가르치기에 적합합니다. ENC28J60은 SPI interface를 가진 10Base-T Ethernet controller로, 일반적으로 host MCU가 더 많은 software stack 책임을 가집니다. Wi-Fi와 비교하면 W5500은 고정된 유선 link state, socket register, buffer pointer를 다루기 때문에 deterministic register-level Ethernet 수업에 적합합니다. Wi-Fi는 이동성이 필요한 경우 유용하지만, 지연에 민감한 Wi-Fi 환경에서는 혼잡하거나 복잡한 환경에서 일관성을 확보하기 위해 QoS 같은 추가 메커니즘을 고려해야 합니다.

출처

Original article: CSDN, “W5500之Socket寄存器区介绍,” 2025-08-06 게시, CC 4.0 BY-SA로 표시됨.
https://blog.csdn.net/weixin_42550185/article/details/150010079?spm=1001.2014.3001.5502

WIZnet product reference: W5500 documentation and ioLibrary Driver.
https://docs.wiznet.io/Product/Chip/Ethernet/W5500

Alternative references for comparison: Microchip ENC28J60 product page and Wi-Fi Alliance QoS Management overview.
https://www.microchip.com/en-us/product/enc28j60

태그

#W5500 #WIZnet #SocketRegisters #NetworkRegisters #SPI #MCU #Education #NetworkStack #Performance #TCP #UDP #IPRAW #ENC28J60 #WiFi

Documents
Comments Write