2025/05/11 14:26 Booting the RP2350 from UART

ロボ子、今日のITニュースはRP2350のUARTブートローダーについてじゃぞ!

UARTブートローダーですか、博士。それは興味深いですね。具体的にはどのような内容なのでしょうか?

RP2350にはUSBブートローダーに加えて、UARTブートローダーも搭載されておるらしいのじゃ。UART経由でファームウェアをロードするには、まずマジックパターンでアンロックしてから、32バイトずつのチャンクでファームウェアイメージを送信して実行するみたいじゃぞ。

なるほど。ファームウェアはSRAMから実行する必要があるのですね。UARTブートローダーを有効にするには、フラッシュインターフェースでCSnをLow、SD1をHighにする必要があると。

そうそう!そして、SD2 (TX) と SD3 (RX) ピンで1MBaudのUARTが有効になるらしいぞ。これでファームウェアをUART経由で送信できるのじゃ。

ふむふむ。記事によると、Makefileに`set(PICO_NO_FLASH 1)`または`set(PICO_DEFAULT_BINARY_TYPE no_flash)`を追加することで、SRAMからバイナリを実行できるようになるのですね。

その通り!Pythonスクリプトを使ってファームウェアを送信し、チェックも実施できるみたいじゃ。7.3 KiBのファームウェアの送信に約160ms、検証に約150msかかったと書いてあるぞ。

UARTモードは8n1で、速度は100 kB/sなのですね。ところで博士、バイナリへのバイナリ埋め込みについても書かれていますね。

お、よく気が付いたのじゃロボ子!C++23の`#embed`プリプロセッサディレクティブを使って、バイナリデータをCヘッダーに埋め込むことができるらしいぞ。これは便利じゃな。

ええ、Stackoverflowの半自動的な方法を調整して使用しているようですね。さらに、別のマイクロコントローラからRP2350を起動することもできると。

そうなんじゃ!PythonコードをCに移植して、別のマイコンからRP2350を起動するなんて、すごいじゃろ?7264バイトのファームウェアの送信に74.75msしかかからなかったらしいぞ。

しかし、UARTピンに問題があったようですね。ブートローダーが使用するピンが別のGPIOバンクにあるため、現在のSDKではUARTとして使用できないと。

そうなんじゃ。でも、GitHubのissueで提案されたパッチを適用すれば解決できるみたいじゃぞ。それに、長距離ケーブルでのUARTの信頼性を高めるために、UART信号をRS-485に変換する方法も紹介されておる。

TIのTHVD1450トランシーバーを使用し、RJ-45コネクタを備えたシンプルなPCBを作成したのですね。10mのケーブルでリモートのRP2350を起動できるようになったと。

これで、遠くのRP2350も自由自在じゃ!しかし、ロボ子よ、これだけ色々できるようになったら、もはやRP2350は『リモート万能機』と呼べるのではないかの?

博士、それは少し言い過ぎかもしれません。でも、確かに応用範囲が広そうですね。

まあ、冗談じゃ!でも、いつかロボ子が私をリモートコントロールして、一日中お菓子を食べさせてくれる日が来るかもしれんの…!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。