Raspberry Pi2でベアメタルプログラミング環境を作成

rpi-baremetal1.jpg

先日ちょっと調べたRaspberry Piのベアメタルプログラミングですが、やはり調べたら試してみたくなるもので、Interface誌2017年2月号の記事の通りにやってみました。

ちょっと試すだけならQIピンでの接続でもいいのですが、UARTとJTAGをつなぐとなると結構な本数になりますので、接続用の基板を作成することにしました。
上の写真のように、Raspberry PiのGPIOヘッダと、JTAG用およびUART用のコネクタを接続した基板です。

ターゲットマシンはRaspberry Pi2ですが、将来的にPi Zeroでの利用も考えて、aitendoのPi Zero用のユニバーサル基板を使いました。

rpi-baremetal3.jpg

GPIOをそのまま接続した40pinボックスヘッダ、JTAG用の20pinボックスヘッダ、UART用の6ピンヘッダがついています。
GPIOのピン配列はこちらが詳しいです。

40pinボックスヘッダは、デバッグしながら他のI/Oも使いたい場合のために付けてあり、ここからフラットケーブルでブレッドボードなどに配線する想定です。
JTAGは手持ちの製品がSEGGER J-Link(のコピー品?)なので、ボックスヘッダもこの製品のピン配列に合わせて配線していますが、基本的にどこの製品でも20pinなら同じピン配列だと思います。
UARTは、以前から使っているスイッチサイエンスの製品です。6ピンになっていますが、配線はGNDとRX、TXだけです。

rpi-baremetal2.jpg

参考までに結線も載せておきます。

表面
rpi_jtag_uart_surface.png
裏面
rpi_jtag_uart.png

これをRaspberry Pi2につないで、Interface誌2017年2月号のDVDに入っている開発環境のVMをインストールして、Eclipse + OpenOCDでJTAG経由でのデバッグを試しました。
今回は記事の通りにすれば良かったので、かなり楽にできましたが、設定項目は複雑な上に「RPi2の場合は1回目はOpenOCDがうまく動かないので2回起動する」といった謎のバッドノウハウもあり、この記事なしに最初から自分でやろうとしたらかなり時間がかかったのではないかと思います。

なお、付録のDVDではOpenOCDで使用するJ-Link用の設定ファイルは

 /usr/local/share/openocd/scripts/interface/jlink.cfg

です。
インタフェースのシリアル番号を記入するようになっていますので、

# Example: Select J-Link with serial 123456789
#
jlink serial 000000123456

のように頭の0を省略せずに指定します。
また、openocdの起動は

$ sudo openocd -f /home/user/arm/cfg/jlink.cfg -f /home/user/arm/cfg/raspi2.cfg

のようにスーパーユーザの権限で行う必要がありました。

なお、初代RPiとRPi Zero Wは同じCPUを使っていますので、初代RPi用のベアメタルのオブジェクトならRPi Zeroでも動作するのではないかと思って試してみましたが、うまくいきませんでした。

コメント