aki_iic’s blog

己の欲せざる処人に施す事無かれ、狂人の真似するは即ち狂人なり

PIO

 私が居た業界ではPIOはProgram Input / Outputの略で所謂プログラム転送(DMAの対語)であったが本タイトルのPIOはRPi pico(正確にはRP2040 chip)のモジュールであるProgrammable i/o blockの事です。本モジュールの技術情報は財団から開示されていて:

https://datasheets.raspberrypi.com/rp2040/rp2040-datasheet.pdf?_gl=1*14fiwwn*_ga*MTE2NDgzNTQwOS4xNjk1OTI4MzMx*_ga_22FD70LWDS*MTY5NzkyMjY4OC4zLjAuMTY5NzkyMjY4OC4wLjAuMA..

 のchapter3を精読すれば良い筈で命令セットも簡潔に開示されている

RP2040 PIO 命令セット

 なのですがマニュアルを精読すれば使えるかと言えばそうではないのが世の常(なので、解説本市場が存在する訳でありまして:)RPi pico全体含めて入手したのが:

 

 な訳であります。本書の7章がPIOの解説に割り当てられており、その大半が上記財団マニュアルの翻訳的な処も含まれておりますが、micropythonからのアクセス含めて参考になりました。

 命令セットから推察するにPIOは16bit固定長のマイクロシーケンサ(一応、CPU)でこの手のシーケンサというかCPUではあるあるな命令体系ではありますがRPI picoのサブシステムとして位置づけられており、APBがどうちゃらとか膨大なレジスタ設定等は隠蔽され、ユーザからmicropytho或いはPIO用assemblerでコーディング出来、且つそこそこの速度(最大pico本体のCPUと同一クロック:133Mhz:迄)で動作する様で、ユーザから見えるプログラミングモデルは:

PIO programming model

 と色々な解説書で書かれているが、これだけでPIOの機能を把握するには不足な様でやはり財団RP2040ドキュメントのchapter3を読破した上で、micropythonなりPIO assemblerなりで手を動かし、場合によりロジアナ等を接続し、命令セットレベルの動作を体得するのが宜しいのだろう。この手のプログラマブルなサブシステムでマイクロシーケンサ的な物は好物で猫型人間な私の琴線に触れるアイテムなのでちまちま読み解いて行きたい(コードのコピペではなく:)。個人的にPIO機能を組み合わせて実現出来たらと思いつくアイテムが有る(珍し:)ので当面は脳内空間試行実験でアーキテクチャ理解と想定アプリケーションへのフィージビリティスタディといふ事で。

わくわく:)