微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 JTAG 链接调试两个或多个微控制器?

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

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

设置

  • 微控制器:STM32F405RG
  • 调试探针:我使用的是 Amontec 的旧 JTAGKEY2
  • 工具链:端口 3333 上的 openOCD 和 GDB
  • 我没有使用任何 GUI 和任何特定的软件工具。

目标

现在我想升级一点。

我的项目由 3 个位于冗余工作的 PCB 上的 MCU 组成。

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

    1. 使用相同的 .elf 对所有设备(我们称之为 MCU1 和 MCU2)进行编程。
    1. 跑。
    1. 在特定时间(例如运行 10 秒后)暂停 MCU1 和 MCU2。
    1. 修改 MCU1 的 r4
    1. 恢复所有目标。

对于一个 MCU,我将目标配置文件称为 smt32f4x.cfg。 对于两个 MCU,我阅读了 OpenOCD 用户指南,看来我必须创建一个新水龙头。 但首先,我想尝试使用相同的配置调试 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),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.),ver: 0x4)
Info : JTAG tap: STM32F405RGTx.bs tap/device found: 0x06413041 (mfg: 0x020 (STMicroelectronics),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 的不同命令的示例。

问题

  • 在哪里可以找到带有多个 MCU 的电路板配置示例?

  • 是否可以只向被调试的设备之一发出调试命令?怎么样?

解决方法

我使用了多个 st-link 的序列号。

#To invoke without this script: openocd -s /share/openocd/scripts -f interface/stlink-v2-1.cfg -f target/stm32f1x.cfg 

gdb_port 3334
tcl_port 6667
telnet_port 4445

#To run: openocd -s /share/openocd/scripts and then telnet localhost 4445
#To erase type into telnet: flash erase_sector 0 0 127 
#To read device ID and Flash size type into telnet: flash probe 0

source [find interface/stlink-v2-1.cfg]
hla_serial \x56\x3F\x6E\x06\x66\x3F\x48\x55\x38\x57\x09\x67
transport select hla_swd

source stm32f1x-nores.cfg

reset_config none srst_nogate

查看 hla_serial 行。每个 MCU 都有自己的 st-link 通过 SWD 连接,每个 st-link 都有自己的 oocd 配置,带有序列号和自己的端口。然后为每个 MCU 启动 oocd,您将获得每个 MCU 的 GDB 服务器。

您可以在 Linux 上使用 lsusb -v 命令获取 st-link 的序列号。有些克隆没有序列号,有些需要升级。 Google 会为您提供帮助。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。