Firmware · Integration · Bench testing
From bare metal
to connected RFID.
I designed the firmware and coordinated an STM32-based UHF RFID controller, bringing custom drivers, an external reader module, network connectivity, and operator tools into a working bench prototype.
The challenge
Keep reader commands, continuous tag data, saved configuration, and multiple host interfaces working together within a bare-metal application.
What I built
A layered system around a Silion/Impinj E310 RFID module, with distinct board support, driver, protocol, service, and application layers.
- Custom drivers: UART, SPI, I²C and GPIO, with inventory, tag operations, persistent settings and industrial I/O control.
- Connectivity: USB CDC, serial links, W5500 Ethernet, and an ESP32 Wi-Fi coprocessor over I²C. Reader logic stays on the STM32.
- Operator tools: TAGlink Desktop (Python/PySide6) and Android (Flutter), with live inventory, settings, diagnostics and command logs.
- Diagnostics: watchdog handling, startup recovery, retained fault records, stack protection and main-loop timing.
Three problems, three useful lessons
01A stable Wi-Fi command path
Debugging an STM32 I²C interrupt loop and ESP32 task timing led to peripheral-state and reply-timing fixes. A documented F429/ESP32 bench checkpoint completed 1,000/1,000 commands with zero I²C errors, with a 31 ms median round trip.
02Recovering while the reader is still streaming
An STM32 reset left the reader sending tags into initialization. Stopping inventory, flushing stale data and retrying configuration improved recovery from 3/6 to 6/6 resets in the recorded test.
03Keeping uploads moving
Separating HTTP acknowledgements from commands and increasing batch sizes corrected the upload flow. A host simulation delivered 2,000/2,000 tags at 200 reads/s with a 400 ms round trip. Hardware testing later confirmed reception without a recorded throughput figure.
Where it stands
The recordings demonstrate the development-board prototype and both TAGlink interfaces. The custom STM32F411 PCB design is complete, with hardware testing still ahead. A STOP-command timeout near the end of the original mobile recording remains an item to investigate.
These are documented development checkpoints, not tests rerun for this website. The bench prototype and the untested custom PCB are separate stages of the project.
Have a similar challenge? ↗