Wiznet makers

Benjamin

Published April 14, 2026 ©

108 UCC

11 WCC

8 VAR

0 Contests

0 Followers

1 Following

Original Link

RP2350 RFID TCP Controller with W6300 Ethernet

NFC/RFID card reader on RP2350 + W6300 that sends card UIDs over TCP with a built-in web configuration UI

COMPONENTS Hardware components

WIZnet - W6300-EVB-Pico2

x 1


adafruit - NeoPixel Ring: WS2812 5050 RGB LED

x 1

Software Apps and online services

platformio - PlatformIO Core

x 1


WIZnet - WIZnet io Library

x 1


PROJECT DESCRIPTION

W6300 and RP2350: The Next Generation

The W6300 is WIZnet's next-generation Ethernet controller, the successor to the widely used W5500. It adds QSPI interface support for faster communication with the host MCU, while maintaining the same hardwired TCP/IP offload architecture. Similarly, the RP2350 (Raspberry Pi Pico 2) upgrades the RP2040 with a faster Cortex-M33 core and more memory.

German maker Tom Kiehl (torion7) has built a project that puts this next-gen combination to work: an NFC/RFID card reader that sends card UIDs over TCP, with a full web-based configuration interface.

What It Does

The system reads NFC/RFID cards using a PN532 module connected over I2C, then transmits the card's UID to a remote server (or to a connected client) over TCP using the W6300's hardwired Ethernet. A 24-LED WS2812 ring on GPIO 28 provides visual feedback.

What makes this more than a simple card reader is the configurable rule engine. Six GPIO pins can each be assigned an action that triggers based on TCP messages or card events:

Pin ModeBehavior
SwitchToggle on matching TCP message
TimedTurn on for a set duration
PulseBrief output pulse
BlinkConfigurable blink pattern
Card PresentActive while any card is held on the reader
Card PulsePulse when a new card is detected

This means you can wire door locks, indicators, or relays directly to the board and have them respond to specific card UIDs or TCP commands, all configured through the web UI.

Dual-Core Architecture

The RP2350's dual-core design is used effectively here. Core 0 handles networking (W6300 Ethernet, HTTP server, TCP client/server, DHCP) while Core 1 runs the PN532 polling loop independently. This separation ensures that NFC card reads never block network activity and vice versa.

Communication between cores happens through a mailbox pattern: Core 1 writes detected UIDs into a shared buffer, and Core 0 picks them up on its next loop iteration for TCP transmission.

Built-in Web Configuration

All settings are configurable through a web UI served directly from the W6300-EVB-Pico2 board. The interface (written in German) covers:

  • Network settings: DHCP or static IP, MAC address, HTTP port
  • TCP mode: Server (listens for connections) or Client (connects to a remote host)
  • PN532 control: Enable/disable, debug logging, UID formatting (prefix, separator, suffix)
  • GPIO rules: Per-pin mode selection, trigger messages, timing parameters
  • WS2812 ring: Color and brightness

Configuration is stored on the RP2350's flash using LittleFS, so settings persist across reboots. The web UI also supports exporting and importing configuration as a text file.

Repository Structure

FileRole
src/main.cppAll application logic in a single 2,329-line file
src/app_config.h / .cppConfiguration struct, LittleFS load/save
src/web_ui.hEmbedded HTML/CSS/JS for the web configuration UI
src/ws2812_program.hPIO program for WS2812 LED driving
lib/WiznetW6300/W6300 driver library with QSPI PIO support

The W6300 driver in lib/WiznetW6300/ includes a PIO-based QSPI implementation (wizchip_qspi_pio.c), which leverages the RP2350's programmable I/O to communicate with the W6300 at higher throughput than standard SPI.

FAQ

Q: What is the W6300 and how does it differ from the W5500?
A: The W6300 is WIZnet's next-generation hardwired TCP/IP Ethernet controller. It supports QSPI (Quad SPI) for faster host communication, while keeping the same TOE architecture as the W5500. The socket API is compatible, so applications can migrate with minimal code changes.

Q: Can this work as both a TCP server and client?
A: Yes. The web UI has a TCP mode selector. In server mode, the board listens for incoming connections. In client mode, it actively connects to a remote host and sends card UIDs. Reconnection is automatic with a configurable interval.

Q: What types of NFC/RFID cards are supported?
A: The PN532 module reads ISO 14443A tags, which includes MIFARE Classic, MIFARE Ultralight, NTAG, and most standard NFC cards and key fobs. The system reads the card's UID (up to 7 bytes) and transmits it as a formatted string.

Q: Why use dual cores for this application?
A: NFC card polling requires frequent I2C communication with specific timing requirements. Running it on a dedicated core (Core 1) ensures that network latency or HTTP request handling on Core 0 never delays card detection. The RP2350's dual Cortex-M33 cores make this separation straightforward.


 

Documents
  • main.cpp

Comments Write