tinyboot v0.4.0 adds CH32V00x support, stable API, tiny Rust bootloader
tinyboot v0.4.0 turned a 1,920-byte CH32 bootloader into a stable base for real updates. The release adds CH32V00x support and CRC-checked trial boot.

tinyboot crossed a useful line in v0.4.0: the Rust bootloader for CH32 parts now has a stable API, a stable wire protocol, and support for the CH32V00x family, including the V002, V004, V005, V006, and V007 chips. For makers working on low-cost boards, the practical payoff is immediate. The bootloader still fits in just 1,920 bytes of system flash, yet it now gives CRC-validated firmware updates over UART, trial boot, and automatic fallback to bootloader service mode when trials run out.
That combination matters because tinyboot is not trying to be a large firmware framework. It is built for constrained hardware where every byte counts, and its design keeps the update path predictable. The protocol crate defines the frame format, commands, status codes, and CRC used for host-device communication over UART and RS-485, and it uses CRC16-CCITT. On the device side, the tinyboot-ch32-rt runtime is tuned to keep startup overhead to about 20 bytes, which helps the project stay inside the narrow system-flash budget.
The release also strengthens tinyboot’s role in OpenServoCore, the open-source smart-servo platform that uses CH32V006-based servo boards. Those boards can be updated over the existing DXL TTL bus, so there is no need to open the enclosure or reach for a debug probe just to push new firmware. The repository contrasts that workflow with WCH’s factory CH32 bootloader, which is fixed to 115200 baud on PD5 and PD6, lacks configurable UART pins, baud rate, and TX-enable for RS-485, and uses a sum-mod-256 checksum instead of CRC verification. It also has no trial boot and no boot-state machine.

tinyboot also keeps application space as open as possible on the CH32V003. The project says the chip’s full 16 KB of user flash remains available for the application, aside from a small metadata page. In the CH32 system-flash example, boot metadata such as state, trials, and checksum is stored in option bytes at 0x1FFFF810, which avoids spending either system flash or user flash on metadata.
Packaging is moving toward a steadier footing as well. tinyboot-core, tinyboot-protocol, tinyboot-ch32-rt, and the tinyboot CLI are already on crates.io, while tinyboot-ch32 is still consumed from git because CH32V00x flash support depends on ch32-metapac. The result is a release that feels less like an experiment and more like a foundation: compact, safer to update, and far more ready for CH32 projects that need to survive more than one weekend build.
Know something we missed? Have a correction or additional information?
Submit a Tip

