DS-5を使ってmbedをデバッグする
.
DS-5を使ってCMSIS-DAPファームウェアなmbedをデバッグする誰得なメモ。
DS-5には各種ボード向けの多くのサンプルが含まれているが、LPC1768やmbed用のサンプルや設定例が含まれていない。 mbedは既にMDK-ARM Lite edition(無償評価版)でデバッグ可能になっているが、あると便利かも知れないので、DS-5のDeveice databaseとFlash書き込みの仕組みを理解する目的も兼ねて作ってみる。
【使用機材】
- mbed LPC1768(要CMSIS-DAP対応ファームウェア)
- LPCXpresso LPC1769(ARMCS-DP ROMテーブルを取得する為に使用した)
- ARM Development Studio 5 (DS-5) Professional Edition v5.13
- MDK-ARM Lite版 v4.70 (Flash書き込みアルゴリズムファイルを使用)
作業手順の概要
青mbedに実装されているLPC1768を直接 JTAG ICE と繋いだという強者もいるけど、私には少し敷居が高そうだったので、まずは最初から JTAG が出ているLPCXpresso LPC1768を使った。
mbedのファームウェアがCMSIS-DSPをサポートしたとは言っても、いきなりDS-5と接続するのは無理なので、以下の手順で行った。
- MDK-ARMとULINK2でLPCXpresso LPC1769の動作確認(Flash書き込みアルゴリズムの確認)
- MDK-ARMとmbedの動作確認(CMSIS-DAP接続でアダプタ名称の確認)
- DSTREAM繋いでDAPからROMテーブル読んで、rvcファイル作成
- cdbimporterでconfiguration database作成、Flashアルゴリズムコピー
- User Configuration databaseのインポート
- DS-5 + mbedで動作確認
詳細手順
手っ取り早く環境を構築したい場合は、太文字の部分だけ見てください。
MDK-ARMとULINK2でLPCXpresso LPC1769の動作確認(Flash書き込みアルゴリズムの確認)
まず、mbedファームウェアのアップデートと、MDK-ARM Lite版のインストールと設定色々。手順はここ。
LPC1769は(当然)MDK-ARMでサポートされているデバイスなので、特に問題なく接続できる。なお、MDK-ARM v4.70以降では、ULINK2やULINK-MEを接続するとファームウェアがアップデートされて、CMSIS-DAP対応になる。
Quote:
This version of the firmware allows ULINK2 to be used as a CMSIS-DAP compliant debug unit in addition to the traditional ULINK2 operation mode.
新規プロジェクト(名前は任意)を作成し、ターゲットを LPC1769 にする。
メニュー [Project] - [Options for Target XXXX....] - [Utilities] - [Settings] - [Flash Download] で Programming Algorithm を確認する(LPC17xx IAP 512kB Flash)。
MDK-ARMとmbedの動作確認(CMSIS-DAP接続でアダプタ名称の確認)
CMSIS-DAPファームウェアなmbedを接続する場合のアダプタの名称を取得する。 メニュー [Project] - [Options for Target XXXX....] - [Debug] で、Use [CMSIS-DAP Debugger] を選択して、Settings ボタンをクリック。
CMSIS-DAP - JTAG/SW Adapter の名称は、 "MBED CMSIS-DAP" となっていた。
DSTREAM繋いでDAPからROMテーブル読んで、rvcファイル作成
DS-5 に新しいターゲットを追加する手順は、こちら。
まず、デバッガからコアを認識させるために、ターゲットデバイスのDAPからROMテーブルを読み込む必要がある。 LPCXpresso LPC1769 をDSTREAMのCoreSight 10コネクタと接続する。
Windowsスタートメニューから [全てのプログラム] - [ARM DS-5] - [Debug Hardware] - [Debug Hardware Configuration] を起動。 DSTREAMと接続し、Autoconfigureして取得できたROMテーブルをファイル名 LPC1768.rvc で保存する。
cdbimporterでconfiguration database作成、Flashアルゴリズムコピー
次に、先ほどのrvcファイルを使って、 DS-5 で認識できる configuration database ファイルを生成する。
Windowsスタートメニューから [全てのプログラム] - [ARM DS-5] - [DS-5 Command Prompt] を起動。cdbimporter への入力手順を以下に示す。
Information
C:\Program Files (x86)\DS-5\bin>cdbimporter -t c:\docs\mbed\ds-5_connection\configdb c:\docs\mbed\ds-5_connection\LPC1768.rvc DS-5 Config Database Import Utility v1.2 Copyright 2011-2012 ARM Ltd Reading c:\docs\mbed\ds-5_connection\LPC1768.rvc Enter DS-5 source configuration path (the location of the database that contains the necessary data to identify the target) [default:'C:\Program Files (x86)\DS-5\sw\debugger\configdb'] > Found 1 ARM core Import Summary - ID Name Definition Associated TCF files -- ---- ---------- -------------------- 1 Cortex-M3 Cortex-M3 <none> Select a core to modify (enter its ID and hit return) or press enter to continue. [] Enter Platform Manufacturer [default:'Imported'] >NXP Enter Platform Name [default:'LPC1768'] > mbed_LPC1768 Building configuration XML... Creating database entry... DTSL script assumptions: The Cortex-M3 cores are using trace sources of type ETMv3_4. Import successfully completed
これで c:\docs\mbed\ds-5_connection\configdb 配下に configuration database ファイルが作成される。これを Flash 書き込みと CMSIS-DAP 接続用に修正する。
Flash書き込みに関しては、DS-5に含まれている以下のSTM32Eのサンプルを参考にした。
{DS-5_install}\exmples\Bare-metal_examples.zip
- flash_algo-STM32F10x
- flash_blinky-MCBSTM32E
まず Flash 書き込み用の設定。LPC1768/1769用の Flash 書き込みアルゴリズムは、"LPC17xx IAP 512kB Flash" だったので、この文字列を grep して得られたプロジェクトのターゲットファイル名を取得(LPC_IAP_512.FLM)。 このFlash書き込みアルゴリズムファイルを DS-5 のフォルダにコピーする。
copy {MDK-ARM_install}\ARM\Flash\LPC_IAP_512.FLM {DS-5_install}\sw\debugger\configdb\Flash
[project_types.xml]
このファイルは cdbimporter.exe によって生成されるが、DSTREAM/RVI接続用の設定となっているため、必要な部分を変更する。以下、主な変更点。
- <flash_config> タグで上記の Flash 書き込みアルゴリズムファイルを指定する
- <description language> タグの文字列変更
- <setup_script> タグの追加
[LPC1768_flash.xml]
上記 <flash_config> で指定した ターゲット Flash メモリの設定ファイル。Flash アルゴリズムファイル(LPC_IAP_512.FLM)や、作業用 RAM 領域のアドレスやサイズを指定する。 STM32Eのサンプルでは、Flash書き込み前に設定を行うスクリプトを使用しているが、LPC1768では特に必要ないので <setup script> は指定しない。
[rddi-dap-cfg-mbed.txt]
DAPの設定ファイル。ここで、MDK-ARM から参照した CMSIS-DAP - JTAG/SW Adapter の名称を設定する。
PRODUCT = MBED CMSIS-DAP
User Configuration databaseのインポート
上記ファイルの ZIP アーカイブはこちら。 /media/uploads/MACRUM/mbed_ds-5.zip このZIPファイルをダウンロードして、ローカル環境に展開する。 Scriptsフォルダは、DS-5 に含まれている物なので、これを手動でコピーする。
xcopy {DS-5_install}\sw\debugger\configdb\Scripts .\configdb\Scripts
メニュー [ウィンドウ] - [設定] - [DS-5] - [Configuration database] で作成した configuration database を [Add] する。
[Rebuild database...] ボタンを押して設定をインポートする。
DS-5 + mbedで動作確認
メニュー [実行] - [デバッグの構成...] - [DS-5 デバッガ] を選択し、[新規の起動構成] ボタンを押す。
[接続]タブ
[NXP] - [mbed_LPC1768] - [Bare Metal Debug] - [Debug Cortex-M3 via CMSIS-DAP] を選択。
[ファイル]タブ
[ファイルからシンボルをロードします] を選択し、mbed のサンプルのELFファイル(.axf)を指定する。
[デバッガ]タブ
[エントリポイントからデバッグ] を選択。
[ターゲット初期化デバッガスクリプト(.ds/.py)を実行します] をチェックして、debug_mbed.ds スクリプトファイルを指定(メモリマップの指定とFlash書き込みコマンド)。
interrupt memory 0x00000000 0x0007ffff ro info flash flash load "C:\docs\mbed\ds-5_connection\test\build\test.axf" reset
[適用] を押して、設定を保存する。 [デバッグ] で、デバッグセッション開始。
これで、DS-5 から mbed をデバッグすることが出来ます。
問題点
フラッシュの書き込みで verify error が発生する
Verify error
+flash load "C:\docs\mbed\ds-5_connection\test\build\test.axf" ERROR(FLP26-FLP6-FLP4): # in C:\docs\mbed\ds-5_connection\debug_mbed.ds:4 while executing: flash load "C:\docs\mbed\ds-5_connection\test\build\test.axf" ! Flash programming failed ! Verify failed at address: 0000001c ! Exception FlashProgrammerRuntimeException thrown in Python script null at line <Unknown> ERROR(CMD656): The script C:\docs\mbed\ds-5_connection\debug_mbed.ds failed to complete due to an error during execution of the script
おそらく、原因となっているのはこれ。
書き込みアルゴリズム自体は、 User Code Signature を正しく書き込んでいるが、verify 時にそれを考慮していないので verify error が発生している模様。 何か回避策はあると思うが、verify 時のみの問題なのでとりあえず無視する。
動作が(鬼のように)遅い
使ってみると直ぐに気がつくが、mbedと接続したときの動作が非常に遅い。 フリーランでもmbed上のLEDが点滅するため、ターゲットの動作を止めて、何かしらの制御を行っていると思われるが詳細不明(多分、DS-5で使用しているデバッグサーバー側の問題)。
その他
DSTREAMを使って、LPC1768のDAP経由でROMテーブルを読み出した。これだけのためにDSTREAM使うのもなんだかなという感じだし、mbedだけで出来たら便利なのにと思ったらこんなの発見。
JTAGチェーンの呼び出し http://mbed.org/users/igorsk/code/JTAG_Search/
これを参考にして cdbimporter が認識出る形式のXMLファイルをはき出す事が出来れば、新しいターゲットへのCMSIS-DAP接続手順はもう少しシンプルになるかも。
以上です。
Please log in to post comments.