debugging - 如何使用 JTAG 链接调试两个或多个微控制器?
问题描述
我设法编程和调试了一个 STM32F4 微控制器,做了一些简单的操作并编写了小脚本。
设置
- 微控制器:STM32F405RG
- 调试探针:我使用的是 Amontec 的旧 JTAGKEY2
- 工具链:端口 3333 上的 openOCD 和 GDB
- 我没有使用任何 GUI 和任何特定的软件工具。
目标
现在我想升级一点。
我的项目由 PCB 上的 3 个 MCU 组成,以冗余方式工作。
我想调试两个或多个 STM32F4 并在一个MCU 中执行一些操作,而其他的则停止。这是一个例子:
-
- 使用相同的 .elf 对所有设备(我们称它们为 MCU1 和 MCU2)进行编程。
-
- 跑。
-
- 在特定时间(如运行后 10 秒)停止 MCU1 和 MCU2。
-
- 只修改 MCU1 的 r4
-
- 恢复所有目标。
对于一个 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 的不同命令的示例。
问题
在哪里可以找到具有多个 MCU 的板配置示例?
是否可以仅向正在调试的设备之一提供调试命令?如何?
解决方案
我能够弄清楚如何使用 Openocd 对两个微控制器进行编程
我目前正在使用包含 FT2232 USB 到 JTAG 转换器 IC 的 USB Bus Blaster V4 开发板。
我的设置由 2 个 STM32 MCU 组成,采用菊花链配置。
由于两个 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```
用于启动openocd的命令如下: sudo openocd -d2 -f interface/ftdi/dp_busblaster_kt-link.cfg -f board/stm32trail.cfg -c init -c scan_chain -c targets
我在终端执行上述命令后的输出如下:
我在 telnet 本地主机中执行命令的顺序如下:
- 目标 stm32master.cpu
- 停
- 目标 stm32slave.cpu
- 停
- 闪存擦除扇区 0 0 7
- 闪存 write_image 擦除 /home/nikhil/Downloads/Red_Led_C13.hex
- verify_image /home/nikhil/Downloads/Red_Led_C13.hex
- 重置
- 目标 stm32master.cpu
- 停
- 闪存擦除扇区 0 0 7
- 闪存 write_image 擦除 /home/nikhil/Downloads/Red_Led_C13.hex
- verify_image /home/nikhil/Downloads/Red_Led_C13.hex
- 重置
- 我能够成功地对两个 MCU 进行编程。
推荐阅读
- python - 在大量方面上绘图
- sql-server - 插入 ... 选择输出子句,同时获取 INSERTED.ID 和 SELECTED.ID
- typescript - RXJS 主题 - 阻止错误传播
- python - Python - MQTT 多订阅:消息来自哪个主题
- linux - 如何通过混合连接将 Azure Web App 连接到 Oracle Linux
- angular - 简单计算的打字稿“不舍入”数字
- c# - Visual Studio的clickonce更新不起作用
- android - 本地化 - 在 Android 应用程序中执行本地化时,只有少数字符串会转换为印地语
- c++ - 通过指向 base、static_cast、crtp、删除模板的指针派生的成员
- python - Pandas 为单元格赋值,为什么这不起作用?