OpenOCD 写入数据到TAP
OpenOCD为需要访问JTAG指令或数据寄存器的开发人员提供一些底层的控制命令,这些命令可以控制TAP控制器的状态转换的顺序。
drscan
tapname [numbits value] + [-endstate tap_state]- tapname: 使用
jtag newtap
命令创建的TAP名 - [numbits value]: 这个整体貌似可选(没有测试),vaule部分支持16进制和10进制,numbit指定需要传输的比特位数
- [endstate tap_state]: 其中
-endstate
是选项, tap_state是一个枚举量,可供选择的状态名见下文
- tapname: 使用
irscan
[tapname instruction] + [-endstate tap_state]- [tapname instruction]: 这个整体也是可选的,可以不加,若输入时,tapname同
drscan
,instruction则与OpenOCD进行通信的JTAG TAP所对应jtag 命令编码(二进制码) - [endstate tap_state]: 同上
- [tapname instruction]: 这个整体也是可选的,可以不加,若输入时,tapname同
TAP state names
(irscan
和drscan
中tap_state可以选择其中一种)- RESET
- RUN/IDLE
- DRSELECT
- DRCAPTURE
- DRSHIFT
- DREXIT1
- DRPAUSE
- DREXIT2
- DRUPDATE
- IRSELECT
- IRCAPTURE
- IRSHIFT
- IREXIT1
- IRPAUSE
- IREXIT2
- IRUPDATE
OpenOCD 配置文件
#interface_list
interface ftdi
ftdi_vid_pid 0x0403 0x6010
# ftdi_channel 0 is port ADBUS, ftdi_channel 1 is port BDBUS.
ftdi_channel 1
#adapter_name
transport select jtag
adapter_khz 10
# ftdi_layout_init data direction
ftdi_layout_init 0x0038 0x00FB
ftdi_layout_signal nSRST -oe 0x0040
ftdi_layout_signal TRST -oe 0x0010 -data 0x0010
ftdi_layout_signal led2 -data 0x0080 -oe 0x0080
ftdi_layout_signal led3 -data 0x0040 -oe 0x0040
set _CHINPNAME custom
jtag newtap custom tap -irlen 4 -expected-id 0x149511c5
init
#jtag_init
ftdi_set_signal led2 1
ftdi_set_signal led3 0
#verify_ircapture enable
#verify_jtag enable
#pathmove RESET DRSELECT
foreach tapname [jtag names] {
puts [format "TAP: %s\n" $tapname]
}
#irscan [EXTEST] + [-endstate RUN/IDLE]
#irscan [tap EXTEST] + [-endstate RUN/IDLE]
irscan custom.tap 0x8 -endstate RUN/IDLE
drscan custom.tap 16 0x1234 -endstate RUN/IDLE
JTAG TAP Controller
在JATG篇(4)中展示的JTAG TAP中添加下面代码:
reg [63:0] input_shift_reg ;
always @ (posedge tck_pad_i or negedge trstn_pad_i) begin
if (~trstn_i) begin
input_shift_reg <= 'h0;
end else if(ir_debug && shift_dr_i)
input_shift_reg <= {tdi_pad_i, input_shift_reg[63:1]};
end