蓝牙技术
直播中

李凤津

8年用户 1063经验值
私信 关注
[问答]

添加app.overlay后无法使用OpenOCD进行调试是为什么?

添加 app.overlay 后无法使用 OpenOCD 进行调试

回帖(1)

1652711011.026500

2025-7-3 18:16:36

当添加 app.overlay 后无法使用 OpenOCD 调试,通常是由于设备树(Devicetree)配置冲突引起的。以下是常见原因和解决方案:




根本原因




  1. 引脚冲突

    app.overlay 可能修改了调试接口(SWD/JTAG)使用的引脚(如 swdioswclk),导致 OpenOCD 无法访问芯片的调试端口。




  2. 外设占用调试接口

    在覆写设备树时,可能意外启用了占用调试引脚的外设(如 UART、SPI、GPIO)。




  3. 调试接口被禁用

    某些配置可能关闭了调试模块(如 STM32 的 DBGMCU 时钟)。






解决方案


1. 检查设备树引脚配置



  • app.overlay 中确认是否修改了调试引脚:
     /* 示例:检查SWD引脚是否被覆盖 */
    &pinctrl {
         /* 确保不覆盖调试接口引脚 */
         swd_default: swd_default {
             pin-swdirq { ... };
             pin-swdio { ... }; // 如 PA13 (STM32)、P0.20 (nRF)
             pin-swdclk { ... }; // 如 PA14 (STM32)、P0.19 (nRF)
         };
    };


  • 修复:避免在覆写中使用调试引脚,或显式保留它们:


     / {
         chosen {
             zephyr,console = &uart0; // 避免使用SWD引脚作为UART
         };
    };

    /* 禁用占用SWD引脚的外设 */
    &uart0 {
         status = "disabled";
    };





2. 验证调试接口是否启用



  • app.overlay 中检查是否关闭了调试时钟(STM32 示例):
     &dbg {
         status = "okay"; // 必须为 "okay"(不能禁用)
    };

  • 对于某些芯片(如 STM32H7),还需启用调试电源域:
     &rcc {
         d1cpreq = <1>; // 确保调试域供电
    };




3. 检查 OpenOCD 与芯片的连接



  • 使用命令行测试 OpenOCD 连接:
     openocd -f board/your_board.cfg

  • 观察日志是否报错:
     Error: Unable to find CMSIS-DAP device (VID/PID)

    可能表明:



    • 引脚配置错误导致芯片无响应。

    • USB 驱动问题(尝试 sudo 或重插调试器)。





4. 逐步隔离问题



  • 备份后清空 app.overlay:确认是否能恢复调试。

  • 逐段注释:逐步添加 app.overlay 中的内容,定位冲突行。




5. 验证设备树生成结果



  • 在构建目录查看最终设备树文件:
     cat build/zephyr/zephyr.dts | grep -i "swd|jtag|debug"

  • 检查关键节点(如 swdjtagdbg)是否被正确配置。




示例修复


问题场景app.overlay 中使用 PA13/PA14 作为 UART 导致 SWD 失效。
修复后的 overlay


/ {
    chosen {
        zephyr,uart = &uart2; // 使用其他 UART
    };
};

&usart1 { // 原本占用 PA13/PA14
    status = "disabled";
};

/* 显式启用调试接口 */
&dbg {
    status = "okay";
};



补充建议



  • 查阅板级文档:确认调试接口的默认引脚(如 nRF52840 DK 的 SWD 是 P0.20/P0.19)。

  • 更新 Zephyr 和 OpenOCD:旧版本可能存在兼容性问题。


通过以上步骤,您应能定位并解决因设备树覆写导致的 OpenOCD 调试失败问题。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分