This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] RM57L843:调试时出现[定制板] DAP 访问错误

Guru**** 2537350 points
Other Parts Discussed in Thread: HALCOGEN

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1127097/rm57l843-custom-board-dap-access-error-when-debugging

器件型号:RM57L843
主题中讨论的其他器件:HALCOGEN

大家好、团队、

我代表我的客户发布。 请参阅以下查询:

 尝试使用 XDS110调试探针对 RM57定制板进行调试时遇到错误。

 详细信息:

-使用 Hello World 程序进行测试

- JTAG 测试连接成功

-如果加载了一个版本构建、则可以使用另一个构建对 MCU 进行编程、而不会出现错误

- 如果加载了调试构建、并且 我尝试加载程序、那么我会得到以下错误:   

"[ERROR] DAP:连接到目标时出错:(错误-1170 @ 0x0)无法访问 DAP。 重置设备、然后重试此操作。 如果错误仍然存在、请确认配置、对电路板进行下电上电和/或尝试更可靠的 JTAG 设置(例如、较低的 TCLK)。 (仿真包9.7.0.00213)"。

在正确的时间按下热复位热复位按钮后、日志显示:

"CortexR5:GEL 输出:闪存的存储器映射设置@地址0x0CortexR5:GEL 输出:闪存的存储器映射设置@由于系统复位而产生的地址0x0"

- 如果我在调试器中点击"Resume"、则开始重复以下操作:

"CortexR5:错误:(错误-1170 @ 0x0)无法访问 DAP。 重置设备、然后重试此操作。 如果错误仍然存在、请确认配置、对电路板进行下电上电和/或尝试更可靠的 JTAG 设置(例如、较低的 TCLK)。 (仿真包9.6.0.00172)  

CortexR5:停止目标 CPU 时出现问题:(错误-2064 @ 0x0)无法读取器件状态。 重置设备、然后重试此操作。 如果错误仍然存在、请确认配置、对电路板进行下电上电和/或尝试更可靠的 JTAG 设置(例如、较低的 TCLK)。 (仿真包9.6.0.00172)"
 
不过、XDS110可以访问热复位引脚、我可以在示波器上看到它没有尝试复位器件。 在此期间、我还可以点击"Reset"、然后返回到:
"CortexR5:GEL 输出:由于系统复位、闪存的存储器映射设置@地址0x0"

 其他故障排除步骤:

-我查看了此网页 :https://software-dl.ti.com/ccs/esd/documents/ccs_debugging_jtag_connectivity_issues.html 、但"a procedure to try and unlock a Hercules device is desced in this e2e forum thread中介绍了该链接。" 显示未找到页面的错误。

 -我检查了我的电压监控器,它们似乎没有触发电源复位

-将 JTAG 时钟速度降至最低(100kHz)

 -启动目标配置似乎已成功连接、然后当我点击"Run"时、它会重复错误-2064和-1170

 我不确定是否需要使用新芯片完成一些初始解锁过程才能使它们进入调试模式(我知道其他 MCU 也是如此、但我没有为 Hercules 找到它)。  是否有针对新芯片的初始编程说明? 我不认为这是一个电源问题、因为电压监控器未触发、并且 JTAG 测试成功。 如果它是硬件错误、那么它可能是什么?

 JTAG 测试连接日志:

[开始:德州仪器 XDS110 USB 调试探针]

执行以下命令:

%CCS_base%/common/uscif/dbgjtag -f %boarddatafil文件%-RV -o -S 完整性

[结果]

---- [打印电路板配置路径名]---------------

C:\Users\Lesley\AppData\Local\TEXASI~1\CCS\
  ccs1110\0\BrdDat\testBoard.dat

---- [打印重置命令软件日志文件]-----------------

此实用程序已选择100或510类产品。
此实用程序将加载适配器'jioxds110.dll'。
库构建日期为"DEC 8 2021"。
库构建时间为'11:16:32'。
库软件包版本为'9.6.0.00172'。
库组件版本为'35.0.0'。
控制器不使用可编程 FPGA。
控制器的版本号为'5'(0x00000005)。
控制器的插入长度为"0"(0x00000000)。
此实用程序将尝试重置控制器。
此实用程序已成功重置控制器。

---- [打印重置命令硬件日志文件]-----------------

扫描路径将通过切换 JTAG TRST 信号进行复位。
控制器是具有 USB 接口的 XDS110。
从控制器到目标的链路是直接的(不带电缆)。
该软件配置为 XDS110功能。
控制器无法监控 EMU[0]引脚上的值。
控制器无法监控 EMU[1]引脚上的值。
控制器无法控制输出引脚上的时序。
控制器无法控制输入引脚上的时序。
扫描路径链路延迟已精确设置为"0"(0x0000)。

---- [对 JTAG IR 执行完整性扫描测试]-----

此测试将使用64个32位字的块。
该测试将仅应用一次。

使用0xFFFFFFFF 进行测试。
扫描测试:1、跳过:0、失败:0
使用0x00000000执行测试。
扫描测试:2、跳过:0、失败:0
使用0xFE03E0E2执行测试。
扫描测试:3、跳过:0、失败:0
使用0x01FC1F1D 进行测试。
扫描测试:4、跳过:0、失败:0
使用0x5533CCAA 进行测试。
扫描测试:5、跳过:0、失败:0
使用0xAACC3355进行测试。
扫描测试:6、跳过:0、失败:0
所有值均已正确扫描。

JTAG IR 完整性扫描测试成功。

---- [在 JTAG DR 上执行完整性扫描测试]-----

此测试将使用64个32位字的块。
该测试将仅应用一次。

使用0xFFFFFFFF 进行测试。
扫描测试:1、跳过:0、失败:0
使用0x00000000执行测试。
扫描测试:2、跳过:0、失败:0
使用0xFE03E0E2执行测试。
扫描测试:3、跳过:0、失败:0
使用0x01FC1F1D 进行测试。
扫描测试:4、跳过:0、失败:0
使用0x5533CCAA 进行测试。
扫描测试:5、跳过:0、失败:0
使用0xAACC3355进行测试。
扫描测试:6、跳过:0、失败:0
所有值均已正确扫描。

JTAG DR 完整性扫描测试成功。

[结束:德州仪器 XDS110 USB 调试探针]

此致、

Renan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Runan:

    您能否了解一下 JTAG 信号的路由? 如果从扫描控制器到 MCU 的总信号长度较长(>6")并且未正确端接、则 TCK 或 RTCK 上的反射可能会导致一些问题。  从 TDI、TMS 或 TDO 到 TCK 或 RTCK 的串扰可具有相同的效果。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Qj、

    你好。 请参阅以下我的客户回复:

    电路板上的 JTAG 布线长度为1.6-3英寸,因此使用4英寸调试电缆时,它们的长度将超过6英寸,但我无法使用该设置探测信号。 使用试验电路板的调试设置、现在总长度约为14英寸(xds110 -导线-探头-导线-电路板- MCU)、因此我切换到100kHz JTAG TCLK 频率。 这是示波器的设置。

     我使用的是10针连接器。 TMS 具有10k 上拉电阻。 TCK 有一个10k 上拉电阻器和一个100电阻器、其中22pF 电容器接地。 TDO 有一个22 Ω 终端电阻器。 RTCK 未连接。 nTRST 和 nRST (被上拉并连接到一个按钮)被连接。

     我在 TDO 上看到了一些失真,但它看起来不是很大,见下面的图片。 我假设如果进行了大量思考、测试连接将失败。 对于以下情况:黄色–TMS、绿色–TDI、蓝色–TDO 和红色–TCK。

    e2e.ti.com/.../6332.image.zip

    此致、

    Renan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="392209" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum 1127097/rm57l843-custom-board-dap-access-error-when 调试时出错/4183365#4183365"]已连接 nTRST 和 nRST (这被上拉并连接到按钮)。

    如果 nTRST 上有上拉电阻器、请移除上拉电阻器。 如果可能、请下拉电路板上的 nTRST?  

    信号波形对我来说很好。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 QJ、

    你好。 请参阅以下我的客户回复:

    设计/调试设置中的 nTRST 当前没有外部上拉或下拉。 根据我对数据表的理解、MCU 有一个内部下拉电阻器。 它是否需要10k 下拉电阻器? 我可以在分线板上添加一个、但根据示波器、默认情况下信号似乎为低电平。

    此致、

    Renan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Renan、您好!

    您可以使用 nTRST 的内部下拉。 项目模式(释放或调试)不应影响目标连接和通过 JTAG 加载的映像。 您是否在分线板和 MCU 板之间使用蓝色导线?  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 QJ、

    你好。 请参阅以下我的客户回复:

    我将使用跳线、其中几根是蓝色的。
    程序加载本身似乎正常、当器件上当前正在运行调试构建时、问题本身就会出现。 那么加载另一个程序或无法使用 CCS 调试模式变得困难。
    此致、
    Renan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="392209" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum 1127097/rm57l843-custom-board-dap-access-error-when -debuging/4186164#4186164"]则难以加载其他程序或无法使用 CCS 调试模式。

    JTAG 调试器能够中断代码执行、并在 MCU 运行代码时将固件加载到闪存中。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 QJ、

    你好。 请参阅以下我的客户回复:

    我不确定我是否理解您的说法。 给定 CCS 报告的错误消息、该功能在这些条件下无法正常工作。 根据其他线程和 Hercules 文档、在 JTAG 调试器不能中断代码执行的情况下、似乎存在其他情况。

    此致、

    Renan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Renan

    你是对的。 如果闪存中正在运行的代码使 CPU  反复进入异常状态、并且 CPU 无法进入调试状态。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 QJ、

    请参阅以下客户更新:

    以下是我用于测试 MCU 的示例代码:
    int main (空)
    /*用户代码开始(3)*/
      printf ("Hello World!\n");
    /*用户代码结束*/
      while (1);
      返回0;
    我不明白为什么这会产生连续异常状态、也不知道为什么它只在调试模式下发生。
    此致、
    Renan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Renan、您好!

    此 main()代码不会生成异常。 异常可能在_c_int00()函数中生成。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 QJ、

    请参阅下面的客户反馈:

    我尚未手动修改_c_int00、它是由 HALCoGen 生成的。 以下是函数代码:
    void _c_int00 (void)
    寄存器 resetSource_t rstSrc;
    /*用户代码开始(5)*/
    /*用户代码结束*/
      /*初始化内核寄存器以避免 CCM 错误*/
      _coreInitRegisters_();
      /*初始化堆栈指针*/
      _coreInitStackPointer_();
      /*复位处理程序:以下指令从系统异常状态寄存器中读取
       *以确定 CPU 复位的原因。
       *
    rstSrc = getResetSource();
      switch (rstSrc)
      {
        案例 POWERON_RESET:
    /*初始化 L2RAM 以避免在上电后立即出现 ECC 错误*/
    memInit_();
    /*添加条件以检查 PLL 是否可以成功启动*/
        如果(_errata_SSWF021_45_both _PLL (PLL_retries)!= 0U)
    /*将系统置于安全状态*/
    handlePLLLockFae();
    /*SAFETYMCUSW 62 S MR:15.2、15.5 "需要继续处理上电复位"*/
        调试复位情况:
        案例 EXT_RESET:
    /*用户代码开始(6)*/
    /*用户代码结束*/
        /*初始化 L2RAM 以避免在上电后立即出现 ECC 错误*/
    if (rstSrc!= powerON_RESET)
    memInit_();
    /*用户代码开始(7)*/
    /*用户代码结束*/
    /*用户代码开始(8)*/
    /*用户代码结束*/
    /*用户代码开始(9)*/
    /*用户代码结束*/
        /*启用 CPU 事件导出*/
        /*这允许 CPU 发出检测到的任何单位或双位错误的信号
         *通过其 ECC 逻辑访问程序闪存或数据 RAM。
         *
        _coreEnableEventBusExport_();
    /*用户代码开始(10)*/
    /*用户代码结束*/
        /*检查加电期间是否存在 ESM 组3错误。
         *这些可能发生在电子保险丝自动加载期间或从闪存 OTP 读取期间
         *在加电期间。 器件运行不可靠、不建议这样做
         *。 *
        if ((esmREG->SR1[2])!= 0U)
        {
          esmGroup3Notification (esmREG、esmREG->SR1[2]);        
        }
        /*初始化系统-时钟、闪存设置、带 Efuse 自检*/
        systemInit();
    /*用户代码开始(11)*/
    /*用户代码结束*/
        /*通过 Vic 控制器启用 IRQ 偏移*/
        _coreEnableIrqVicOffset_();
          
        /*初始化 VIM 表*/
      vimInit();
    /*用户代码开始(12)*/
    /*用户代码结束*/
        /*配置系统对发送给 ESM 组1的错误条件的响应*/
        /*可以从 HALCoGen 的"ESM"选项卡配置此函数*/
        esmInit();
    /*用户代码开始(13)*/
    /*用户代码结束*/
        中断;
        案例 OSC_failure_reset:
    /*用户代码开始(14)*/
    /*用户代码结束*/
        中断;
        案例安全装置复位:
        案例 WATCHDOG2_RESET:
    /*用户代码开始(15)*/
    /*用户代码结束*/
        中断;
      
        案例 CPU0_RESET:
    /*用户代码开始(16)*/
    /*用户代码结束*/
    /*用户代码开始(17)*/
    /*用户代码结束*/
    /*用户代码开始(18)*/
    /*用户代码结束*/
        /*启用 CPU 事件导出*/
        /*这允许 CPU 发出检测到的任何单位或双位错误的信号
         *通过其 ECC 逻辑访问程序闪存或数据 RAM。
         *
        _coreEnableEventBusExport_();
    /*用户代码开始(19)*/
    /*用户代码结束*/
        中断;
      
        案例 SW_RESET:
    /*用户代码开始(20)*/
    /*用户代码结束*/
        中断;
      
        默认值:
    /*用户代码开始(21)*/
    /*用户代码结束*/
        中断;
      }
    /*用户代码开始(22)*/
    /*用户代码结束*/
      _mpuInit_();
    /*用户代码开始(23)*/
    /*用户代码结束*/
      _cacheEnable_();
    /*用户代码开始(24)*/
    /*用户代码结束*/
    /*用户代码开始(25)*/
    /*用户代码结束*/
        /*初始化全局变量和构造函数*/
      __TI_auto_init();
    /*用户代码开始(26)*/
    /*用户代码结束*/
      
        /*调用应用程序*/
    /*SAFETYMCUSW 296 S MR:8.6. "启动代码(块范围内的库函数)"*/
    /*SAFETYMCUSW 326 S MR:8.2. "启动代码(库中 main 的声明)"*/
    /*SAFETYMCUSW 60 D MR:8.8 "启动代码(库中 main 的声明;仅为相同操作 extern)"*/
      main();
    /*用户代码开始(27)*/
    /*用户代码结束*/
    /*SAFETYMCUSW 122 S MR:20.11 "启动代码(需要存在 EXIT 和 ABORT)"*/
      EXIT (0);
    /*用户代码开始(28)*/
    /*用户代码结束*/
     
    此致、
    Renan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Renan、您好!

     在 getResetSource (void)函数和 sys_startup.c 中未正确处理软件复位 请修改代码以处理软件复位:

    1.将软件重置添加到 getResetSource (void):

    如果((SYS_EXCE异常 和(UINT32) SW_RESET)!=0U)则为其他

        RST_SOURCE = SW_RESET;

        SYS_EXception =(uint32) sw_reset;

    2.将 SW_RESET 移至第132行

    /*SAFETYMCUSW 62 S MR:15.2、15.5 "需要继续处理上电复位"*/
    调试复位情况:
    案例 EXT_RESET:

    /*用户代码开始(6)*/
    案例 SW_RESET:

    如果您的项目中未使用软件复位、这不会解决您的问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我在该启动函数中看不到任何其他问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 QJ、

    请参阅以下客户更新:

    我在 HL_SYS_STARTUP.c 的第132行中添加了 SW_RESET、并在第223行中注释掉了 SW_RESET。

     软件复位已包含在 getResetSource 中:

    resetSource_t  getResetSource ()

        寄存器 resetSource_t rst_source;

        

        if ((SYS_EXception &(UINT32) powerON_RESET)!= 0U)

       {

            /*上电复位条件*/

           RST_SOURCE = POWERON_RESET;

            /*清除所有异常状态标志并在通电后继续进行*/

            SYS_EXception = 0x0000FFFFU;        

        }

     

        否则 ( ((SYS_EXception &(UINT32) EXT_RESET)!= 0U)

        {      

            SYS_EXception =(UINT32) EXT_RESET;

            /***检查 EXT_RESET 的其它优先原因**/

            if ((SYS_EXception &(UINT32) OSC_failure_reset)!= 0U)

           {

                /*由于振荡器故障导致的复位。 在此处添加用户代码以处理振荡器故障*/

                RST_SOURCE = OSC_FAILY_RESET;

                SYS_EXception =(uint32) OSC_failure_reset;

            }

            如果  ((SYS_EXCE异常 和(UINT32)安全装置复位)!=0U)则为其他

           {

                /* 由于违反看门狗而导致的复位 */

                RST_SOURCE = 安全装置复位;

                SYS_EXception =(UINT32)安全装置复位;

            }

            如果  ((SYS_EXCE异常&(UINT32) WATCHDOG2_RESET)!=0U)则为其他

           {

                /* 由于违反看门狗而导致的复位 */

                RST_SOURCE = WATCHDOG2_RESET;

                SYS_EXception =(UINT32) WATCHDOG2_RESET;

            }

            否则 ( ((SYS_EXception &(UINT32) SW_RESET)!= 0U)

           {

                /*由于软件复位导致的复位。 *

                RST_SOURCE = SW_RESET;

                SYS_EXception =(uint32) sw_reset;

            }

                  其他

                 {

                         /*由于外部复位导致的复位。 *

                RST_SOURCE = EXT_RESET;

                 }

       }

        如果  ((SYS_EXCE异常 和(UINT32) DEBUG_RESET)!=0U)则为其他

       {

            /*由于调试复位请求导致的复位*/

            RST_SOURCE = DEBUG_RESET;

            SYS_EXception =(uint32) debug_reset;

        }

        否则 ( ((SYS_EXCE异常&(UINT32) CPU0_RESET)!=0U)

       {     

            /*由于 CPU0复位导致的复位。 CPU 复位可能是由 CPU 自检完成引起的、也可能是由切换 CPU 复位控制寄存器的"CPU 复位"位引起的。 *

            RST_SOURCE = CPU0_RESET;

            SYS_EXception =(UINT32) CPU0_RESET;

        }

        其他

       {

            /* 发生了 No_reset。 *

            RST_SOURCE = NO_RESET;

        }

        返回 rst_source;

    调试时、我继续收到错误-1170和-2064、但现在加载程序后出现新的错误框:

    这是否意味着现在正在触发 getResetSource 函数?

     

    此致、

    Renan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Renan、您好!

    每次加载程序时是否都会收到此消息? nRESET 或 nPORRST 是否解决了该问题?   

    您是否有繁重的工作区(大量大型开放项目)? 或其他一些后台任务正在运行。 您能否尝试清理工作区或项目以查看其是否有用?

    9.4以下链接中的常规 IDE:

    9.1.安装—Code Composer Studio 12.0.0文档

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 QJ、

    请参阅以下客户更新:

    我关闭了一些打开的项目,这对我的笔记本电脑资源没有什么影响(我有超过7 GB 的 RAM 和大约95%的 CPU 可用时间,所以这应该足够了)。

    我不会得到 GEL 表达式:每次运行时都出现 rstSrc 错误,但自从我进行了该更改后,大多数情况下都是这样。 ¾每1 μ s 次、除非我按下一个复位按钮。

    nRESET 会重新连接调试器(有点棘手,我必须正确定时)并将程序发送到 resetEntry,如下所示:

    但是、一旦我按下 START、错误将返回。 我可以单步执行一个位。 当它到达 getResetSource 时、行为变得有点奇怪。 如果我继续单击“Step into”,则可能会转到第484行->第490行->第484行。 它通常采用向前、向后、向前、向前的模式。 然后,当我回到 HL_SYS_STARTUP (rstSrc = getResetSource();)中的第113行并单击“Step into”时,DAP 错误再次开始,但下一行只是“switch(rstSrc)”,这将导致任何错误。 这是否表示它连续触发错误? 从示波器可以看到、外部没有 nRESET 或 nPORREST。

    nPORRST 给出以下错误:CortexR5:错误:(错误-242 @ 0x0)无法访问路由器子路径。 电路板配置文件可能不正确。 (仿真包9.6.0.00172)

     有人说这可能是时钟问题,但我没有使用外部振荡器,因此我将其设置为使用 LPO_HIGH:

    此致、

    Renan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Renan、您好!

    HF LPO 通常用作监控振荡器时钟频率的参考时钟、并在振荡器或 PLL 出现故障时用作 GCM 时钟源。  

    使用已修整的 HF LPO (9.6MHz)应该是可以的。