2020年1月24日 星期五

使用 jtag debug rpi2

今天 (20200124) 是 2019 農曆 12/31, 也就是除夕, 照慣例發篇文章慶祝。

How To JTAG Raspberry Pi 2
提供了一支程式, 在 linux 下設定 gpio 為 jtag。

Preparing Raspberry PI for JTAG Debugging

jtag 需要 table 1 的接腳以及 v3.3 和 ground, v3.3 和 RTCK 可以不用接。

table 1. jtag 接腳
JTAG pin"ALT4" mode (011)"ALT5" mode (010)
TDIGPIO26GPIO4
TDOGPIO24GPIO5
TMSGPIO27GPIO12
TCKGPIO25GPIO13
RTCKGPIO23GPIO6
TRSTGPIO22N/A

我選用了 table 1 紅色部份的 gpio。

JTAG RPi2 GPIO gpio number
VREF* Pin 1 3.3 v
nTRST Pin 15 gpio 22
GND Pin 9 GND
TDI Pin 7 gpio 4
TMS Pin 13 gpio 27
TCK Pin 22 gpio 25
TDO Pin 18 gpio 24

figure 1. 樹莓派 2 gpio pin
配合 figure 1, 就知道要怎麼把 jtag pin 接起來。

再來是設定 gpio, 把 gpio 設定成 jtag。



從這幾頁可以得知:

000 = GPIO Pin 9 is an input
001 = GPIO Pin 9 is an output
100 = GPIO Pin 9 takes alternate function 0
101 = GPIO Pin 9 takes alternate function 1
110 = GPIO Pin 9 takes alternate function 2
111 = GPIO Pin 9 takes alternate function 3
011 = GPIO Pin 9 takes alternate function 4
010 = GPIO Pin 9 takes alternate function 5

所以把相對應的 gpio 設定為 011 或是 010 即可。

gpio4 要設定為 010
gpio2X 要設定為 011

gpio4 在 GPFSEL0 (實體位址: 0x3f200000)
所以把 GPFSEL0 bit 12:14 設定為 010 即可。

gpio2X 在 GPFSEL2 (實體位址: 0x3f200008), 一樣的道理。

figure 2. jtag 硬體接線, 右上 3 pin 是 uart。

以下提供 u-boot 的設定指令:
mw.l 0x3f200008 0x61b6c0
mw.l 0x3f200000 0x2000

c 程式
void enable_jtag_pin()
{
  volatile u32 gpfsel0 = 0x3f200000;
  volatile u32 gpfsel2 = 0x3f200008;

  *(volatile u32*)gpfsel0 = 0x2000;
  *(volatile u32*)gpfsel2 = 0x61b6c0;

}
若成功的話, jtag 軟體可以看到以下畫面。

沒有留言:

張貼留言

使用 google 的 reCAPTCHA 驗證碼, 總算可以輕鬆留言了。

我實在受不了 spam 了, 又不想讓大家的眼睛花掉, 只好放棄匿名留言。這是沒辦法中的辦法了。留言的朋友需要有 google 帳號。