W5500 Generic Library
Renesas RL78 기반 “가벼운” WIZnet W5500 Ethernet 드라이버 + DNS Resolver
Components
Hardware components
- WIZnet W5500 (SPI Ethernet Controller)
- Renesas RL78/G13 계열 MCU (예제 프로젝트 구성)
- SPI 배선 (SCK / MOSI / MISO / CS)
- (옵션) UART 디버그 출력 환경
Software apps and online services
- C 빌드/컴파일 환경 (RL78 프로젝트 기반)
- (테스트용) PC 네트워크 도구(핑/포트체크 등) 또는 로컬 네트워크 환경
Overview
이 프로젝트는 Arduino용 고수준 라이브러리라기보다, MCU 펌웨어에 직접 포함해 쓰는 “드라이버형” W5500 라이브러리에 가깝습니다.
특징은 크게 두 가지입니다.
1. W5500 레지스터/버퍼 접근과 소켓 제어 API
- SPI를 통해 W5500 레지스터를 읽고 쓰며, 소켓을 열고/닫고/연결하는 기본 흐름을 제공합니다.
- TX/RX 버퍼 포인터를 다루는 전형적인 패턴(포인터 읽기 → 데이터 쓰기/읽기 → 포인터 갱신 → SEND/RECV 커맨드)을 구현합니다.
2. 내장 DNS Resolver(IPv4 A 레코드)
- UDP로 DNS 질의를 구성해 보내고, 응답을 파싱해서 도메인을 IPv4 주소로 변환하는 기능을 제공합니다.
- 도메인을 IP로 하드코딩하지 않아도 되어, 실제 서비스 연동(서버 주소 변경)에 유리합니다.
FAQ
Q1. “Generic”은 무슨 의미인가요?
A. 특정 RTOS/대형 스택에 강하게 묶이기보다는, SPI 전송/CS 제어/딜레이 같은 하드웨어 의존 레이어만 바꿔서 다른 MCU에도 옮기기 쉬운 구조를 지향합니다.
Q2. DNS 기능이 왜 중요하죠?
A. 임베디드에서 DNS가 없으면 IP를 고정해야 하는 경우가 많습니다. DNS가 있으면 example.com 같은 도메인 기반으로 서버를 지정할 수 있어 운영이 편합니다.
Q3. RL78 전용인가요?
A. 예제는 RL78 프로젝트로 구성되어 있지만, “드라이버형” 구조라 SPI/핀 제어 레이어를 교체하면 다른 MCU로도 포팅하기 쉬운 형태입니다.
Project Description
W5500 Generic Library
- Arduino처럼 편하게 쓰는 “완성형 라이브러리”가 아니라,
- MCU 펌웨어에 그대로 넣어 쓰는 드라이버형 W5500 라이브러리
- 예제는 RL78 기반이지만, 핵심은 “다른 MCU로 포팅하기 쉬운 구조”라는 점
왜 DNS 기능이 중요?
- 장치가 서버에 붙을 때 IP를 고정으로 박아두면 운영이 불편함
- DNS(도메인→IP) 를 넣으면
- 서버 IP가 바뀌어도 도메인만 유지하면 되고
- 현장 운영/유지보수가 쉬워짐
1) Low-level SPI access (레지스터/버퍼 I/O)
- W5500은 주소(16비트) + 컨트롤 바이트 + 데이터(payload)를 SPI로 전송하는 형태로 접근합니다.
- 네트워크 파라미터(게이트웨이/서브넷/MAC/IP) 설정과 읽기 확인 루틴이 포함되어 있습니다.
- 버전 레지스터를 읽는 형태의 간단한 “통신 헬스체크” 패턴도 포함됩니다.
2) Socket control + TX/RX buffer handling
- 소켓 OPEN 이후 상태가 초기화 상태가 될 때까지 확인하는 흐름이 존재합니다.
- 송신은 TX write pointer를 기준으로 버퍼에 쓰고 포인터를 갱신한 뒤 SEND 커맨드를 수행합니다.
- 수신은 RX read pointer를 기준으로 버퍼에서 읽고 포인터를 갱신한 뒤 RECV 커맨드를 수행합니다.
3) Built-in DNS Resolver
- DNS 질의를 UDP로 전송하기 위해 Query 패킷(QNAME/TYPE/CLASS)을 구성합니다.
- 응답에서 A 레코드를 찾아 4바이트 IPv4 주소를 추출합니다.
- 기본 DNS 서버 주소를 설정해 사용하는 형태로 구성되어 있습니다.
How to Validate (Quick Checks)
1. W5500 SPI 통신 확인
- 버전 레지스터(또는 특정 레지스터)를 읽어 정상 값이 들어오는지 확인합니다.
2. 네트워크 파라미터 설정 확인
- 게이트웨이/서브넷/MAC/IP를 설정한 뒤, 읽기 함수로 다시 읽어 값이 일치하는지 확인합니다.
3. DNS 동작 확인
- 도메인을 넣고 IPv4가 정상적으로 반환되는지 확인합니다.
- 반환된 IP로 TCP 연결(예: 서버 포트 연결)을 시도해 end-to-end 검증을 할 수 있습니다.
Ideas to Extend (확장 아이디어)
- DNS 결과를 캐싱해 재질의 빈도를 줄이기
- DHCP 지원 추가(고정 IP가 아닌 환경 대응)
- TLS는 MCU 성능/메모리에 따라 외부 보안 모듈 또는 상위 계층에서 처리
- 연결 끊김 감지 및 자동 재연결 로직 추가
W5500 Generic Library
A lightweight WIZnet W5500 Ethernet driver + DNS resolver (Renesas RL78 example)
Components
Hardware components
- WIZnet W5500 (SPI Ethernet Controller)
- Renesas RL78/G13 family MCU (example project setup)
- SPI wiring (SCK / MOSI / MISO / CS)
- (Optional) UART for debug logs
Software apps and online services
- C toolchain / build environment (RL78-style project)
- A local network setup for validation (ping / port checks, etc.)
Overview
This project is closer to a firmware-embedded W5500 driver than a high-level Arduino library.
It offers two practical building blocks:
1. W5500 register/buffer access and socket control API
- SPI-based register access and a basic socket workflow (open/close/connect).
- Typical TX/RX buffer handling patterns are implemented (read pointer → write/read data → update pointer → SEND/RECV command).
2. Built-in DNS resolver (IPv4 A record)
- Builds a DNS query over UDP and parses the response to return a 4-byte IPv4 address.
- This avoids hardcoding IP addresses and makes server endpoint management easier.
FAQ
Q1. What does “Generic” imply here?
A. The structure is designed to be portable: you mainly replace the hardware-dependent layer (SPI transfer, chip-select, delays) to move it to other MCUs.
Q2. Why is DNS support useful on embedded Ethernet?
A. Without DNS, embedded applications often hardcode IPs. DNS enables domain-based endpoints, which is more practical for real deployments.
Q3. Is it RL78-only?
A. The example targets RL78, but the driver-style architecture can be ported by adapting the SPI/CS/delay layer.
Project Description
1) Low-level SPI access (register/buffer I/O)
- W5500 access typically follows: 16-bit address + control byte + data payload over SPI.
- Includes routines for setting and verifying network parameters (gateway/subnet/MAC/IP).
- A simple “health check” pattern exists by reading a known register (e.g., version/status).
2) Socket control + TX/RX buffer handling
- Socket open flow checks the socket state until it reaches an initialized state.
- TX flow: read TX write pointer → write to TX buffer → update pointer → send command.
- RX flow: read RX read pointer → read from RX buffer → update pointer → recv command.
3) Built-in DNS resolver
- Constructs a DNS query packet (QNAME/TYPE/CLASS) and sends it over UDP.
- Parses the response to extract an IPv4 A-record result.
- Uses a configured DNS server address by default.
How to Validate (Quick Checks)
1. Verify W5500 SPI communication
- Read a known register (version/status) and confirm a valid value is returned.
2. Verify network parameter read/write
- Set gateway/subnet/MAC/IP, then read back and compare values.
3. Verify DNS resolution
- Resolve a domain and confirm a valid IPv4 is returned.
- Use the resolved IP to attempt a TCP connection for an end-to-end test.
Ideas to Extend
- DNS caching to reduce query frequency
- Add DHCP support for dynamic networks
- Implement link monitoring and auto-reconnect logic
- Separate security/TLS handling depending on MCU resources

