WCHのfactory ISPとwchispはSWIOを使わないfirmware更新経路になる
CH32の書き込みとデバッグはSWIO・ISP・minichlink・probe-rsを分けて考える のISP部分を分離したノート。
事実
WCH MCUの多くにはfactory bootloaderがあり、wchispはそのISP protocolを扱うオープンソースCLIである。
USB peripheralを持つ対応MCUではUSB ISPを利用できる。
wchispの公開例ではCH32V307、V103、V203、X035などで動作実績が示されている。
一方、CH32V00xはUSB ISPを持たずUART経由になる。
CH32V003のfactory bootloaderはuser Code Flashとは別のSystem/BOOT領域にあり、0x1FFFF000から1,920 byteが割り当てられている。
V003ではBOOT0 pinのような外部pinだけでfactory bootloaderへ入る仕組みではなく、application側からFLASH_STATR.MODEを設定してsoftware resetする必要がある。
考察
factory ISPはdebug probeの代替というより、field update経路として見ると分かりやすい。
量産後に必要なのは必ずしもbreakpointやmemory inspectではなく、
- firmwareを消す
- 書く
- verifyする
- option設定を変更する
という限定された操作だからである。
USB peripheralを持つCH32では、製品自身のUSB端子をそのまま更新経路へ使える可能性がある。
V003ではこの経路がUARTに限定され、boot entryにも癖があるため、USBを持たないCH32V003をUSBで書き込むrv003usb bootloaderのようなcommunity bootloaderが生まれた。
注意点
factory bootloaderは系列ごとの差が大きい。
「CH32なら同じISP」とは限らず、transport、boot entry、option byte、対応protocol versionを確認する必要がある。