カテゴリー「Fujitsu-ARM」の記事

富士通製Cortex-M3マイコン

FM3マイコンをOpenOCD + Eclipseでデバッグ

OpenOCD + Eclipseを使って、インタフェース6月号付録の富士通製FM3マイコン(MB9BF618T)用のデバック環境を構築してみました。これまでは、LPCXpresso, STM32 Primer2などのデバッグ環境込みのIDEを使っており、OpenOCDを使うのは今回が初めてです。備忘録を兼ねて環境構築の手順を記載します。

2012/5/12: デバッグ時のプログラム書き込み手順を修正。Managed Projectにアセンブラファイルを追加する方法を追記。


OpenOCD用USB JTAGインタフェースの購入

価格がお手ごろなOLIMEX製ARM-USB-TINY-Hを仙石電商さんで購入。2012年5月時点で税込み6825円でした。あとで分かったのですがStrawberry Linuxさんの方が4620円で2000円も安かった・・メーカー希望価格€39.95らしく、Strawberry Linuxさんの方がユーロ安反映価格ですね。

FM3_board

 

Sourcery CodeBench Lite Editionのインストール

CodeSourcery G++(Mentor Graphicsに買収されてタイトルが変わった)のインストールとmake環境をインストールします。

  • Sourcery CodeBench Lite Editionのwebページから、Download the EABI Releaseをクリック。所定の項目を入力してファイルをダウンロード&インストール
  • このリンクからDownload mingw-get-instをダウンロードして、MinGW + MSYSをインストール。MinGW\binとMinGW\msys\1.0\binにパスを通しておく。今回は使いませんが、x86用のgccもインストールしておく


Eclipseのインストール

2012年5月時点で最新版の3.7.2(Indigo)インストールしました。

  • 先ずは、EclipseのダウンロードサイトからEclipse Classic 3.7.2をDL(Eclipse IDE for C/C++ Developersを使うという手もあるのですが、Classic + CDTを個別にインストールした方がよいとZylinのサイトに記載があったのでそれに従う)
  • CDTのインストール: Eclipseを起動して、Help → Install New Software → Work with:にhttp://download.eclipse.org/tools/cdt/releases/indigoを入力。CDT Main Features全部とCDT Optional Featuresを選択(選択したオプションはここを参考にしました。IndigoのProgramming LanguagesメニューからでもCDT本体はインストールできるのですが、オプション機能をインストールできないため(必要か否かは不明ですが・・)前者のurlから追加インストールします
  • Zylin Embedded CDTのインストール: Help → Install New Software → Work with:にhttp://opensource.zylin.com/zylincdtを入力
  • GNU ARM C/C++ Development Supportのインストール: Help → Install New Software → Work with:にhttp://gnuarmeclipse.sourceforge.net/updatesを入力。このプラグインを入れると新規プロジェクトの作成でSourcery G++ Toolchainが選択できるようになり、includeパスなどが自動設定され便利です。またcpuタイプの選択がプロジェクトプロパティから選択できるようになります(マイコン風雲録さんより)


OLIMEX ARM-USB-TINY-H用ドライバのインストール

  • OLIMEXのサイトから、OLIMEX ARM DEVELOPMENT PACKAGEをダウンロード
  • JTAGインタフェースをPCのUSBポートに接続すると2つ不明なデバイスが見えます
  • ドライバの更新メニューから、DRIVERSフォルダ配下のolimex-libusb-1.2.2.0をインストール
    最新版がこのURLにあるため、こちらを使ってもよいかと)
  • CDM20808フォルダ配下のドライバはARM-USB-OCD-H用のため使用しません
  • 2つのデバイス個々に更新を行うと、以下のように認識されます

ARM-USB-TINY-driver

 

OpenOCDのインストール

  • このサイトから、Windows用のコンパイル済みファイルをダウンロードして適当なフォルダに展開します(OpenOCD 0.5.0を使用しました)
  • targetフォルダにFM3.cfgが既に入っているのですがMB96F506用です。jujurouさんのブログにMB9BF618用の設定ファイルが公開されており、ありがたく使用させていただきました
  • OpenOCD起動用のスクリプトを以下の通り作成(mb9bfxx6.cfg)
telnet_port 4444
gdb_port 3333

set CHIPNAME mb9bfxx6
source [find interface/olimex-arm-usb-tiny-h.cfg]
source [find target/fm3.cfg]


OpenOCDの動作テスト

WiKimurAさんのOpenOCDが動くまでを参考に以下の通り動作を確認。ちゃんと動いているみたい!(実際はここまでの道のりは長かったのですが)

  • openocd –f  mb9bfxx6.cfgでOpenOCDデーモンを起動
  • もう一つコンソールを開いて、telnet localhost 4444でOpenOCDデーモンに接続
  • OpenOCDのコマンドを入力してターゲットを操作
--- 起動時のメッセージ ---

C:\Tools\openocd>openocd -f mb9bfxx6.cfg
Open On-Chip Debugger 0.5.0 (2011-08-09-23:21)
Licensed under GNU GPL v2
For bug reports, read
        http://openocd.berlios.de/doc/doxygen/bugs.html
Info : only one transport option; autoselect 'jtag'
adapter_nsrst_delay: 100
jtag_ntrst_delay: 100
trst_only separate trst_push_pull
Info : ******HWE* FLASH CMD Parameter mb9bfxx6.cpu
Info : ******HWE* fm3 Variant set to: mb9bfxx6
500 kHz
cortex_m3 reset_config sysresetreq
Info : max TCK change to: 30000 kHz
Info : clock speed 500 kHz
Info : JTAG tap: mb9bfxx6.cpu tap/device found: 0x4ba00477 (mfg: 0x23b, part: 0x
ba00, ver: 0x4)
Info : mb9bfxx6.cpu: hardware has 6 breakpoints, 4 watchpoints
Info : accepting 'telnet' connection from 4444

--- 以下Telnetセッションからの操作 ----

C:\>telnet localhost 4444
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Open On-Chip Debugger
> poll
 background polling: on
TAP: mb9bfxx6.cpu (enabled)
target state: running
>
> halt
 target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0x21000000 pc: 0x00000218 msp: 0x1ffffff0
>
> reset
 JTAG tap: mb9bfxx6.cpu tap/device found: 0x4ba00477 (mfg: 0x23b, part: 0xba00,
ver: 0x4)
>


Eclipseからのflash書き込みとデバッグ

先ずはLチカあたりのサンプルコードを作る必要があります。インタフェース6月号のサンプルにLチカコードがあるのですが、Keil用となっておりスタートアップコードがARMアセンブラなので、このままではgcc環境で使用できません。ねむいさんのブログ、FM3マイコンはぢめましたにLチカのサンプルコードがありましたのでこちらを使用させていたきました。

Makeファイルを自分の環境用に修正してEclipseのMakefile projectからビルドすれば、当然正しくコンパイル・リンクができます。Managed project (ファイルを追加するとEclipseが自動的にmake fileを生成する) - ARM Windows GCC (Sourcery GLL Lite) - を使用する場合、コンパイル・リンクは通っているのですがうまく動きません。どうも、スタートアップ用のアセンブラファイル(.s)のコンパイル・リンクを行っていないようです(自動生成されるmakefileに.sファイルが入らない)アセンブラソースファイルの拡張子を”.s”でなく”.asm”とします。拡張子が.sのままでは自動生成されるmakefileにアセンブラのソースファイル(今回の例では、startup_mb9bf61xt)が追加されません。

先ずは、ねむいさん版のmakefileプロジェクトでデバッグの動作確認を行います。

手順は以下の通りです:

  • EclipseのRun → External Tools → External Tools Configuration…を開き、以下の設定を追加

ExternalToolsConfig

  • Run → External Tools → OpenOCD (上記で登録した名前)でOpenOCDデーモンを起動
  • ここで、OpenOCD経由でflashのプログラムを行いターゲットをhalt状態にしておきます。プログラムがrun状態ですと、Eclipseを使ったデバッグセッションの起動時にgdbとOpenOCDデーモン間の通信がエラーとなってデバッグができません(私はこれに気がつかず結構悩みました)。書き込みたいelfファイルがあるフォルダーに移動して、telnetセッションから以下のようにhaltコマンドを実行します: 
    2012/9/8追記: mokeshiさんより起動スクリプトでhaltコマンドを自動実行させる方法をコメントいただきました(手順はコメント欄を参照下さい)
C:\Tools\openocd>telnet localhost 4444
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Open On-Chip Debugger
>
> halt
 target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0x21000000 pc: 0x00000726 msp: 0x1fffffe8
>
  • Run → Debug ConfigurationsからMain、DebuggerとCommandsタブを以下のように設定
    C/C++ Applicationにelfファイルを指定

Debug-main

  • Debuggerはarm-none-eabi-gdbを指定

Debug-debugger

  • Commandsは以下を指定
    <Initialize commands>
    target remote localhost:3333
    load
    monitor soft_reset_halt
    break main
    <Run commands>
    continue

Debug-command

  • デバッグを開始すると、以下のようにめでたくEclipseでソースコードデバッグが動きました。
  • 2012/5/12追記: Flashへの書き込みはDebug configurationで指定したelfファイルをloadコマンドで自動的に書き込んでくれます。そのため、telnetセッションからflash write_image erase xxx.elfで書き込みを行う必要はありません。また、flash write_imageコマンドで指定したファイルは、OpenOCDデーモン起動時に指定した.cfgファイルのパスを検索するようで、プロジェクトのビルドターゲットパスにカレントディレクトリを移動してもフルパスでelfファイル名を指定しない限りfile openエラーになります。そのため、flashへの書き込みはDebug Configrationの指定で行うのがよいです。

Eclipse_DebugWithOpenOCD


おわりに

インタフェースの次回特集に先立ち、Eclipse + OpenOCD環境にてデバッグができるようになりました。LPCXpressoのようにGPIOやコントロールレジスタ類の表示ができないのですが、configファイルを書けばできるのかも(今後の課題)。自動makeプロジェクトでアセンブラファイルを認識しない問題を解決せねばはファイルの拡張子が間違っていた(.sでなく、.asm)という初歩的な問題でした。

参考資料

2017年2月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28        
無料ブログはココログ