FrontPage

2009/05/17 からのアクセス回数 8265

Mac OS Xユーザ固有の悩み

他でもコメントしていますが、 Eclipse/ARMプロセッサによる組み込み開発は、 EclipseとOpenOCDを使ってARMの組み込み開発を説明したすばらしい本ですが、 Mac OS X では、以下の理由でFT2232ベースのJTAGではOpenOCDを使えません。

  • LeopardではD2XXドライバとVCP(仮想COMポート)ドライバは同時に使用できないため、FT2232を使ったUSBケーブルはそのままでは正常に動作しません。*1

そこで、何とかMac OS XでOpenOCDを使えないものかと探したのが、OpenOCDのUSB Blaster版でした。

その前にOpenOCDについて簡単に説明します。

  • ARMではJTAGデバッグの方式を公開しており、この情報を使ってすべてのARMプロセッサに共通して使えるOn Chip Debuggerをオープンソースで公開しているのが、OpenOCDです。
  • OpenOCDを使ってEclipseからソースレベルでのデバッグができるようになります。

以下に、EclipseからOpenOCDを使ってolimexのSAM7SP256ボードをデバッグしている画面を示します。

openocd.jpg

Eclipse上で、ブレークポイントの設定、ソースのトレース、変数の値の表示、スタックトレースができます。

Usb_Blaster.jpg

こちらが、デバッグしているターゲットボードSAM7P256とUSB Blasterです。

USB Blaster対応のOpenOCDの作成

Usb Blaster対応のOpneOCDの記事は、kawk: USB JTAG adapter を参考にします。

ファイルのダウンロード

必要なファイルは、openocdのパッチファイルとコンフィグファイルです。

openocdのmake

readmeを参考に、OpenOCDのSVNサイトからRevision 753をチェックアウトします。

$ mkdir ~/local/arm/openocd
$ cd ~/local/arm/openocd
$ svn co -r 753 svn://svn.berlios.de/openocd/trunk openocd-r753
$ cd openocd-r753

次にパッチを適応し、bootstrap, configureを実行した後、makeします。*2

$ patch -p1 < ../openocd.patch
$ ./bootstrap 
$ ./configure  --enable-usb_blaster_libftdi
$ make
$ sudo make install

openocdは、

  • /usr/local/bin/openocd

にインストールされ、openocdの設定ファイルは、

  • /usr/local/lib/openocd

にインストールされます。

動作確認

最後に、できあがったopenocdの動作を確認します。

  • USB Blasterをターゲットボードに接続
  • USB BlasterをPCに接続
  • ターミナル以下のコマンドを実行(コンフィグファイルは直上のディレクトリ置きます)
$ $ openocd -f ../openocd.cfg 
Open On-Chip Debugger 1.0 (2009-04-13-07:33) svn:753M
$URL: svn://svn.berlios.de/openocd/trunk/src/openocd.c $
Debug:   8 0 command.c:438 command_run_line_internal_op(): telnet_port 4444
Debug:   10 0 command.c:438 command_run_line_internal_op(): telnet_port 4444
Debug:   12 0 command.c:438 command_run_line_internal_op(): interface usb_blaster
Debug:   14 0 command.c:438 command_run_line_internal_op(): interface usb_blaster
Debug:   16 0 command.c:438 command_run_line_internal_op(): usb_blaster_vid_pid 0x09fb 0x6001
Debug:   18 0 command.c:438 command_run_line_internal_op(): usb_blaster_vid_pid 0x09fb 0x6001
Debug:   20 0 command.c:438 command_run_line_internal_op(): jtag_device 10 0x155 0x3FF 6
Debug:   22 0 command.c:438 command_run_line_internal_op(): jtag_device 10 0x155 0x3FF 6
Debug:   24 0 command.c:438 command_run_line_internal_op(): init
Debug:   26 0 command.c:438 command_run_line_internal_op(): init
Debug:   27 0 openocd.c:106 handle_init_command(): target init complete
Debug:   28 0 usb_blaster.c:528 usb_blaster_init(): 'usb_blaster' interface using libftdi
Debug:   29 692 usb_blaster.c:633 usb_blaster_init(): current latency timer: 2
Debug:   30 693 usb_blaster.c:254 usb_blaster_speed(): TODO: usb_blaster_speed() isn't optimally 
implemented!
Debug:   31 693 openocd.c:113 handle_init_command(): jtag interface init complete
Debug:   32 693 jtag.c:1551 jtag_init_inner(): Init JTAG chain
Debug:   33 693 jtag.c:340 jtag_call_event_callbacks(): jtag event: JTAG controller reset (TLR or TRST)
Debug:   34 693 jtag.c:1309 jtag_reset_callback(): -
Debug:   35 693 usb_blaster.c:662 usb_blaster_blink(): TODO: usb_blaster_blink() isn't implemented!
Debug:   36 697 jtag.c:340 jtag_call_event_callbacks(): jtag event: JTAG controller reset (TLR or TRST)
Debug:   37 697 jtag.c:1309 jtag_reset_callback(): -
Debug:   38 697 usb_blaster.c:662 usb_blaster_blink(): TODO: usb_blaster_blink() isn't implemented!
Info:    39 1977 jtag.c:1403 jtag_examine_chain(): JTAG device found: 0x3f0f0f0f (Manufacturer: 0x787,
 Part: 0xf0f0, Version: 0x3)
Debug:   40 1977 jtag.c:340 jtag_call_event_callbacks(): jtag event: JTAG controller reset (TLR or TRST)
Debug:   41 1977 jtag.c:1309 jtag_reset_callback(): -
Debug:   42 1977 usb_blaster.c:662 usb_blaster_blink(): TODO: usb_blaster_blink() isn't implemented!
Debug:   43 2010 openocd.c:120 handle_init_command(): jtag init complete
Debug:   44 2010 openocd.c:123 handle_init_command(): jtag examine complete
Debug:   45 2010 openocd.c:130 handle_init_command(): flash init complete
Debug:   46 2010 openocd.c:134 handle_init_command(): NAND init complete
Debug:   47 2010 openocd.c:138 handle_init_command(): pld init complete
Warning: 48 2010 gdb_server.c:2015 gdb_init(): no gdb ports allocated as no target has been specified

ここで、止まります。

Info:    39 1977 jtag.c:1403 jtag_examine_chain(): JTAG device found: 0x3f0f0f0f (Manufacturer: 0x787,
Part: 0xf0f0, Version: 0x3)

のようにデバイスを正しく認識できればOKです。

残念ながら、USB Blaster対応opneocdでは、デバイスの認識が最初うまくいきません。何度か起動し直してデバイスが認識できるまで繰り返してください。

openocd.cfgの作り方

通常、openocd.cfgは、

$ cat 使用するJTAGインタフェース.cfg ターゲットボード.cfg > openocd.cfg

のようにJTAGインタフェースのcfgファイルとターゲットボードのcfgファイルを結合して使用します。

例)JTagKeyとSAM7S256ボードの場合、

$ cat /usr/local/lib/openocd/interface/jtagkey.cfg \
   /usr/local/lib/openocd/target/sam7s256.cfg >openocd.cfg

今回のUSB Blasterのcfgファイルは、以下の通りです。

telnet_port 4444
interface usb_blaster
usb_blaster_vid_pid 0x09fb 0x6001

コメント

この記事は、

選択肢 投票
おもしろかった 10  
そうでもない 0  
わかりずらい 0  

皆様のご意見、ご希望をお待ちしております。


(Input image string)


*1 動作したというレポートもありますが、手元のUSB2232では動作しませんでした。おそらく VCPを入れていないのではないかと思われます
*2 もし、libftdiライブラリがない旨のエラーがでたら、MacPortでlibftdiをインストールしてください。

添付ファイル: fileopenocd.cfg 861件 [詳細] fileopenocd.patch 923件 [詳細] fileUsb_Blaster.jpg 857件 [詳細] fileopenocd.jpg 817件 [詳細]

トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-10-16 (日) 03:03:16 (423d)
SmartDoc