Preparing Raspberry PI for JTAG Debugging
This tutorial shows how to prepare your Raspberry PI board for debugging with JTAG (we have tested this with Raspberry Pi 1, 2, 3 and 4). Using JTAG will allow debugging the Linux kernel using hardware like Segger J-Link. As Raspberry PI board does not have a connector with a normal JTAG layout, preparing the board for JTAG debugging involves finding the correct pins and wiring them in the correct order. Follow the steps below for a complete walkthrough:
- Determine the revision of your Raspberry PI board. Connect to it using SSH and run the following command:
cat /proc/cpuinfo

- Use the revision table to look up the board revision. In this tutorial we will use Model B v2.0 (revision 0xe), however the same schematics also works for Raspberry Pi 3 and Raspberry Pi 4.
- In order to find which pins on the board are JTAG pins we need to first find the GPIO numbers that correspond to them. JTAG requires 4 pins: TDI, TDO, TMS and TCK plus TRST and RTCK pins. You can find the GPIO pins corresponding to these in the datasheet for BCM2835 (Raspberry Pi 1-3) or BCM2711 (Raspberry Pi 4). Search for “_TCK” to find the GPIO number table:

- Here are the GPIO numbers for the current revision:
JTAG pin “ALT4” mode “ALT5” mode
(Raspberry Pi 1-3 only)TDI GPIO26 GPIO4 TDO GPIO24 GPIO5 TMS GPIO27 GPIO12 TCK GPIO25 GPIO13 RTCK GPIO23 GPIO6 TRST GPIO22 N/A - Download Raspberry PI schematics PDF for the board revision you found out in step 2. Each JTAG pin (except TRST) can be routed to one of 2 GPIO pins. Use the schematics to find GPIO pins that are connected to the GPIO connector:

- We will now need to wire the selected pins from the P1 connector to a 20-pin JTAG connector. Use the JTAG-20 pinout to map the P1 pins to the JTAG-20 pins:
JTAG-20 pin JTAG signal GPIO pin ALT mode P1 pin 1 VREF N/A N/A 1 3 nTRST GPIO22 ALT4 15 4 GND N/A N/A 9 5 TDI GPIO4 (Rpi 1-3)
GPIO26 (Rpi Pi 4)ALT5 (Rpi Pi 1-3)
ALT4 (Rpi Pi 4)7 (Rpi 1-3)
37 (Rpi 4)7 TMS GPIO27 ALT4 13 9 TCK GPIO25 ALT4 22 11 RTCK GPIO23 ALT4 16 13 TDO GPIO24 ALT4 18 - Now we can make an adapter cable that will connect the pins from the 26-pin P1 connector on Raspberry PI to the 20-pin JTAG connector. This can be done by carefully opening and detaching the 26-pin connector from a 26-pin cable and attaching the wires from the 14-pin cable to it ordered according to the table above:

- Each wire can be carefully pushed into the correct position using a pincette:

- Double-triple check your wiring. Wrong wiring/cable orientation can permanently damage your Raspberry PI, your JTAG programmer and even your PC connected to it! Test the correctness of each pin. E.g. we can test JTAG pin 3 (nTRST = GPIO22) by connecting a LED between pins 3 and 4 (4 is GND) and running the following commands in your Raspberry PI terminal over SSH:
cd /sys/class/gpio echo 22 > export cd gpio22 echo out > direction echo 1 > value
This will turn on the LED until we run ‘echo 0 > value’:

- The easiest way to test out the JTAG connection is to create a kernel module project with VisualKernel that can configure and verify the JTAG setup automatically:
