

W5500
riocore
- Size
- 52.3 × 21.8 mm
- Copper layers
- 2
- Thickness
- 1.6 mm
- Parts
- 38
- Nets
- 47
- Pads
- 134
- Tracks, vias
- 226, 55
- Pours
- 2
- Routed
- Yes
- KiCad
- KiCad 9.0 (file 20241229)
- Created
- 18 Jan 2024
- Updated
- 2 Nov 2026
Overview
W5500 is an open-source printed circuit board by multigcs, from the multigcs/riocore repository on GitHub, published under the GPL-2.0 licence. It is a 2-layer board of 52.3 × 21.8 mm with 38 parts on 47 nets, routed with 226 tracks and 55 vias.
It is built around the W5500, TXM25M0004252DBCEO00T and UPZ1608E101-3R0TF, with the J0011D21BNL among its other parts. Its parts include 17 resistors, 13 capacitors, 1 IC, 1 connector and 1 crystal.
Main components
4W5500
LQFP-48_7x7-40℃~+85℃ 10BASE-T、100BASE-TX 3.3V 32KB SPI SPI Wake-up function、Programmable LED indication、Low-power mode Yes LQFP-48(7x7) Ethernet Controllers ROHSWIZNETEthernet ControllersTXM25M0004252DBCEO00T
SMD2520-4P-40℃~+85℃ 10pF 25MHz 45Ω Crystal Oscillator ±10ppm ±30ppm SMD2520-4P Crystals ROHSYajingxinCrystalsUPZ1608E101-3R0TF
0603-55℃~+125℃ 1 100Ω@100MHz 30mΩ 3A ±25% 0603 Ferrite Beads ROHSSunlordFerrite BeadsJ0011D21BNL
弯插0℃~+70℃ 1 Gold Phosphor bronze RJ45 Jack Right Angle Shielded With LED cat5 弯插 Ethernet Connectors / Modular Connectors (RJ45 RJ11) ROHSPulse ElecEthernet Connectors / Modular Connectors (RJ45 RJ11)
README
README.mdLinuxCNC-RIO - rewrite
RIO
Realtime-IO for Motion-Control
Table of Contents
About [blocked]
RIO is a cost-effective and flexible alternative to traditional hardware setups like Mesa boards, it's a code generator for using FPGA boards as Realtime-IO for LinuxCNC and other Motion-Control systems.
Furthermore, the complete configuration and hal is generated. a json configuration file serves as the basis
- operates without a soft-core processor, relying solely on FPGA logic, which eliminates jitter and ensures fast, reliable performance
- It supports communication via SPI (e.g., with Raspberry Pi 4) or Ethernet, providing flexibility for different hardware setups
- Configuration is managed via JSON files, enabling easy customization of pin selection and other parameters. The tool automatically generates LinuxCNC configuration files (HAL/INI), saving significant setup time
- using free FPGA-Toolchain or commercial (depends on the FPGA)
- Compatible with a wide range of FPGA boards, including ICE40, ECP5, MAX10, Artix7, Gowin, CycloneIV, and TangNano9K, allowing users to choose hardware that fits their needs and budget
- Supports open and closed-loop control for multiple motor types (e.g., stepper motors, DC servos), as well as mixed joint configurations
- Primarily intended for LinuxCNC but also suitable for other systems such as ROS (Robot Operating System)
These features make RIO an attractive solution for hobbyists and professionals seeking a customizable, cost-effective Realtime-IO interface for Motion-Control systems
DISCLAIMER [blocked]
THE AUTHORS OF THIS SOFTWARE ACCEPT ABSOLUTELY NO LIABILITY FOR ANY HARM OR LOSS RESULTING FROM ITS USE. IT IS EXTREMELY UNWISE TO RELY ON SOFTWARE ALONE FOR SAFETY. Any machinery capable of harming persons must have provisions for completely removing power from all motors, etc, before persons enter any danger area. All machinery must be designed to comply with local and national safety codes, and the authors of this software can not, and do not, take any responsibility for such compliance
Help [blocked]
Boards [blocked]
list of all boards: BOARDS
Plugins/Drivers [blocked]
list of all plugins: PLUGINS
supported Toolchains [blocked]
list of all toolchains: TOOLCHAINS
Getting Started [blocked]
There are multiple ways of getting started.
- Installer-Script (tested on debian bookworm and trixie) installer.
- Install riocore on the linux host.
- Use docker.
Installer-Script (debian-bookworm only) [blocked]
if you have a Debian-Bookworm installation (e.g. from the LinuxCNC ISO or the LinuxCNC raspberry image) you can simply use this script to install all depends and the icestorm and gowin toolchain (gowin only on Intel/AMD)
wget -O- https://www.multixmedia.org/riocore-installer.sh | bashInstall ricore on the host [blocked]
- installing via git:
git clone https://github.com/multigcs/riocore.git
cd riocore- installing dependencies via apt:
apt-get update
apt-get -y install python3 python3-pip python3-yaml python3-graphviz python3-pyqtgraph python3-pyqt5 python3-pyqt5.qtsvg python3-lxml python3-psutil python3-spidevmake sure that the toolchain matching your fpga is in the path:
export PATH=$PATH:/opt/oss-cad-suite/bin/
export PATH=$PATH:/opt/Xilinx/Vivado/2023.1/bin/
export PATH=$PATH:/opt/gowin/IDE/bin/
export PATH=$PATH:/opt/intelFPGA_lite/22.1std/quartus/bin/
export PATH=$PATH:/opt/Xilinx/14.7/ISE_DS/ISE/bin/lin64/than copy a config file that is near to your setup:
cp riocore/configs/Tangoboard/config-spi.json my_config.jsonDOCKER (alternative)
Using a TangNano9k or other board supported by the open-cad-suite? Check out the docker setup for an easy to use all in one way to run the riocore ui and generator, including flashing: DOCKER
Usage [blocked]
you can edit your configuration file by hand (text-editor) or using the config tool (rio-flow):
bin/rio-flow riocore/configs/Tangbob/config.json
after setup, you can save your configuration and generate the output-files in the setup-tool via buttons:
- Generate : generates the output-files and write it into the './Output/' folder
- Compile: compiles the Bitfile for your FPGA
- Flash: writes the new bitfile onto the FPGA
you can also do this things on your console:
generate:
bin/rio-generator my_config.jsonloading: my_config.json
loading board setup: TangNano9K
writing gateware to: Output/Tangoboard/Gateware
!!! gateware changed: needs to be built and flashed |||
loading toolchain gowin
writing linuxcnc files to: Output/Tangoboard/LinuxCNCcompile:
(
cd Output/BOARD_NAME/Gateware/
make clean all
)flash:
(
cd Output/BOARD_NAME/Gateware/
make load
)You can find all the LinuxCNC related files in 'Output/BOARD_NAME/LinuxCNC/',
to start LinuxCNC, you have to install the rio component first:
sudo halcompile --install riocore/files/rio.cthen you can start LinuxCNC with your new .ini file:
linuxcnc Output/BOARD_NAME/LinuxCNC/rio.ini[!WARNING] all files will be overwritte by the generator tool
if you change the .ini file by hand, for example, you should make a copy of it
if you need an additional .hal file, you can incude it in the postgui_call_list.hal
rio will not overwrite this entry's
Prerequisites
you need the toolchain for your FPGA or in some cases the https://github.com/YosysHQ/oss-cad-suite-build
Flow [blocked]
Generator
graph LR;
BOARD.JSON--rio-flow-->CONFIG.JSON;
CONFIG.JSON--rio-generator-->/Output;
/Output-->/Gateware;
/Gateware-->Makefile;
/Gateware-->verilog-files;
/Gateware-->pins.*;
Makefile--make-->Bitfile;
Bitfile--make load-->FPGA;
/Output-->/LinuxCNC;
/LinuxCNC-->riocomp.c;
/LinuxCNC-->rio.ini
/LinuxCNC-->rio-gui.xml
/LinuxCNC-->*.hal;
/Output-->/ROS;
/Output-->/MQTT;
/Output-->/Simulator;LinuxCNC
graph LR;
LinuxCNC<-->rio.c;
rio.c<-->riocomp.c;
riocomp.c<--UDP/SPI-->FPGA;
FPGA<--RS422/RS485-->SUB_FPGA;ROS
graph LR;
ROS-Plugin-1<--TCP-->ROS-core
ROS-Plugin-2<--TCP-->ROS-core
ROS-Plugin-N<--TCP-->ROS-core
ROS-core<--TCP-->rosbridge;
rosbridge<--UDP/SPI-->FPGA;
FPGA<--RS422/RS485-->SUB_FPGA;MQTT
graph LR;
HTML+JS<--Websockets-->MQTT-Broker
MQTT-Client-1<--MQTT-->MQTT-Broker
MQTT-Client-2<--MQTT-->MQTT-Broker
MQTT-Client-N<--MQTT-->MQTT-Broker
MQTT-Broker<--MQTT-->mqttbridge;
mqttbridge<--UDP/SPI-->FPGA;
FPGA<--RS422/RS485-->SUB_FPGA;JSLIB
graph LR;
nodejs<-->JSLIB
JSLIB<--UDP-->FPGA;
FPGA<--RS422/RS485-->SUB_FPGA;Directory Structure
Source
riocore
├── bin ················ user tools / gui's
├── doc ················ documentation
├── dockerfiles ········ files to run the docker container
├┬─ ricore ············· main directory
|├── configs ··········· some demo configurations
|├── gui ··············· widgets and functions for the gui tools
|├── files ············· helper scripts and files
|├── generator ········ the generator for the LinuxCNC configuration
|├── plugins ··········· location of the plugins
├── tests ·············· unit testsGenerated Output
Output
├┬─ BOARD_NAME ········· for each board
|├── Gateware ·········· Gateware-Files for the FPGA
|├── LinuxCNC ·········· LinuxCNC configuration (hal/ini/component)
|├── PYLIB ············· C and Python lib with testgui.py
|├── MQTT ·············· MQTT-Bridge
|├── ROS ··············· ROS-Bridge
|├── Simulator ········· Simulator-Sources
|├── JSLIB ············· Javascrit lib
|├── DOC ··············· some Documentation filesParts
38| Qty | Value | Footprint | References |
|---|---|---|---|
| 4 | 0R | Resistor_SMD:R_0603_1608Metric | R35, R36, R37, R38 |
| 4 | 10K | Resistor_SMD:R_0603_1608Metric | R29, R30, R31, R32 |
| 4 | 49.9R | Resistor_SMD:R_0603_1608Metric | R39, R40, R42, R43 |
| 4 | TestPoint | TestPoint:TestPoint_Pad_D1.0mm | TP1, TP2, TP3, TP4 |
| 3 | 0.1uF | Capacitor_SMD:C_0603_1608Metric | C36, C40, C41 |
| 2 | 10nF | Capacitor_SMD:C_0603_1608Metric | C37, C46 |
| 2 | 10uF/6.3V | Capacitor_SMD:C_0603_1608Metric | C35, C39 |
| 2 | 18pF | Capacitor_SMD:C_0603_1608Metric | C33, C34 |
| 2 | 330R | Resistor_SMD:R_0603_1608Metric | R33, R34 |
| 2 | 6.8nF | Capacitor_SMD:C_0603_1608Metric | C44, C45 |
| 1 | 10R | Resistor_SMD:R_0603_1608Metric | R41 |
| 1 | 12.4K | Resistor_SMD:R_0603_1608Metric | R25 |
| 1 | 1M | Resistor_SMD:R_0603_1608Metric | R24 |
| 1 | 22nF | Capacitor_SMD:C_0603_1608Metric | C43 |
| 1 | 4.7uF | Capacitor_SMD:C_0603_1608Metric | C38 |
| 1 | Crystal_25MHz | Crystal:Crystal_SMD_2520-4Pin_2.5x2.0mm | Y2 |
| 1 | FB_100R_3A | Inductor_SMD:L_0603_1608Metric | FB7 |
| 1 | RJ45_Pulse_J0011D21BNL | Connector_RJ:RJ45_Hanrun_HR911105A_Horizontal | J6 |
| 1 | W5500 | Package_QFP:LQFP-48_7x7mm_P0.5mm | U8 |
Questions
How big is the W5500 PCB?
It measures 52.3 × 21.8 mm and has 2 copper layers, 1.6 mm thick.
What parts does the W5500 use?
38 parts, built around the W5500, TXM25M0004252DBCEO00T, UPZ1608E101-3R0TF and J0011D21BNL. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
Where can I download the W5500 KiCad files?
From the multigcs/riocore repository on GitHub, at the commit this page was made from: the board is riocore/plugins/w5500/kicad/w5500/w5500.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.
Can I use the W5500 design in my own project?
Its repository publishes it under the GPL-2.0 licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).
More from multigcs/riocore
12- 2 layers34.1 × 30.3 mm

- 2 layers52.5 × 57.6 mm

- 2 layers19.6 × 43.7 mm

- 2 layers23 × 35.3 mm

- 2 layers23 × 35.3 mm

- 2 layers13.5 × 24.5 mm

- 2 layers16.2 × 28.6 mm

- 2 layers24.9 × 21.9 mm

- 2 layers13 × 22.5 mm

- 2 layers12.8 × 17.1 mm

- 2 layers19.8 × 26.8 mm

- 2 layers16.1 × 10.7 mm

Similar boards
- 4 layers190 × 100 mm

Rioctrl controller
festlv/rioctrl-hw
Hardware design for modular CNC controller
281 parts16CERN-OHL-S-2.0 - 2 layers90 × 80 mm

Kanalog jp12-breakout
festlv/kanalog-jp12-breakout
Breakout board for KFlop's Kanalog JP12 (adds 8 inputs, 8 outputs to Kanalog)
103 parts - 6 layers100 × 60 mm

- 2 layers153.8 × 38.9 mm

Farallon EtherMac LC Comm Slot Card 10Base T v1.2D
alxlab-zone66x/Macintosh-Comm-Slot-I-Ethernet-Card
This is a reproduction of the Farallon LC Comm Slot Ethernet Card.
44 parts2 - 2 layers105 × 42 mm

- 2 layers79 × 38 mm

Ethersweep
Neumi/ethersweep
Open Source, easy to use Ethernet connected stepper motor controller. Built in FreeCAD, KiCAD and Arduino.
111 parts587 - 4 layers119 × 79 mm

Luxdmx
tombueng/LuxDMX
Open-source Art-Net / sACN (E1.31) → DMX512 gateway for ESP32 / ESP32-S3 / Ethernet. Live web UI shows all 512 channels in real time, flags console conflicts, and drives galvanically-isolated DMX.
97 parts97 - 4 layers72.6 × 170 mm

OpenJBOD RP2040
OpenJBOD/rp2040
This repository contains the hardware design files OpenJBOD RP2040 Baseboard.
129 parts87CERN-OHL-P-2.0
