So verwenden Sie RPI 2 zum Debuggen von RPI-Modell B über JTAG mit OpenOCD

Ich habe ein RPI 2, das ich zum Programmieren und Debuggen eines RPI-Modells B über JTAG für ein Bare-Metal-Projekt verwenden möchte. Im Moment habe ich Probleme, die beiden Boards dazu zu bringen, überhaupt über JTAG miteinander zu sprechen.

Ich habe das Zielmodell B gemäß http://sysprogs.com/VisualKernel/tutorials/raspberry/jtagsetup/ eingerichtet und ihr Programm ausgeführt, um die JTAG-Pins auf dem Header zu aktivieren. Sie stellen auch eine raspberry.cfg-Zieldatei bereit, die auf dieser Site verwendet werden kann.

Ich habe auch OpenOCD 0.9.0 aus der Quelle auf dem RPI 2-Host erstellt, um es per SSH einzufügen und als JTAG-Schnittstelle zu verwenden. Ich habe die Zeile in interface/raspberrypi2-native.cfg auskommentiert, die die JTAG-Pins angibt, die openocd verwenden soll. Ich habe dann die RPI2-JTAG-Pins in interface/raspberrypi2-native.cfg mit den Pins verbunden, die auf dem Modell B vom sysprogs.com-Programm auf JTAG-Modus eingestellt wurden, mit Überbrückungsdrähten wie folgt:

TCK: Pin 22 (Model B) -> Pin 23 (RPI2)
TMS: Pin 13 (Model B) -> Pin 22 (RPI2)
TDI: Pin 7 (Model B) -> Pin 19 (RPI2)
TDO: Pin 19 (Model B) -> Pin 21 (RPI2)
GND: Pin 20 (Model B) -> Pin 20 (RPI2)

Ich habe openocd mit gestartet $openocd -f interface/raspberrypi2-native.cfg -f target/raspberry.cfg, bekam jedoch die Antwort:

Open On-Chip Debugger 0.10.0-dev-00329-gf19ac83 (2016-07-31-05:57)
Lizensiert unter GNU GPL v2
Für Fehlerberichte lesen Sie
http://openocd.org/doc/doxygen/bugs.html
BCM2835 GPIO-Konfiguration: tck = 11, tms = 25, tdi = 10, tdo = 9
BCM2835 GPIO-Nummern: swclk = 25, swdio = 24 BCM2835
GPIO-Konfiguration: srst = 18
srst_only separate srst_gates_jtag srst_push_pull connect_deassert_srst0 kHz separate
raspi.0 kHz Adaptergeschwindigkeit :
keine
.arm
Info: BCM2835 GPIO JTAG/SWD Bitbang-Treiber
Info: JTAG- und SWD-Modi aktiviert
Info: Taktfrequenz 1001 kHz
Fehler: Abfrage der JTAG-Scan-Kette fehlgeschlagen: alle
Fehler: Überprüfen Sie die JTAG-Schnittstelle, Timings, Zielleistung usw.
Fehler: Es wird trotzdem versucht, die konfigurierte Scan-Kette zu verwenden ...
Fehler: raspi.arm: IR-Erfassungsfehler; sah 0x1f nicht 0x01
Warnung: Umgehen von JTAG-Setup-Ereignissen aufgrund von Fehlern
Fehler: „arm11 target“ JTAG-Fehler SCREG OUT 0x1f
Fehler: unerwarteter ARM11-ID-Code

Ich habe mit dem Ziel und der Schnittstellen-.cfg herumgespielt und die Verkabelung dreimal überprüft, um herauszufinden, warum es Fehler auslöst, aber ich war noch nicht erfolgreich. Ich habe kurz versucht, das RPI2 dazu zu bringen, sich mit einem STM32F3-Discovery-Board zu verbinden, das ich herumgelegt hatte, um zu sehen, ob ich feststellen konnte, dass openocd auf dem RPI2 funktionierte und der Fehler die Schuld des Modells B war, aber das funktionierte auch nicht (ich bekam Syntaxfehler in den ST-LinkV2-cfgs, die mit OpenOCD geliefert wurden, also habe ich aufgegeben, weil es wie eine weitere Dose Würmer aussah). Ich bin mir nicht sicher, was ich sonst noch versuchen soll, damit JTAG richtig startet und eine Verbindung herstellt. Weiß jemand was ich falsch mache?

Der Vollständigkeit halber hier die interface/raspberrypi2-native.cfg, mit der ich herumgespielt habe, um zu versuchen, sie zum Laufen zu bringen. Die Originalversion wird mit OpenOCD geliefert.

#
# Config for using Raspberry Pi's expansion header
#
# This is best used with a fast enough buffer but also
# is suitable for direct connection if the target voltage
# matches RPi's 3.3V and the cable is short enough.
#
# Do not forget the GND connection, pin 6 of the expansion header.
#

interface bcm2835gpio

# needed for oocd to jtag a rpi 1 model b, but breaks stm32f3 discovery support
#adapter_khz 1000
#transport select jtag 

bcm2835gpio_peripheral_base 0x3F000000

# Transition delay calculation: SPEED_COEFF/khz - SPEED_OFFSET
# These depend on system clock, calibrated for stock 700MHz
# bcm2835gpio_speed SPEED_COEFF SPEED_OFFSET
bcm2835gpio_speed_coeffs 146203 36

# Each of the JTAG lines need a gpio number set: tck tms tdi tdo
# Header pin numbers: 23 22 19 21
bcm2835gpio_jtag_nums 11 25 10 9

# or if you have both connected,
# reset_config trst_and_srst srst_push_pull

# Each of the SWD lines need a gpio number set: swclk swdio
# Header pin numbers: 22 18
bcm2835gpio_swd_nums 25 24

# If you define trst or srst, use appropriate reset_config
# Header pin numbers: TRST - 26, SRST - 18

# bcm2835gpio_trst_num 7
# reset_config trst_only

bcm2835gpio_srst_num 18
reset_config srst_only srst_push_pull

# or if you have both connected,
# reset_config trst_and_srst srst_push_pull

Und hier ist die target/raspberry.cfg für das Zielgerät Modell B, bereitgestellt von sysprogs.com; es wurde nicht modifiziert IIRC:

# Broadcom 2835 on Raspberry Pi

telnet_port 4444

gdb_port 5555

#tcl_port 0
adapter_khz 1000
transport select jtag

if { [info exists CHIPNAME] } {
    set  _CHIPNAME $CHIPNAME
} else {
    set  _CHIPNAME raspi
}
    reset_config none

if { [info exists CPU_TAPID ] } {
    set _CPU_TAPID $CPU_TAPID
    } else {
        set _CPU_TAPID 0x07b7617F
    }

    jtag newtap $_CHIPNAME arm -irlen 5 -expected-id $_CPU_TAPID

            set _TARGETNAME $_CHIPNAME.arm

    target create $_TARGETNAME arm11 -chain-position $_TARGETNAME
In Bezug auf Ihr Nebenexperiment denke ich nicht, dass Sie "ST-LinkV2 cfgs" verwenden sollten, um auf einen STM32 abzuzielen, wenn Ihr Adapter kein ST-LINK ist, sondern verwenden Sie die einfache Version für Ihren interessierenden Testchip - und testen Das Adapter-Setup war eine gute Idee. Gerade überprüft, dass stm32f3x.cfg funktioniert, zumindest in Version 10.

Antworten (1)

Hmm, wenn ich mir deine Pinbelegung ansehe,

TDO: Pin 19 (Model B) -> Pin 21 (RPI2)

TDO ist Pin 18 oder Pin 29, aber nicht Pin 19.