Wiznet makers

sophia

Published February 20, 2026 ©

44 UCC

7 VAR

0 Contests

0 Followers

1 Following

Original Link

W5500 Generic Library

Renesas RL78 기반 “가벼운” WIZnet W5500 Ethernet 드라이버 + DNS Resolver

COMPONENTS Hardware components

WIZnet - W5500

x 1


PROJECT DESCRIPTION

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
Documents
Comments Write