SSブログ

Raspberry Pi Pico雑観いろいろ [Raspberry Pi]

もう1ヶ月以上前になるけど、Raspberry Pi Picoが発表された。僕は日本で買えるようになったらすぐ手に入れよう、本体より送料の方が高いのかよ、なんて思ってたら、あっという間にどこも売り切れてしまって、それっきりまだ帰ってこない(Amazonや楽天では例によってセコい転売ヤーが法外な高値で売ってるな。普通の人なら洟も引っかけないと思うけど)。まあ慌てなくてもいい。Pi Zeroのときもそうだった。欲しいときすぐ買えるようになるまでPi Zeroは1年ぐらいかかったけど...

これまでいろんなものにRaspberry Piを使ってきた。工場でのそこそこ信頼性の必要なところにも使っているけど、そういう用途にはSDカードは読むだけで書かないし、さらにハードとソフトのバックアップを持って運用している。しかし、なんといってもGPIO、I2C、SPIなんかの外部接続のための機能が揃っていて、それを使い倒すためのpigpioライブラリがあって、Wi-Fiが使えて、しかもLinuxなので僕にとってはプログラミングが簡単で、しかも安くて、と便利なことこのうえない。

パソコンにはGPIOのような低レベルの外部接続がないので、Raspberry Piが出る前はNI社のDAQなんかを使っていた。でもこれがちゃんとはしてるんだけど、結構お高かったり、Macのドライバがなかったり(一瞬できたり、またなくなったり。最初はMac IIのNuBus用のボードをやってたくせに)で使いやすいとは言えなかった。Raspberry Piのおかげで僕にとってそういう状況は一変した。

しかし今ではRaspberry Piでもちょっと大袈裟かな、という場面もある。たとえば、光強度をPDで受けてそれをパソコン(僕の場合はMac限定だけど)に取り込むためだけにPi Zero Wを使ったりしている。こんなものUSBかなんかで繋がる単機能のA/Dコンバータで十分なんだけど、そういうものがなかった。Arduinoというのも考えたけどPi Zero WにSPI接続のA/Dコンバータを手ハンダした方が安いというのでは、なんともしがたい。

というところで、このPi Picoである。ぴったりじゃん。これまでのRaspberry PiではBroadcomのSoCを使っていた(とは言っても最近のはPi専用らしい)けど、これはPi Foundationが新規に起こしたRP2040というSoCを使っているらしい。Linuxは積めないけど、Pi ZeroとかにはないA/Dポートと時計がSoCに内蔵されてて、温度計がついて、しかも550円とかなんで、僕にはこれでもうArduinoを使う理由は完全になくなってしまうはずである(まだ手に入れてないので確定できない)。

CPUコアとしてはCortex-M0+という32ビットのARMを使っているらしい。M0+は浮動小数点はしょうがないとして、結果が64ビットになる整数掛け算や整数割り算命令も実行できないらしい。まあOSが乗らないので他のPiとのバイナリ互換は不要で割り切りなんだろうな。AdafruitなんかからもRP2040を使ったボードが同時に出ている。メモリが2MBじゃ足りない、とかいう場合の隙間を埋めて少しでもSoCの数を増やそう、ということだろう。

RP2040はCPUコアをふたつ持ってるけど、OSがないのでThread poolのようなものはない。ブートすると片方のコアだけが動く。そのあと眠ってるもう一方のコアをキックすることで2コアが動く。コアの間にSIO(Single-cycle IO)があってその中にハードウェアスピンロックを持っていて、GPIOアクセスの排他制御と、ソフトウェアで必要なロックを自分で実装することになるんだろう。これはめちゃめちゃ大変なので、いずれはそのためのライブラリが整備されるかもしれないけど、いかに僕らがpthreadやGCDなんかにスポイルされているかということを思い知る。

Wi-Fi接続はできないけど、そのかわりUSBのデバイスモードを持っているのでむしろ自然な接続ができる(これまではWi-Fi経由でUDPブロードキャストして相手になるRaspbarry Piを探していた。たいていの場合、相手は決まっているので、単にDHCPでIPアドレス決め打ちできないのを回避するためのよぶんな手続き。相手が見つかったあとはTCPで繋ぎ直してsocketでデータをやり取りする、速くて密なデータではUDPを使う、ということをやっていた。socketは柔軟で簡単なのでこれはこれで便利だけど)。次に乗せるのならWi-Fiじゃなくて当然Bluetoothだな。

USBのディスクリプタを書くのは非常にめんどくさいのでやりたくないんだけど、TinyUSBというライブラリを使うことになっているらしくて、これが手間を低減してくれるんだろう。...と思ってたら同じだった。uint8_t device_desc[]でバイトごとに書くらしい。これは改めてゆっくり見ないといけない。それと、macOSの側からvendor specificなUSBデバイスを呼ぶとき、今でも昔のI/OKitが呼べるのかどうかわからない。USBDriverKitというのができてる。KEXTを廃止する関連らしいんだけど、I/OKitだったらもともとUSBを呼ぶ場合にはKEXTは必要なかった。IOUSBHostっていうのもあって、これとどういう関係なのかもよくわからん。これも要研究。こういうのに比べるとsocketって簡単だなあ。

USBは1.1だそうなのでちょっと華奢だけど、1.1で律速するほどのデータをPi Picoからもらうという状況はそれほど多くないだろう(そのうちUSB2.0のバージョンが出るだろう。RPxxxxの命名規則を見ると、いろんなバージョンを出す気満々みたいだし。ひょっとするとAppleみたいに本家Raspberry Piにも専用のSoCを起こすつもりかもしれない。そのための準備運動としてのPi Picoなのかもしれない)。A/Dは12ビットで最大500kspsでマルチプレクサが4本(ただし1本は温度計接続済み)というのだから、これまで使っていたSPI接続のMCP3204なんかより速い。線形性やS/Nを早く確認してみたい。

けっこうちゃんとしたドキュメントが整備されている。現在 の6つが上がっている。これまでとちょっと雰囲気が違って高機能半導体なんかの製品マニュアルみたいに必要十分な情報がすっきりとまとめられている。読みやすくていねいに書いてあるのでちびちび読んでいたら、さっそく解説してくれているサイトがあった。 これはありがたい。読ませていただいてからドキュメントを読むと頭に入りやすい。このサイトではこのあともずっとPi Picoの話が続いてる。僕も頑張らないと。

Pi PicoにはRaspberry Piを母艦にしてMicroPythonとC/C++用の開発環境があるんだけど、僕は貧乏性なのでCでゴリゴリに書いてとことんコキ使うのが好き。手に入れてとりあえず動かせたらSDKのマニュアルにあるmacOS用の開発環境を整備しよう。

まず手に入れないとな。
nice!(0)  コメント(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。