(番外編)Nordic nRF51-DK の Debug out で BLE Nano をデバッグする

(更新

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 社のドキュメントを見ても何も書かれていませんが。)

スクリーンショット 2015-03-05 14.52.50

しかし、とりあえず 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 で動かしている場合は大丈夫のようです。(たぶん)

2015-03-05 13.48.04

あとは、Keil uVision を立ち上げて、ターゲットの指定で  J-LINK / J-TRACE Cortex を選ぶと、ちゃんと認識されました。めでたしめでたし。

スクリーンショット 2015-03-05 15.06.19

BLE Nano の mbed プロジェクトをデバッグするには、次のようにします。

  1. mbed の Program Workspace で、プロジェクトを Export Program… でエクスポートします。BLE Nano の画面では Keil uVision のプロジェクトをエクスポートできないので、代わりに Export Target を Nordic nRF51822 として選択すると、Keil uVision のプロジェクトを指定できます。
  2. 上記で出力した zip ファイルをローカルのディレクトリに展開します。
  3. 次に Keil uVision を立ち上げ、展開したプロジェクトを読みこみます。
  4. ターゲットデバイスには nRF51822AA を選びます。
  5. プロジェクトをビルドします。
  6. 生成された .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 のデバッグができるようになりました。おしまい。