大緊急事案!!!1!Raspberry Pi Picoはぢめました!!1!!1

●なにっ

超小型linuxPCの代名詞となったRaspberryPiですがNanoに加えてPicoなるものも
ラインナップに加わりました!!
秋月電子通商さんで550円ですでに販売されており、すでに手に入れられた方も
いるかと思います。ねむいさんも早速購入していぢって見ることにしました!!!



基板としてはRaspiNanoよりも一回り小さいサイズとなっております。


MPUはARMのCortex-M0plusのデュアルコア構成、Raspberry財団のロゴが
レーザーマーキングされた特製のものとなっております!
しかもM0+のコアながら100MHz越えの高速クロックで動く代物です!!
※細かいスペックは次回以降に紹介します。


●とりあえず動かしてみる

USB-microコネクタから給電するとフラッシュに何も書いてないときもしくは
BOOLSELボタンを押しながら給電するとマスストレージとして見えます。
binファイルではなくuf2(USB Flashing Format Data)をドラッグアンド
ドロップすることにより内蔵フラッシュに書き込まれるようです。

RaspiPicoの公式ページにはGettingStartとしてこのD&Dで始める方法が紹介
されており動作確認用のuf2ファイルも落とせます。
これでLチカを確認できます。


●プログラムのビルド方法は?
同じくGettingStartedに方法が書いてあります。OS間で共通する項目は
SDKを使いCMAKEとPythonでmakefileを生成してビルドするということです…
…CMAKEってねむいさん嫌いなんですよね…記述がちょっとでも抜けてたら
思った通りに動作しなくて…Raspiなので基本的にLinux系OS下のビルドを前提と
しています


幸いにもWindows環境下のビルド指南もしております。
もちろんCMakeとPythonとVisualStudioCodeが必要です。が、ねむいさんは
中途半端にMSYSのOpenOCDビルド環境を持っているのでそちらと折半して
ビルドしてみました。



(格闘すること2時間後)
あああもうめちゃくちゃだよ
make一発で出来るようにシンプルなライブラリの構成にしてほしかった…!
しかも一度に全部のプロジェクトをビルドしやがるのでものすごく時間がかかります。
※ねむいさん式RaspiPicoビルド環境は次回以降に(またかいな


●ビルドしたやつをどう書き込むのか?
ビルドしたプログラムを書き込むだけなら上記のUF2ファイルをマスストレージ
モードでD&Dで書き込む方法がありますがねむいさんがそんなので済ませるわけは
ありません!!!

Cortex-M0+コアなのでOpenOCDが使えるはずです…がデュアルコアかつSWDオンリー
なので無理か…と思いきやRaspberryPi公式でOpenOCDをRP2040用にFork
しており、こちらはなんとマルチドロップSWDとRP2040のフラッシュ
書き込みドライバの対応済です!!


画像の上部に写ってるイラスツは気にしてはいけない。
RP2040用の書き込みcfgも作成してRaspiPico専用OpenOCD+JTAGKey2を使って
RaspiPicoにelfファイルを書き込みせしめることに成功しました!!!!
ログはこんな感じになります。

> "C:¥Devz¥Coreutils¥bin¥make.exe" program
openocd-pi -s C:/Devz/ARM/OCD/tcl -f interface/jtagkey2_swd.cfg -f target/rp2040_swd_flash.cfg -c "mt_flash blink.elf"
Open On-Chip Debugger 0.10.0+dev-gf8e14ec97 (2021-02-07-14:35)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
Info : FTDI SWD mode enabled
Info : Hardware thread awareness created
Info : Hardware thread awareness created
Info : RP2040 Flash Bank Command
Info : clock speed 1000 kHz
Info : SWD DPIDR 0x0bc12477
Info : SWD DLPIDR 0x00000001
Info : SWD DPIDR 0x0bc12477
Info : SWD DLPIDR 0x10000001
Info : rp2040.core0: hardware has 4 breakpoints, 2 watchpoints
Info : rp2040.core1: hardware has 4 breakpoints, 2 watchpoints
Info : starting gdb server for rp2040.core0 on 3333
Info : Listening on port 3333 for gdb connections
target halted due to debug-request, current mode: Thread
xPSR: 0xf1000000 pc: 0x000000ee msp: 0x20041f00
target halted due to debug-request, current mode: Thread
xPSR: 0xf1000000 pc: 0x000000ee msp: 0x20041f00
Info : RP2040 B0 Flash Probe: 2097152 bytes @10000000, in 512 sectors

target halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0x00000178 msp: 0x20041f00
target halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0x00000178 msp: 0x20041f00
target halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0x00000178 msp: 0x20041f00
Info : Writing 16384 bytes starting at 0x0
target halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0x00000178 msp: 0x20041f00
target halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0x00000178 msp: 0x20041f00
target halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0x00000178 msp: 0x20041f00
target halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0x00000178 msp: 0x20041f00
target halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0x00000178 msp: 0x20041f00
shutdown command invoked

> Process Exit Code: 0
> Time Taken: 00:01



そんなわけでとりあえずほんとに基本だけ紹介してみましたが次回以降は
RP2040のMPUスペックやメモリ構成などの深い部分に突っ込んでいこうと思います!


それに先立ってRaspiPico(RP2040)用のOpenOCDバイナリを公開いたします。
ねむいさんのいつものOpenOCDバイナリに書き込み用cfgとともに同梱しておりまので
どしどしご利用ください!!!!

↑RaspiPico専用OpenOCD:openocd-pi.exe
 同じく専用cfg:target/rp2040_swd_flash.cfg

Comments

いつもブログの記事に助けられています。
Raspberry Pi PicoのmbedベースのArduinoのスケッチをOpenOCDでデバッグするとmbedのRTOSに未対応のため、ブレークポイントで停止した後の実行で上手く制御できなくなります。
OpenOCDコミュニティでのmbedのRTOSのサポート状況をお教えください。
FreeRTOSベースの Arduinoでは問題なくデバッグできています。

よろしくお願いします。

竹本様こんばんは。ねむいです。

OpenOCDはまだmbedOSのサポートをしておりません。
pyOCDではmbedOSのサポートをしているようです(未検証)
os.mbed.com/docs/mbed-os/v6.13/debug-test/eclipse.html

ねむいさん、お返事ありがとうございます。

mbed OSはPyOCDの使用を薦めているので、そのような状況もうなずけます。
Picoのようなマルチコアに対して、PyOCDでは1コアに対して1 gdbサーバを割り当てることで対処しているとありました。
https://github.com/pyocd/pyOCD/blob/main/docs/multicore_debug.md

OpenOCDは、1個のgdbサーバしか接続できないので、どのようにしてマルチコアCPUをデバッグされているのでしょうか。
ご教示いただけますと幸いです。

竹本様こんにちは、ねむいです。

OpenOCDの場合はcfgファイルの"target create"でコアごとに
定義してやるとデフォルトポートの3333からインクリメントされた
値のポートが追加される仕組みになっています。
まずgdbで3333に接続した後もう一つgdbを立ち上げ3334にアタッチ
すると別のコアに接続ができます。
私のOpenOCDバイナリ中の/tcl/targetlpc4370_lpclink2_spifi.cfgに
マルチコアの場合の定義のやり方が書いてありますので参考に
してください。

ねむいさん、お忙しいところお返事ありがとうございます。

勉強不足でgdbポートが増やせることを知りませんでした。
targetlpc4370_lpclink2_spifi.cfgを参考にさせていただきます。
どうもありがとうございました。

竹本 浩

Post a Comment








Go to top of page