HydraFW JTAG guide - hydrabus/hydrafw GitHub Wiki

HydraFW Bus JTAG (Joint Test Action Group)

This guide is updated towards firmware release HydraFW v0.10 and later

Bus: JTAG
Connections: four pins (TMS, TCK, TDI, TDO) and one optional pin (TRST)
Output types: 3.3volt normal output, or open drain
(pull-up/pull-down resistors integrated in MCU or external).
Pull-up resistors: required for open collector output mode (2K – 10K).
Pull-up/down resistors Integrated in MCU: Between 30 to 50K (Typical 40K).
Maximum Voltage: 5.5volts (5volt safe).

Protocol configuration syntax description:

  • show Show JTAG parameters or show pins Show pins used in this mode

  • pull with parameter up or down or floating to choose internal MCU pull up/down or no pull/external

  • msb-first or lsb-first to send/receive respectively MSB first or LSB first.

  • tck, tms, tdi and tdo with an integer parameter to set the corresponding pin on PB (tms 1 sets TMS on pin PB1)

  • brute with bypass or idcode parameters is used to discover JTAG ports on an unknown device.

    • bypass to query the number of devices in the JTAG chain.
      • brute bypass <integer> Performs a BYPASS scan on x pins (PB0 up to PB11)
    • idcode to get the devices IDCODEs in the JTAG chain.
      • brute idcode <integer> Performs an IDCODE scan on x pins (PB0 up to PB11)
  • openocd to switch to openOCD mode. See OpenOCD guide

  • exit to exit JTAG mode

> jtag
Device: JTAG1
GPIO resistor: pull-up
Frequency: 2000000Hz
Bit order: LSB first

Configuration options:

Hardware Informations:

jtag1> show pins 
TMS:PB10  TCK:PB11  TDI:PB8  TDO:PB9  TRST:PB7

Protocol interaction syntax description:

Bus interaction commands

^ to send one clock tick

/ to set TCK level high

\ to set TCK level low

- to set TDI level high

_ to set TDI level low

[ to set TMS level high

] to set TMS level low

! to read TDO with clock tick

. to read TDO without clock tick

Protocol interaction example usage JTAG1 to discover JTAG pins:

Connect several test pins on the board to analyze on HydraBus PBx pins, and run :

jtag1> brute idcode 10
Bruteforce on 10 pins.
TMS:PB0  TCK:PB3  TDI:Unused  TDO:PB2  TRST:Unused  

jtag1> brute bypass 8
Bruteforce on 8 pins.
TMS:PB0  TCK:PB3  TDI:PB1  TDO:PB2  TRST:Unused  

jtag1> idcode 
Device found. IDCODE : 3F0F0F0F

jtag1> bypass 
Number of devices found : 1

JTAG brute details

Example JTAG with 3 IO (TMS, TCK & TDO)

Nb IO Nb Pins Nb Test
3 3 6
4 3 24
5 3 60
6 3 120
7 3 210
8 3 336
9 3 504
10 3 720
11 3 990
12 3 1320

Example JTAG with 4 IO (TMS TCK TDI TDO)

Nb IO Nb Pins Nb Test
4 4 24
5 4 120
6 4 360
7 4 840
8 4 1680
9 4 3024
10 4 5040
11 4 7920
12 4 11880

Additional informations about JTAG

For more details on JTAG see: https://en.wikipedia.org/wiki/Joint_Test_Action_Group

⚠️ **GitHub.com Fallback** ⚠️