Cómo usar RPI 2 para depurar RPI modelo B a través de JTAG con OpenOCD

3

Tengo un RPI 2 que quiero usar para programar y depurar un RPI modelo B a través de JTAG para un proyecto completo. En este momento estoy teniendo problemas para lograr que las dos placas incluso se hablen entre sí a través de JTAG.

Configuré el objetivo del modelo B según enlace y ejecuté su programa para habilitar los pines JTAG en el encabezado También proporcionan un archivo de destino raspberry.cfg para usar en ese sitio.

También construí OpenOCD 0.9.0 desde la fuente en el host RPI 2 hasta ssh y lo uso como una interfaz JTAG. Descomenté la línea en interface / raspberrypi2-native.cfg que especifica los pines JTAG para que use Openocd. Luego conecté los pines JTAG RPI2 en interface / raspberrypi2-native.cfg a los pines configurados en el modo JTAG en el Modelo B por el programa sysprogs.com con cables de puente como este:

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)

Comencé openocd con $openocd -f interface/raspberrypi2-native.cfg -f target/raspberry.cfg , pero obtuve la respuesta:

  

Open On-Chip Debugger 0.10.0-dev-00329-gf19ac83 (2016-07-31-05: 57)
  Licenciado bajo GNU GPL v2
  Para informes de errores, lea
enlace
  BCM2835 GPIO config: tck = 11, tms = 25, tdi = 10, tdo = 9
  BCM2835 Números GPIO: swclk = 25, swdio = 24
  BCM2835 GPIO config: srst = 18
  srst_only separado srst_gates_jtag srst_push_pull connect_deassert_srst
  velocidad del adaptador: 1000 kHz
  ninguno separado
  raspi.arm
  Info: BCM2835 GPIO JTAG / SWD bitbang driver
  Info: Modos JTAG y SWD habilitados
  Info: velocidad del reloj 1001 kHz
  Error: Fallo en la interrogación de la cadena de exploración JTAG: todos los
  Error: compruebe la interfaz JTAG, los tiempos, la potencia de destino, etc.
  Error: al intentar utilizar la cadena de exploración configurada de todos modos ...
  Error: raspi.arm: error de captura IR; vio 0x1f no 0x01
  Advertir: omitir los eventos de configuración de JTAG debido a errores
  Error: error JTAG 'arm11 target' SCREG OUT 0x1f
  Error: código de ID ARM11 inesperado

He estado jugando con el objetivo y la interfaz .cfg y revisé tres veces el cableado para averiguar por qué produce errores, pero aún no he tenido éxito. Intenté hacer que el RPI2 se conectara brevemente a una placa de descubrimiento STM32F3 que tenía por ahí, para ver si podía determinar que openocd estaba funcionando en el RPI2 y el error era culpa del Modelo B, pero tampoco funcionó (me dieron errores de sintaxis en los cfgs ST-LinkV2 que venían con OpenOCD, así que me rendí porque parecía otra lata de gusanos). No estoy seguro de qué más intentar que JTAG se inicie y se conecte correctamente. ¿Alguien sabe lo que estoy haciendo mal?

Para completar, aquí está la interfaz / raspberrypi2-native.cfg, con la que he estado jugando para intentar que funcione. La versión original viene con OpenOCD.

#
# 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

Y aquí está target / raspberry.cfg para el dispositivo objetivo modelo B, proporcionado por sysprogs.com; no ha sido modificado 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
    
pregunta kandll

0 respuestas

Lea otras preguntas en las etiquetas