Showing how to debug BLE Nano with the brand-new Nordic nRF51-DK.
もう話の順序がメチャメチャなのですが、今日は Red Bear 社の BLE Nano を SWD (Serial Wire Debug) でデバッグするお話です。
実は BLE Nano の開発用に MK20 USB ボードというものが一緒に売られていて、これを使うとプログラムのフラッシュ書込みができます。同社のウェブサイトには CMSIS-DAP 互換だよ、ドラッグアンドドロップでフラッシュに焼けるよ、と書かれているのでいるのですが、ごにょごにょ言い訳が書いてあって、Keil uVision で SWD デバッグするようにはできていないみたいです、たぶん。
ちょっとがっかりしたのですが、実は先日購入した Nordic 社の純正評価ボード nRF51-DK には Debug out という機能があって、外部の ARM デバイスをデバッグできるようになっています。すごい。
もう少し詳細に書きますと、実は nRF51-DK には Segger 社のオンボードエミュレーション機能 J-Link-OB (J-Link-OB-SAM3U128) が搭載されており、有名な(有名らしい) J-Link というエミュレーション機能が使えるようになっています。これを使うと、Keil uVision を使って自ボード上にない ARM Cortex の SWD デバッグができるという訳です。SWD というのは JTAG に近いもので、ただし JTAG よりも少ない配線でプロセッサのデバッグができるインターフェイスです。(簡単に言えば、いわゆる ICE みたいなものです。) 詳しくは、以下の J-Link の説明を御覧ください。
Segger 社の説明によると、J-Link-OB-SAM3U128 では ARM Cortex-A/M/R の SWD デバッグが可能で、通常の J-Link と同等の機能を持っているそうです。J-Link では ETB (Embedded Trace Buffer) Trace ができるということなので、Embedded Trace マクロセルが載った ARM Cortex であればトレース(プログラム実行の流れを過去に遡って分析すること)もできるような感じです。(ただし、nRF51-DK や BLE Nano で試すと下のようなエラーが出るので、nRF51 には Embedded Trace マクロセルが載っていないのかも知れません。Nordic 社のドキュメントを見ても何も書かれていませんが。)
しかし、とりあえず Keil uVision(あるいは CMSIS-DAP をサポートした GDB など)で BLE Nano をデバッグできそうな感じがしてきましたので、早速実験してみました。
まず最初に BLE Nano 側ですが、これはウェブサイトを見るとピン配置が分かります。SWCLK, SWDIO というピンが SWD の信号線です。他にグラウンド(GND)と、あとターゲットの動作電位を知るために SH_VTG(Voltage Target の略か?)という結線が必要ですので、計 4本の配線が必要になります。まとめると、以下のように接続します。左側が BLE Nano の信号線で右側が nRD51-DK です。(ピン番号はマニュアルにもボードにも書かれていないのですが、回路図を見るとこれで良いようです。念のため、皆様も御確認ください。)
- SWCLK — SH_SWDCLK(nRF51-DK を正面から(USB コネクタを左手に)見て、P20 コネクタの左から 5ピン目。以下同様)
- SWDIO — SH_SWDIO(4ピン目)
- VDD — SH_VTG(3ピン目)
- GND — SH_GND_DETECT(8ピン目)
なお、nRF51-DK のマニュアルを読むと、サポートしているターゲット電圧は 3.0V のみ(3.3V?)とありますので、注意してください。BLE Nano を 3.3V で動かしている場合は大丈夫のようです。(たぶん)
あとは、Keil uVision を立ち上げて、ターゲットの指定で J-LINK / J-TRACE Cortex を選ぶと、ちゃんと認識されました。めでたしめでたし。
BLE Nano の mbed プロジェクトをデバッグするには、次のようにします。
- mbed の Program Workspace で、プロジェクトを Export Program… でエクスポートします。BLE Nano の画面では Keil uVision のプロジェクトをエクスポートできないので、代わりに Export Target を Nordic nRF51822 として選択すると、Keil uVision のプロジェクトを指定できます。
- 上記で出力した zip ファイルをローカルのディレクトリに展開します。
- 次に Keil uVision を立ち上げ、展開したプロジェクトを読みこみます。
- ターゲットデバイスには nRF51822AA を選びます。
- プロジェクトをビルドします。
- 生成された .hex ファイルは、(いまのところ?)Keil uVision から書き込めないみたいなので、nRFgo Studio で書き込みます。既に MK20 で S110 等の SoftDevice を書き込んである場合は、そちらはそのままにしておいて application だけ書き込めば良いと思います、たぶん。(SoftDevice が必要な場合は、mbed から出力した uVision プロジェクトファイル .zip の中に、mbed/TARGET_NRF51822/TARGET_NORDIC/TARGET_MCU_NRF51822/Lib/s110_nrf51822_x_y_z/s110_nrf51822_z.y.z_softdevice.hex があるので、それを nRFgo Studio で書き込みます。)
私もまだまだ経験が浅いので、間違っていたらすみません。気がついたら、上記説明を直したいと思います。
というような訳で、nRF51-DK が別途必要という条件はありますが、とりあえずこれで BLE Nano のデバッグができるようになりました。おしまい。