あっきぃ日誌

鉄道ブログのような技術系ブログのようななにか

CircuitPythonがRP2040の内部I2Cプルアップを使ってないらしいので板の改良をする+おまけ

また基板作って遊んでるオタクの話。

uHAT Porter Pico Type-P Rev.3

作りました。発送済みで来週くらいには届くはず。完全に自分用なのと、失敗してたらコワイので、控えめに5枚だけです。

記事のタイトルの通りで、Raspberry PiのI2Cを使うようなHATを載せてCircuitPythonで動かそうとすると、以下の通り怒られてしまい、使えません。

RuntimeError: SDA or SCL needs a pull up

3.3VからSDAとSCLにそれぞれ10KΩあたりで使ってプルアップすると、ちゃんと動作することが確認できました。なるほどなあ。

ググってみるとPimoroniのフォーラムの記事が引っかかり、中でCircuitPythonのメンテナーの人も言及していますが、どうもRP2040の内部プルアップ抵抗は高すぎるらしく、他との互換性維持とかを考えると難しいと判断しており、内部プルアップの有効化を見送っているようです。MicroPythonは有効にしている(ので使えている)はずなのでよくわからないですが、まあ、とにかくCircuitPythonでは自分でプルアップ抵抗を用意しないといけない、ということのようです。

github.com

そこで、冒頭の通りボードの左上にチップ抵抗が載せられるパッドを用意して、お好みでプルアップできるようにしてみました。というのがRev.3のおもな変更点です。お好みでと言いつつ、5枚しかないので全部CircuitPython専用になりそうですが、これによってCircuitPythonでたくさんのボードが動かせるようになりそうです。

もうひとつ。ピン配置をRev.2からいじってしまいました……。読み替えライブラリは後ほど整備しますが、PicoのGP6〜GP9が以下の通り入れ替わりました。

Pico Pi BCM Pi GPIO Pi GPIO Pi BCM Pico
------ -------- ------- ------- --------- -----------
GPIO6→9 BCM27 13 14 GND GND
GPIO7→8 BCM22 15 16 BCM23 GPIO8→7
3V3 3V3 17 18 BCM24 GPIO9→6

これは以前PimoroniのBlinkt!対応で、Type-Pになってから表示スピードが遅くなってしまった問題への対応になります。

akkiesoft.hatenablog.jp

Pinout.xyz曰く、Blinkt!ではBCM23をData、BCM24をClockとして使用していました。

Blinkt! at Raspberry Pi GPIO Pinout

Type-SではBCM23がGP27/SPI1 TX、BCM24がGP26/SPI1 SCKにそれぞれ割り当てられていたため、うまく噛み合って高速に動作していたようです。

ところが、Type-Pではこのあたりのピンは余っているものを適当に当てはめていたため、SPI1 RX・SPI1 CSnが割り当たってしまい、動作が遅くなっていました。これをRev.3ではBCM23にGP7/SPI0 TX、BCM24にGP6/SPI0 SCKを割り当てることで、高速動作できるように対応しました。

まあこだわりだしたらリビジョンごとにどんどんピンが変わっていってしまうため、このへんでやめにしたいところですが、まあこれでかなりの数のボードがイイカンジに動くようになりそうです。たのしみ。

おまけ: あの板の板(失敗編)

これはブログ初出しのネタ。私も秋月の例の箱を買いました。写真の左はシャポコさんの静電気メーター。たのしい!

1000円でWi-SUNモジュールが手に入るらしいとのことで買ってみましたが、本当に入ってました。独自のSBC的なボードについてはすでに解析班が解析済みで、なんか色々動くそうなのですが、私も最低限触ってみたところで放り出しました。私はWi-SUNモジュールで遊べればOKなので、遊べる板を作ります。本当はモジュールからシリアル部分だけを引き出そうとしたのですが、エナメル線をつける技量がなかったので作ります。TESERRA純正の変換ボードが3000円で買えるようですが、自分で作ります。

akizukidenshi.com

なんとなくひと目で、「Picoに載せたいサイズだな」となったので、Pico向けのボードとして作ることにしました。

そうして作ってみたのがこちら。コネクターの他に2.54mmヘッダーの穴を用意することで、Pico以外でも使えることを少し意図しています。部品は手ハンダが無理ということで、初めてJLCPCBの表面実装サービスを使ってみました。ちょうど同じコネクターの部品が用意されていたので助かりましたね。Kicadはちょっと違う型番の部品があったので、それをベースに改造しました。が、後にこれもRev.1では失敗していることを知ります。

表面実装専用9ドルクーポンを駆使して、5枚を12ドル弱/1500円くらいで発注して、そして到着。

とにかくコネクターの配置ミスとか固定穴の位置ずれが心配でしたので、すぐにモジュールを載せて確認。良さそうです。

そして動作確認をしますが……動かない。まさかと思って謎ボードと見比べると、アッーやっちまった、ピン配置が鏡になっとる〜〜!!

というわけで、1500円で緑の板のキーホルダーが5枚できあがってしまいました。仕様書を何度も見ていましたが、モジュールが乗るときはひっくり返ることを完全に失念していました。惜しい。

クーポンもあと1枚あるため、すぐさまリベンジします。配置を直しつつ、I2CやVSYSなども引き出して、ディスプレイモノと組み合わせられるようにちょっと考慮してみました。が、よく考えたらそのへんのOLEDモジュールで良くあるピン配置に揃えても良かったかもしれないし、例によってプルアップ抵抗も入れても良かったかもしれない。まさに沼。

これで今度こそ発注!ワクテカして待っていると、要レビューのステータスになり、サポートからメールが来ました……。曰く、改造したコネクターのフットプリントで付け足した、コネクターの固定用ハンダパッドがパッドになってないけど、大丈夫?とのこと。つまり、Rev.1ではハンダパッドがないままコネクターが載せられて、固定ピンは何もはんだ付けされていないようでした。今回のレビューエンジニア氏に超感謝しつつ、パッドにしてもらうようにメールを何度かやり取りしたところ、なんとか調整してもらうことに成功しました。

そして今に至るのですが、現在は基盤製造プロセスの後半の状態です。なので、届くの私が誕生日を迎える頃かな〜?といった具合です。今回も5枚で発注していて、私と、部長と、SMHNの0.1t氏になんとなく割当てが決まっているので、のこり2枚はなんか欲しい人がいれば(そもそも今度こそ成功すれば)……?といった感じです。お楽しみに。