OpenOCD需要針對不同的JTAG工具和不同的目标晶片,配置一個配置文檔。一般而言,配置文檔分為4個部分。
1、Daemon
主要是配置openocd對外的通訊所使用的本地TCP/IP端口,如gdb、telnet所使用的端口。 接口Port的定義一般如下(非特殊情況,無需修改,定義了一些端口号)
telnet_port 4444
tcl_port 6666
在用telnet或gdb進行調試時,将會根據定義的端口号連接配接到服務程式openocd上。
2、Interface
就是openocd所操作的連接配接開發闆的調試器。
# type of debug adapter
interface ft2232
# Provides the USB device description (the iProduct string) of the FTDI FT2232 device. If not specified, the FTDI default value is used.
ft2232_device_desc "USB<=>JTAG&RS232"
# Each vendor’s FT2232 device can use different GPIO signals to control output-enables, reset signals, and LEDs
ft2232_layout jtagkey
# The vendor ID and product ID of the FTDI FT2232 device
ft2232_vid_pid 0x1457 0x5118
注: 檢視ID的方法: lsusb //檢視裝置的相關簡要資訊
擷取如下:
Bus 006 Device 030: ID 1457:5118 First International Computer, Inc. OpenMoko Neo1973 Debug board (V2+)
擷取更詳細的資訊:
sudo lsusb -v -D /dev/bus/usb/006/030
詳細資訊如下:
Device: ID 1457:5118 First International Computer, Inc. OpenMoko Neo1973 Debug board (V2+)
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1457 First International Computer, Inc.
idProduct 0x5118 OpenMoko Neo1973 Debug board (V2+)
bcdDevice 5.00
iManufacturer 1 www.100ask.net
iProduct 2 USB<=>JTAG&RS232
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 55
bNumInterfaces 2
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 255 Vendor Specific Subclass
bInterfaceProtocol 255 Vendor Specific Protocol
iInterface 2 USB<=>JTAG&RS232
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 255 Vendor Specific Subclass
bInterfaceProtocol 255 Vendor Specific Protocol
iInterface 2 USB<=>JTAG&RS232
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x83 EP 3 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x04 EP 4 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Device Status: 0x0000
(Bus Powered)
3、board
(1)jtag速率 對于常見的arm、arm9,jtag配置的最大速率不能高于于cpu時鐘的六分之一。如果所用的cpu時鐘為60Mhz,是以jtag最大速率可設定為:
jtag_khz 10000
如果使用
jtag_rclk 3000
即使用自适應時鐘,它将會用rclk自己搜尋jtag工作頻率,速度會很慢。
(2)晶片複位 這裡配置的為jtag和target cpu可用的複位信号。其中複位jtag中的tap控制器的為trst信号,srst信号用于target cpu複位,它是都是可選的。最好的情況是這兩個信号都有,這樣openocd就可分别控制tap控制器和cpu的複位。
reset_config trst_and_srst
4、Target
在/usr/local/share/openocd/scripts/target目錄下可以找到很多晶片的配置例程,是以參照樣本添加配置。
配置TAP是一個通用的端口,通過TAP可以通路晶片提供的所有資料寄存器(DR)和指令寄存器(IR),配置文法為:
jtag newtap $_CHIPNAME cpu -irlen 4 -ircapture 0×1 -irmask 0xf -expected-id $_CPUTAPID
配置cpu 此處設定cpu名稱以及大小端排列順序即可。配置如下:
target create $_TARGETNAME cortex_m3 -endian $_ENDIAN -chain-position $_TARGETNAME
在使用openocd下載下傳映像到ram時,為了提高速度,在ram中設定一塊工作區域,配置如下:
$_TARGETNAME configure -work-area-phys 0x20000000 -work-area-size $_WORKAREASIZE -work-area-backup 0
由于K60是Cortex-M4的核心,相比之前的arm系列有很大的不同,openocd針對cortex系列也有很多的特殊配置,是以上面的配置還隻是初級的配置文檔,更加詳細的配置還要待今後對這一核心進入深入研究之後再添加了。
參考連結:http://a.chinaunix.com/space.php?uid=23947686&do=blog&id=172600
----------------------------------------------------------------
歡迎大家轉載我的文章。
轉載請注明:轉自古-月
http://blog.csdn.net/hcx25909
歡迎繼續關注我的部落格