CH32のPIOCはMCU内に置かれた小さなプロトコル処理CPUとして見ると面白い
CH32を理解するためのノート群 のうちPIOCを扱う。
事実
CH32X035などにはPIOC(Programmable Protocol I/O Controller)がある。
PIOCは単なるシフトレジスタやUARTではなく、専用命令を実行する小さなプログラマブルコントローラとして構成されている。資料ではRISC8Bと呼ばれる8bit系コア、専用命令領域、レジスタ、タイマ、GPIOなどが示されている。
公開されている例では、WS2812や1-Wire系デバイスのように、タイミング依存の強い信号生成・受信へ使われている。
コミュニティ側にはPIOC用のassembler/disassemblerを実装する試みもある。
考察
役割はRP2040のPIOに近い。
メインCPUでbit-bangすると、
- 割り込みレイテンシに依存する
- CPU時間を浪費する
- OSやUSB処理と競合する
ような処理を、小さな専用実行器へ追い出せる。
一方でRP2040 PIOほど開発環境が広く普及しているわけではない。PIOCそのものが優れていても、assembler、debug、サンプルの量が利用価値を左右する。
WCHの「周辺回路を固定機能として入れるだけでなく、用途依存の信号処理を小さなプログラマブル回路へ逃がす」という考え方として見ると興味深い。
向く用途
- WS2812系LED
- 1-Wire
- 独自single-wire protocol
- IR/特殊pulse protocol
- 厳密なbit timingを持つ単純I/O
ただし高速・複雑なprotocol全般を置き換えるものではない。
関連
X035全体についてはCH32X035は低価格MCUにUSBとUSB PDを同居させる意味が大きい。