はじめに
前回はARM mbedを用いたソフトウェア開発手法を紹介いたしましたが、今回は連載3回目として mbed対応の要となるハードウェアの作成方法について紹介させていただきます。BluetoothSMARTデバイスをmbed で開発する(1)
BluetoothSMARTデバイスをmbed で開発する(2)
BluetoothSMARTデバイスをmbed で開発する(4)
BluetoothSMARTデバイスをmbed で開発する(5)
BluetoothSMARTデバイスをmbed で開発する(6)
BluetoothSMARTデバイスをmbed で開発する(7)
BluetoothSMARTデバイスをmbed で開発する(8)
ARMは、ARM Limited(またはその子会社)のEUまたはその他の国における登録商標です。mbedは、ARM Limited(またはその子会社)のEUまたはその他の国における商標です。All rights reserved.
mbed インターフェイスについて
mbedには次のような機能があり、これがmbed固有の便利な機能となっています。
特に専用アプリを使用することなくファイルをフォルダにドロップするだけで、プログラムを書き込めるところが一番の特徴だと思います。
1. USBストレージベースのプログラム書き込み
2. CMSIS-DAP互換のデバッグ機能
3. デバッグ用シリアルポート
4. 仮想USBストレージを用いたファイルI/O
この機能のために mbed 対応ボードではユーザアプリが動作するターゲットマイコンとは別に専用のインターフェイスチップを搭載する構成になっています。
[ 一般的な mbedの構成図 ]
今回の記事でも別ボードを用いて mbed インターフェイスを実装し、同様の機能を実現しました。
既存mbed対応ボードとの違い
mbed 対応ボードは ARM Cortex Mシリーズ共通のデバッグ機能を使っているため、ほとんど全てのボードで同じような回路構成となっていますが、nRF51822ではいくつかの固有部分が存在することから、nRF51822専用のmbedインターフェイスが必要となります。
この部分がnRF51822互換ボードを作るのを困難にしている理由になっているのだと思います。
以下にその固有部分についての概要を解説いたします。
・ファイル形式が固有フォーマット
nRF51811プラットフォームに限り mbedコンパイラが生成するバイナリファイルが binフォーマットではなくインテルHEXフォーマットになっています。経緯は不明ですがバイナリファイルにBluetoothプロトコル部分である Softdevice も含まれていることから書き込みメモリアドレスが非連続となり、データの塊であるbinフォーマットでの実装が難しかったのではないかと推測しています。
・書き込みファイルが特大サイズ
前項でも記載しましたが mbedコンパイラが生成するバイナリファイルには常にSoftdevice のバイナリコードが含まれており、またファイル形式がASCIIファイル表現のHEXフォーマットとなっていることからLチカ程度のプログラムでも200Kbyteを超える特大ファイルになります。
(ちなみにLPC1549版のLチカは2Kbyte程度です)
また書き込み時にフラッシュメモリ1ページ分のデータをまとめて処理するために、ワーク用のRAMが10Kbyte程度余分に必要になります。
nRF51822-mKITに搭載されている mbed インターフェイスチップが、最近mbedで使用されている LPC11U35クラスの小さいチップではなく巨大なチップになっているのはこれが理由になります。
・拡張されたSWD信号
mbedインタフェイスで使用されるSWD(SerialWireDebug)はSWDCLK,SWDIOの制御信号とnRESETの計3本で通信を行うようになっています。しかし nRF51822では nRESET信号がSWDIOと多重化されておりSWDと互換性がありません。
詳細についてはNordic社との秘守契約の関係で記載できませんが、ある制御を行うとSWDIOがnRESETとして認識されるようになっています。
mbedインターフェイスとして使用可能なボード
今回の記事では入手の容易さから NXP社の開発ボードを使用した事例を紹介いたします。
製品名の通り LPC1549/LPC11U68の開発ボードですが、今回は共通部分であるLPC-Link2のみを流用していることから、どちらの開発ボードでも同じように使用することができます。
ボードを使用する際はLPC-Link2以外の部分を無効化するため次の場所にあるショートプラグを刺しておいてください。これによりボード上のターゲットマイコンが無効化されLPC-Link2のみが使用できるようになります。
次にハーフピッチのSWD接続ケーブルの入手が必要になりますが、これに関してはトラ技記事の部材として売られているものがそのまま使用できることから、それを流用しました。
mbedインターフェイスのファームウェア
mbedが公開しているソースコードをベースにnRF51822-mKIT向けリポジトリで追加されたコードを取り込みました。
mbed オリジナルコード
執筆時点で最新の"CMSIS-DAP 0203 Release"を使用しました
Git: https://github.com/mbedmicro/CMSIS-DAP.git (tag:0203)
Http: https://github.com/mbedmicro/CMSIS-DAP/archive/0203.zip
なおビルドには Keil uVision4 (ARM-MDK)もしくは類似環境が必要になります。
nRF51822サポート差分ファイル
nRF51822に必要な差分だけを添付ファイルで公開しました。ソースコードにマージして使用してください。またuVisionのプロジェクトを組み直せば別のマイコンにも移植できるかと思います。
ビルド済みバイナリファイル
ソースコードからビルドするのは大変だと思いましたのでビルド済みバイナリも公開しました。
(LPCXpresso1549/LPCXpresso11U68共通)
追加したコードについて
nRF51822-mKIT向けリポジトリに追加されたコードをを抜き出しLPC-LINK2に移植しました。
ソースコードはそれぞれの作者に帰属します。
interface/Common/inc/intelhex.h
interface/Common/src/intelhex.c
HEXファイルを解析するコードを新規追加
interface/Common/src/board.c
NRF51822AA定義を追加
interface/Common/src/swd_host.c
nRF51822固有のSWD制御に変更
interface/Common/src/usbd_user_msc.c
HEXファイルの認識とフラッシュ書き込みコードを追加
interface/interface/hal/TARGET_NXP/TARGET_LPC4322/DAP_config.h
nRF51822固有のSWD制御を追加
interface/mdk/lpc4322/lpc4322_interface.uvproj
LPC4322のビルドターゲットに nrf51822を追加
interface/target/hal/DBG_NordicSemi/DBG_nRF51822AA/target_flash.h
nRF51822チップのフラッシュ書き込みアルゴリズムを追加
interface/target/hal/DBG_NordicSemi/DBG_nRF51822AA/target_reset_nRF51822.c
ターゲットマイコンのリセットコード。ただしこの部分にnRF51822固有コードを入れることが困難であったため mbed共通コードのみとなっています。
書き込み方法
LPCXpresso1549/LPCXpresso11U68の場合はNXPの LPC-Link2 Configration Toolで書き換えます。PCと接続する前にJP3(DFU)をショートプラグでショートしておいてください。
※書き換えるのはLPC-LINK2側のマイコンです、ターゲット側には書き込まないよう注意してください。
LPC-Link2 Configration Toolでの書き換え時は次のスクリーンショットを参考にしてください。
[File] -> [Oparating Mode] -> [Normal] で通常書き込みモードに切り替わりますので
Program modeでパラメータを設定しStartボタンを押します。
Algo: programing_algos\iram_dfu_util_any.bin.hdr
File: lpc4322_nrf51822_if_mbed.bin
Address: 0x1a000000
Size: 0x00080000
LPC-Link2 Configration Toolでの書き換え時は次のスクリーンショットを参考にしてください。
[File] -> [Oparating Mode] -> [Normal] で通常書き込みモードに切り替わりますので
Program modeでパラメータを設定しStartボタンを押します。
Algo: programing_algos\iram_dfu_util_any.bin.hdr
File: lpc4322_nrf51822_if_mbed.bin
Address: 0x1a000000
Size: 0x00080000
参考:
http://www.lpcware.com/content/project/dfu-download-programming-utility-and-security-lpcdfusec-tool/dfusec-dfu-production-2
今後の課題
今回は既存ボードの流用ということもあり UARTデバッグ等 mbed全ての機能が実装できていません。今後は専用ボードを起こすなどして全機能が使えつつコストダウンできるようにしたいと思います。
まとめ
今まで謎が多かったmbed対応ボード nRF5188-mKITですが、タネを明かせば意外と簡単に感じられたと思います。これにより日本でもBluetoothSMART製品が増えるようになれば幸いです。
記載されている会社名、および商品名等は、各社の商標または登録商標です。
LPC-Link2 Configration Toolで書き換える際、イメージファイルの指定以外の設定値はどのような内容にすればよいでしょうか?
返信削除コメントありがとうございます。
削除実は私も最初にこの設定がわからず悩みました。
記事に書き込み方法を加筆しましたの参考にしていただければ幸いです。