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 にする。 /media/uploads/MACRUM/lpcxpresso_1769.png

メニュー [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" となっていた。 /media/uploads/MACRUM/device_string.png

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

  1. flash_algo-STM32F10x
  2. 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接続用の設定となっているため、必要な部分を変更する。以下、主な変更点。

  1. <flash_config> タグで上記の Flash 書き込みアルゴリズムファイルを指定する
  2. <description language> タグの文字列変更
  3. <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] する。 /media/uploads/MACRUM/configdb.png

[Rebuild database...] ボタンを押して設定をインポートする。

DS-5 + mbedで動作確認

メニュー [実行] - [デバッグの構成...] - [DS-5 デバッガ] を選択し、[新規の起動構成] ボタンを押す。

[接続]タブ
[NXP] - [mbed_LPC1768] - [Bare Metal Debug] - [Debug Cortex-M3 via CMSIS-DAP] を選択。 /media/uploads/MACRUM/debug_config_1.png

[ファイル]タブ
[ファイルからシンボルをロードします] を選択し、mbed のサンプルのELFファイル(.axf)を指定する。 /media/uploads/MACRUM/debug_file.png

[デバッガ]タブ
[エントリポイントからデバッグ] を選択。 [ターゲット初期化デバッガスクリプト(.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

/media/uploads/MACRUM/debug_debugger.png

[適用] を押して、設定を保存する。 [デバッグ] で、デバッグセッション開始。

これで、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.