6. PIOが使えない RP2350B固有の現象?
音声再生のノイズはさておき、動画プレイヤーとして仕上げよう。
コマ落ち対策にはマルチコアでJPEGデコード!とか思ったが、思ってたより改造範囲が広いのに気が付いた。
LCDドライバの構造が違いすぎるんだよな。
でも音付きで動画再生できるように、wrapper関数経由でJPEGデコード&音声再生を組み込んで動かした。
予想していたことだが SoftSPI 経由でのSDカード読み込みがボトルネックになってる。プログラムでクロック作ってるんだからそりゃ遅いよね。
となれば、SPIをPIOで作るしかないでしょ。
QSPI が動くようにできたんだから、SPI程度は楽勝楽勝。
と思いながら作り始めたら思った以上にシンプルなプログラムになった。そりゃそうか、PSRAM ドライバに比べたらシンプルだよね。マジ楽勝。
と思ってたこともありました。動きません。orz
1バイトは送受信できるが2バイト目が動かない。ステートマシンが途中でハングアップしてる。
もしかして RP2350のmicropythonのビルドが間違ってる?とか思ってボード情報を見直した。rp2350 を指定する必要があったが漏れてたので、それを修正したが動かない。
外部に信号線が出てればロジアナつなぐんだがなあ。RP2040PiZEROと違って不便だなぁ。
と思って気が付いた。RP2040PiZERO使ってテストすりゃいいのか。
pythonプログラムなので修正はポート変更するだけ。そして動かしたら全く問題なく波形が出てる。あれ?なんで?
SDカードをつないでも問題なく動く。あれ?なんで?
RP2350固有の問題かなぁ。と思ってマニュアルを読んでいたら RP2350の拡張機能が書いてある。
PIOはGPIO32本が前提で設計されているらしく、RP2350Bで追加されたGPIOを使うには、GPIO_BASE を設定して、GPIOのピン番号をずらして使うようだ。
なるほど、そういう仕掛けなのか。
って、じゃあmicropythonのドライバがエラーを返してくれればいいのに…
ともあれGPIO_BASEを設定すると、ちゃんと2バイト目以降も処理をするようになった。だがSDカードを認識しない。データの読み取りができてない感じ。
ポートが間違ってるかと思ったが、SoftSPIで動いて使えているから番号は間違ってない。
PIOのレジスタの値をダンプしても妥当そうな値が入っている。
さすがにもう疲れた。
LCDとSDカードが同じSPIを使ってるから同時使用ができないんだが、マルチコア処理をあきらめれば使えるはず。
ということで、PIOのデバッグは未来の自分にお任せだ。
とりあえず動くところまでもっていって github 更新したい。




