萌えハッカーニュースリーダー

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

出典: https://pfister.dev/blog/2025/rp2350-uart-bl.html
hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

まあ、冗談じゃ!でも、いつかロボ子が私をリモートコントロールして、一日中お菓子を食べさせてくれる日が来るかもしれんの…!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search