首页 > 解决方案 > 如何使用 JTAG 链接调试两个或多个微控制器?

问题描述

我设法编程和调试了一个 STM32F4 微控制器,做了一些简单的操作并编写了小脚本。

设置

目标

现在我想升级一点。

我的项目由 PCB 上的 3 个 MCU 组成,以冗余方式工作。

我想调试两个或多个 STM32F4 并在一个MCU 中执行一些操作,而其他的则停止。这是一个例子:

对于一个 MCU,我将目标配置文件称为 smt32f4x.cfg。对于两个 MCU,我阅读了 OpenOCD 用户指南,看来我必须创建一个新的 tap。但首先,我想尝试使用相同的配置调试 MCU1 和 MCU2。我连接了系统以便在总线上链接 MCU,打开一个终端并输入openocd我的项目文件夹。

问题

正如预期的那样,我收到了这条消息:

Info : JTAG tap: STM32F405RGTx.bs tap/device found: 0x06413041 (mfg: 0x020 (STMicroelectronics), part: 0x6413, ver: 0x0)
Info : JTAG tap: auto0.tap tap/device found: 0x4ba00477 (mfg: 0x23b (ARM Ltd.), part: 0xba00, ver: 0x4)
Info : JTAG tap: auto1.tap tap/device found: 0x06413041 (mfg: 0x020 (STMicroelectronics), part: 0x6413, ver: 0x0)
Warn : AUTO auto0.tap - use "jtag newtap auto0 tap -irlen 4 -expected-id 0x4ba00477"
Warn : AUTO auto1.tap - use "jtag newtap auto1 tap -irlen 5 -expected-id 0x06413041"
Info : STM32F405RGTx.cpu: hardware has 6 breakpoints, 4 watchpoints
adapter speed: 2000 kHz
Info : JTAG tap: STM32F405RGTx.cpu tap/device found: 0x4ba00477 (mfg: 0x23b (ARM Ltd.), part: 0xba00, ver: 0x4)
Info : JTAG tap: STM32F405RGTx.bs tap/device found: 0x06413041 (mfg: 0x020 (STMicroelectronics), part: 0x6413, ver: 0x0)
Info : JTAG tap: auto0.tap tap/device found: 0x4ba00477 (mfg: 0x23b (ARM Ltd.), part: 0xba00, ver: 0x4)
Info : JTAG tap: auto1.tap tap/device found: 0x06413041 (mfg: 0x020 (STMicroelectronics), part: 0x6413, ver: 0x0)
target halted due to debug-request, current mode: Thread 
xPSR: 0x01000000 pc: 0x08000910 msp: 0x20020000

然后发生的情况是只有一个 MCU 被编程。

所以我想我可能会创建一个板配置文件并使用 jtag newtap auto0 tap -irlen 4 -expected-id 0x4ba00477 和使用每个 TAP 一个 DAP ...

由于我对自己的技能没有信心,我没有设法从头开始我自己的配置文件。

而且我没有找到带有多个微控制器的配置示例,也没有在 gdb 中找到将调试命令提供给总线上不同 MCU 的不同命令的示例。

问题

标签: debuggingstm32stm32f4openocdjtag

解决方案


  1. 我能够弄清楚如何使用 Openocd 对两个微控制器进行编程

  2. 我目前正在使用包含 FT2232 USB 到 JTAG 转换器 IC 的 USB Bus Blaster V4 开发板。

  3. 我的设置由 2 个 STM32 MCU 组成,采用菊花链配置。

  4. 由于两个 MCU 都具有相同的抽头 IC,我按照第 22 页第 6.2.1 节用户指南的建议制作了板配置文件,如下所示:

    set CHIPNAME stm32master
    source [find target/stm32f4x.cfg]
    
    -# Chip #2: STM32F405 for Slave STM32, little endian
    set CHIPNAME stm32slave
    source [find target/stm32f4x.cfg]
    
    gdb_memory_map disable
    reset_config srst_only```
    
    
  5. 用于启动openocd的命令如下: sudo openocd -d2 -f interface/ftdi/dp_busblaster_kt-link.cfg -f board/stm32trail.cfg -c init -c scan_chain -c targets

  6. 我在终端执行上述命令后的输出如下:

  7. 我在 telnet 本地主机中执行命令的顺序如下:

    1. 目标 stm32master.cpu
    2. 目标 stm32slave.cpu
    3. 闪存擦除扇区 0 0 7
    4. 闪存 write_image 擦除 /home/nikhil/Downloads/Red_Led_C13.hex
    5. verify_image /home/nikhil/Downloads/Red_Led_C13.hex
    6. 重置
    7. 目标 stm32master.cpu
    8. 闪存擦除扇区 0 0 7
    9. 闪存 write_image 擦除 /home/nikhil/Downloads/Red_Led_C13.hex
    10. verify_image /home/nikhil/Downloads/Red_Led_C13.hex
    11. 重置
    12. 我能够成功地对两个 MCU 进行编程。

推荐阅读