This example explains how to understand the BSDL file in order to create an OpenOCD configure file.
That information can be retrieved directly:
attribute INSTRUCTION_LENGTH of imx_device: entity is 5;
This means that IR Len is 5, then in OpenOCD config it will be informed this way:
-irlen 5
The IR Capture also can be retrieved directly:
attribute INSTRUCTION_CAPTURE of imx_device : entity is "XXX01";
This means that IR Capture is 1, then in OpenOCD config it will be informed this way:
-ircapture 0x1
The IR Mask is based on IR Len size. Just create a binary number with "IR Len" bits 1.
If the IR Len is 4 then the IR Mask will be 0xF (1111). Case the IR Len is 5 the IR Mask will be 0x1F (11111).
In this BSDL example (IR Len = 5) the OpenOCD config needs to inform the IR Mask this way:
-irmask 0x1f
attribute IDCODE_REGISTER of imx_device : entity is "0010" & -- Version "000110" & -- Design Center Number "0100000001" & -- Sequence Number "00000001110" & -- Manufacturer Identity "1"; -- IEEE 1149.1 Requirement
This code can be converted directly to TAP ID:
Binary:
0010-0001-1001-0000-0001-0000-0001-1101
Hexadecimal:
2-1-9-0-1-0-1-D
Then in OpenOCD configure you will create:
if { [info exists SDMATAPID ] } { set _SDMATAPID $SDMATAPID } else { set _SDMATAPID 0x2190101d }
The final configure line will be:
jtag newtap $_CHIPNAME smda -irlen 5 -ircapture 0x1 -irmask 0x1f -expected-id $_SDMATAPID
IMX6D_21x21_BSDL_TO1.2.bsdl
0x2191e01d
# SDMA / no IDCODE
jtag newtap $_CHIPNAME sdma -irlen 4 -ircapture 0x00 -irmask 0x0f
# System JTAG Controller
if { [info exists SJC_TAPID] } {
set _SJC_TAPID $SJC_TAPID
} else {
set _SJC_TAPID 0x0191c01d
}
set _SJC_TAPID2 0x0191e01d
set _SJC_TAPID3 0x2191c01d
set _SJC_TAPID4 0x2191e01d #here
jtag newtap $_CHIPNAME sjc -irlen 5 -ircapture 0x01 -irmask 0x1f \
-expected-id $_SJC_TAPID -expected-id $_SJC_TAPID2 \
-expected-id $_SJC_TAPID3 -expected-id $_SJC_TAPID4
now is set for _SJC_TAPID not _SDMATAPID