FrontPage

2014/07/21からのアクセス回数 1535

U-BootやuCLinuxの移植記事が雑誌にでているのですが、ボードが高くて簡単にはできません。

そこで、買って袋に入ったままの SAM-LA2 を使ってみようと思います。

SAM7-LA2.png

SAM7-Pxxxの復習

一番最初に使ったARMのマイコンボードが、SAM7-Pxxxです。何とかMacOSXで動かしてみようと 試行錯誤してまとめたのが、arm/LED点灯の作成とデバッグです。

その後、MacOSXでもOpenOCDが使えるVersaloonの関連記事をトラ技に投稿しました。 OpenOCDの進歩でarm/LED点灯の作成とデバッグの記事のコンフィグファイルがそのまま使えない ことが分かり、SAM-PxxxをOpenOCDでデバッグするところから復習することにします。

Versaloon対応のOpenOCDの作り方は、内容はちょっと古いですが arm/Versaloon対応OpenOCDの作成 を参考にしてください。

SAM7-Pxxx_Versaloon.png

Versaloonコンフィグの修正

Versaloonは、SWDの他JTAGもサポートしているのでSAM7-Pxxxもデバッグできるはずなのですが、 最初は上手く動きませんでした。

調べて見るとvsllink.cfgにJTAGトランスポートの選択(transportコマンド)がありませんでしたので、 openocdの共有ディレクトリ/script/interface/vsllink.cfgを以下の様に変更します。

#
# Versaloon Link -- VSLLink
#
# http://www.simonqian.com/en/Versaloon
#

interface vsllink
transport select jtag

AT91SAM7-Pxxx(at91sam7s64.cfg)のコンフィグファイル

AT91SAM7-Pxxxのコンフィグファイルは、 at91sam7s64.cfg を参考にしました。

AT91SAM7Sでは、ボードスキャンとJTAG-ICEの2つのJTAGを持っているため、以下の警告が 出力されます。

Info : JTAG tap: at91sam7s64.cpu tap/device found: 0x3f0f0f0f (mfg: 0x787, part: 0xf0f0, ver: 0x3)
Warn : JTAG tap: at91sam7s64.cpu       UNEXPECTED: 0x3f0f0f0f (mfg: 0x787, part: 0xf0f0, ver: 0x3)
Error: Trying to use configured scan chain anyway...

これは、SAM7シリーズの特徴で、JTAG用にBSDとICEの2つをサポートしているからです。

  • ボードスキャン(BSDのジャンパーを閉じる)
  • JTAG-ICE(BSDのジャンパーをオープン)

そこで、at91sam7s64.cfg内で、以下の様にCPUTAPIDを追加し、jtagコマンドにCPUTAPIDを 知らせます。

if { [info exists CPUTAPID ] } { 
   set _CPUTAPID $CPUTAPID 
} else { 
   set _CPUTAPID 0x3f0f0f0f 
} 

jtag newtap $_CHIPNAME cpu -irlen 4 -expected-id $_CPUTAPID 

以下のファイルをopenocdの共有ディレクトリ/script/targetにコピーしてください。

openocd.cfgの変更

OpenOCDのコンフィグファイルも書き方が変わり、フラッシュの書き込みで以下のようなエラーが困りました。

flash probe 0 flash : command requires more arguments

Sparkfunのフォーラムの hsutherl氏のコメント で解決できました。*1

最終的なopenocd.cfgは、以下の様になりました。

# OpenOCD at91sam7s64.cfg with Flash proc
telnet_port 4444
gdb_port 3333

source [find interface/vsllink.cfg]
source [find target/at91sam7s64.cfg]

# 以下のURLのhsutherl氏のコメントを参考
# https://forum.sparkfun.com/viewtopic.php?f=18&t=33789
set _FLASHNAME $_CHIPNAME.flash
flash bank $_FLASHNAME at91sam7 0x00100000 0 0 0 0 $_TARGETNAME

proc flash_program {ELF_FILENAME} {
     halt
     flash probe 0
     flash write_bank 0 $ELF_FILENAME 0x0
     echo "flash program complete. reset and run"
     resume
     exit
}

init
halt

OpenOCDを使ったデバッグ

RAMベースのプログラムのデバッグは、 arm/LED点灯の作成とデバッグ に従ってデバッグを設定します。

デバッグのコンフィグタブのInitialize commands以下の様に変更し、Run Commandsは空のままにしてください。

target remote localhost:3333
set remote hardware-breakpoint-limit 2
monitor reset halt
load
monitor reset init
thbreak main

MacOSXでは、VersaloonのCDCがOSのドライバーに取られしまうため、一時的にそれをいったん止めます。

$ sudo kextunload /System/Library/Extensions/IOUSBFamily.kext/Contents/PlugIns/AppleUSBCDC.kext

元に戻すには、

$ sudo kextload /System/Library/Extensions/IOUSBFamily.kext/Contents/PlugIns/AppleUSBCDC.kext

動作確認

準備ができたので、ターミナルでopenocdを起動します。

$ /usr/local/bin/openocd -f openocd.cfg
$ /usr/local/bin/openocd  -f openocd.cfg 
Open On-Chip Debugger 0.5.0-dev-00783-g0123985-dirty (2014-07-17-17:17)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.berlios.de/doc/doxygen/bugs.html
Warn : must select a transport.
Warn : use 'at91sam7s64.cpu' as target identifier, not '0'
Error: Fail to receive usb data, error string is Operation timed out.
Info : Versaloon(0x15)by Simon(compiled on Jan 29 2011)
Info : USB_TO_XXX abilities: 0x0000024F:0x010001EF:0xC0000007
Info : RCLK (adaptive clock speed)
Info : JTAG tap: at91sam7s64.cpu tap/device found: 0x3f0f0f0f (mfg: 0x787, part: 0xf0f0, ver: 0x3)
Info : Embedded ICE version 1
Info : at91sam7s64.cpu: hardware has 2 breakpoint/watchpoint units
target state: halted
target halted in ARM state due to debug-request, current mode: System
cpsr: 0x200000df pc: 0x00000184

ROMベースのプログラムのデバッグ

フラッシュROMへの書込は、以下の手順で行います。

$ /usr/local/bin/openocd -f openocd.cfg -c "flash_program main.bin"

ROMでのブレークポイントの使い方

ROMベースのプログラムでは、ハードブレークポイントが2個しか使えず、 Eclipseからのブレークポイントは使えません。

そこでプログラムが停止している時に、Eclipseのgdbコンソールでthbreakコマンド を入力してEnterを押すことで一時ブレークポイントがセットできます。 ((この時、breakpointのタブに2個以上のブレークポイントがセットされてないように してください。))

thbreak 関数名
または
thbreak ソースファイル名:行数

thbreak.png

プログラムを途中で停止して、ブレークポイントをセットする場合には、 以下の様に停止してからブレークポイントをセットしてください。

$ telnet localhost 4444
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Open On-Chip Debugger
> halt

コメント

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

皆様のご意見、ご希望をお待ちしております。勉強会で分からなかったこと等、お気軽に問い合わせて下さい。

スパム防止に画像の文字列も入力してください。


(Input image string)


*1 感謝

添付ファイル: fileat91sam7s64.cfg 305件 [詳細] fileSAM7-Pxxx_Versaloon.png 246件 [詳細] filethbreak.png 258件 [詳細] fileSAM7-LA2.png 267件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2014-07-26 (土) 10:42:42 (1236d)
SmartDoc