LPC810でMTB(Micro Trace Buffer)を使う

「ドングリ」という名称で巷では大人気のNXP製LPC810は、8ピンDIPと小型パッケージながら、Cortex-M0+のデバッグ機能とMTBに対応しています。 FRDM-KL25Zと同様に、MDK-ARM Lite版でMTBを使用する手順をまとめてみました。

無理矢理mbedネタにするために、mbed-LinkとMDK-ARMを使ってみますが、ULINK-MEツボLinkなどの他のデバッグアダプタでも設定方法はほぼ同じです。

MTBとは?

Cortex-Mシリーズのデバイスは、以下のトレースをサポートしています(但し、チップベンダーのコンフィグレーションに依存します)。

  • 4-pin ETM Trace
  • ETB (Embedded Trace Buffer)
  • Serial Wire Trace
  • MTB Trace

LPC810等のCortex-M0+デバイスで使用することの出来るMTB (Micro Trace Buffer)は、シンプルなインストラクショントレースです。

トレースデータ取得用のピンが必要ないので使い方としてはETBと似ていますが、最大の特徴はトレースデータ格納用のバッファとして専用メモリではなく、内蔵SRAMの領域の一部を使用することです。 設定可能なバッファサイズは、内蔵SRAM容量とプログラムで使用する領域から制限を受けますが、トレースが必要ない場合には全てプログラム側から使用できるので、ハードウェアのリソースを有効活用する事ができます。

MDK-ARMを使ってLPC800のMTBを設定する手順はこちらのアプリケーションノートに記載されています。

http://www.keil.com/appnotes/docs/apnt_237.asp

code_redのRed TraceでもMTBがサポートされている様ですが、私は使ったことないので設定方法などはよく分かりません(すみません)。

http://www.code-red-tech.com/news.php

MTBのProgrammers Modelに興味がある方は、この辺に情報があります(トレース制御レジスタの詳細等)。

http://infocenter.arm.com/help/topic/com.arm.doc.ddi0486b/CHDDCFBJ.html http://infocenter.arm.com/help/topic/com.arm.doc.ddi0486b/CHDFCIFD.html

事前準備

MDK-ARM Lite版のインストール方法は、こちらを参照して下さい。

http://mbed.org/users/MACRUM/notebook/uvision4_debug/

Warning

MDK-ARM Lite(無償評価版)は必ず、最新版 v4.70a を使用してください。古いバージョンでは、LPC800シリーズのデバイスデータベースが含まれていません。

デバイスの入手方法

マルツパーツ館WebShopで取り扱いが始まったそうです。

http://www.marutsu.co.jp/shohin_211674/

MDK-ARM uVison4 の設定

プロジェクトの作成

LPC810用のプロジェクト作成方法は、こちらを参照してください。これをベースにMTBの設定を追加します。

http://mbed.org/users/MACRUM/notebook/mbed-link/

MTB用に設定を追加する

LPC810のメモリマップは、以下のようになっています。

Information

Flash: 4kByte
0x00000000 - 0x00001000

RAM: 1kByte
0x10000000 - 0x10000400

/media/uploads/MACRUM/lpc810_memory.jpg

MTB用に使用可能なRAMは、領域をそれほど大きくとれないので、ユーザープログラムで使用しているRAM領域を正しく把握する必要があります。

Project view内のアクティブターゲットをダブルクリックすると、作成されたターゲット用の MAP ファイルがオープンされます。 この MAP ファイル内の、 RW_IRAM1 実行リージョンの内容を確認します。

    Execution Region RW_IRAM1 (Base: 0x10000000, Size: 0x00000200, Max: 0x00000400, ABSOLUTE)

    Base Addr    Size         Type   Attr      Idx    E Section Name        Object

    0x10000000   0x00000200   Zero   RW            1    STACK               startup_lpc8xx.o

上の例では、アドレス 0x10000000 から 0x100001FF (0x200バイト分)までが使用されています。 プログラム内で使用するRWデータが増えると、この部分のサイズは大きくなるため、重ならないように少し余裕を考えて、MTBで使用するバッファは以下の領域に設定します(先頭アドレスはバッファサイズの整数倍にアラインメントされている必要があります)。

Information

RAM(MTB): 256Byte
0x10000300 - 0x10000400

Warning

有効なデータが存在するRWデータ領域とMTBのバッファ領域が重なると、ターゲット側で実行されるプログラムはほぼ間違いなく正しい動作になりませんので、ご注意ください。

MTBの設定は、Initialization file にデバッガコマンドを定義して使用します。

http://www.keil.com/support/man/docs/uv4/uv4_dg_debug.htm http://www.keil.com/support/man/docs/uv4/uv4_debug_functions.htm

Embedded Artists LPCXpresso LPC800 のサンプルに設定例があるので、これを利用します。以下のファイルを、プロジェクトファイルのディレクトリにコピーします。

{install}\ARM\Boards\Embedded Artists\LPCXpresso LPC800\Blinky_MTB\Dbg_MTB.ini

ターゲット設定の Debug タブで、この .ini ファイルを Initialization File に設定します。

/media/uploads/MACRUM/lpc810_debug_mtb.jpg

Edit ボタンを押して編集します。テキストファイルなので、このまま編集しても良いのですが GUI が使えるので、ウィンドウ下の Configuration Wizard をクリックして、設定値を入力します。

/media/uploads/MACRUM/lpc810_mtb.jpg

この設定は、デバッグセッション起動時にデバッグ関数として実行されます。Ctrl+S でセーブするのを忘れずに。

トレースビューの表示

デバッグセッションを開始し、メニュー [View] - [Trace] - [Trace Data] でMTBトレース情報が表示されるのを確認します。

/media/uploads/MACRUM/lpc810_trace.jpg

その他

コンパイル時にRAM領域と(実行時に使用する)MTB用のバッファ領域の重複チェックは基本的に出来ないのですが、設定でRAM領域の一部の定義を削除することによって、MTB用バッファの安全な範囲指定が可能になります(使用しないときは戻すのを忘れずに)。

/media/uploads/MACRUM/lpc810_memory_2.jpg

なお、MTBに格納されたトレース情報は通常のメモリアクセスで読み込める値なので、MTB非対応のデバッガを使用している場合でもデバッガスクリプトなどの対応があれば適切な形式で表示できるかも知れません。トレースパケットの情報は、ここで公開されています。

http://infocenter.arm.com/help/topic/com.arm.doc.ddi0486b/CJHIJBAB.html

以上です。


Please log in to post comments.