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.

[参考译文] TMS320F280037C:C2000 CAN 引导加载程序问题

Guru**** 2902940 points

Other Parts Discussed in Thread: TMS320F280037C, LAUNCHXL-F280039C, TMS320F2800137

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1645344/tms320f280037c-c2000-can-bootloader-issue

器件型号: TMS320F280037C
主题中讨论的其他器件: LAUNCHXL-F280039CTMS320F2800137

背景: 目前我们正在 C2000 平台上实施 TI CAN 引导加载程序。 它将在 TMS320F2800137 和 TMS320F280037C 中使用。 正在使用 LAUNCHXL-F280039C 并使用 CCS 12.8.0.000012 进行测试。 我们使用 UCFlash 和 CCS 存储器浏览器工具、确保了闪存中的数据与十六进制数据进行传输。 CRC 验证也会执行以验证数据传输。  

问题描述: 目前我们面临的问题是引导加载程序没有跳转到应用程序代码。 对于故障排除、我们保留了 2 个 LED;一个在引导加载程序中、另一个在应用程序中用于检查状态。  

这是引导加载程序部分、用于处理应用程序启动。  


void CpuStartUserProgram (void)



void (* pProgResetHandler)(void);

if (FlashVerifyChecksum ()== BLT_false)



TI_setgpio_high ();

 DELAY_ms (100);

TI_setgpio_low ();

DELAY_ms (100);

返回;  

}

DINT;

IER = 0x0000;

IFR = 0x0000;

TI_TIMER_RESET();

 EALLOW;

//关键:重置堆栈指针

_asm(“ MOV SP、#0x400“);

//严重:清除状态位

_asm(“ CLRC INTM“);

__asm(“ RPT #7 || NOP“);

__asm(“ CLRC DBGM “);

EDIS;

//pProgResetHandler =(void (*)(void) CPU_USER_PROGRAM_STARTADDDR_ptr;

TI_setgpio_high ();

//__asm(“ lb 0x0008E20A“);

//pProgResetHandler();  
  __asm(“ RPT #7 || NOP“);

  
  asm(“ MOVL XAR7、ACC “);
  asm(“ LB *XAR7 “);

DELAY_ms (100);

TI_setgpio_low ()

}

//代码结束--

 

为了确认程序正在跳转到应用程序、我要使应用程序部分中 Launchpad (137) 开发板的 LED 闪烁。 但是、LED 不会闪烁且持续熄灭。

另一个观察结果是程序计数器卡在主函数的地址上。 这是通过 CCS 进行调试时观察到的。  

其他信息:  

在应用程序中配置了两个_c_int () 函数并尝试在我的 cpu_user_program_STARTADDDR_ptr 中调用这两个地址。 但是仍然没有初始化应用程序。

PC 0x08E235 程序计数器【核心】->应用程序端(单独测试)

PC 0x08490D 程序计数器【内核】->引导加载程序侧(单独测试)  

单独的测试意味着仅通过 JTAG 刷写来测试引导或应用程序

为了更好地理解、我还会附加链接器和映射文件。

Files_map_and_linker.zip 

如果您需要任何其他说明、请告诉我。

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

    您好:

    TI 通常建议分支到应用程序的 codestart(在您的情况下为 0x88000)。 在 _c_int () 函数中做了什么?  

    此致、
    马特

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

    您好 Matt、

    非常感谢您的快速响应。

    应用程序中的 codestart 确实是在发送给您的文件中完成的 0x88000。  在链接器中将_c_int () 函数配置为 FLASH_APP_STARTUP、开始后为 0x88002。

    我们对链接器配置不太熟悉、目前正在尝试学习。 如果您可以查看原始问题中附加的文件并确认配置是否正确、将会很有帮助。

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

    您好、

    请分支到 codestart 位置。 代码跳转到编译器运行时支持库中的 C 环境设置例程_c_int00、该例程会初始化变量并调用 main()。

    我还会注意到 引导加载程序和应用程序之间存在 RAMLS0 重叠。 请记住、如果尝试从应用程序分支回引导加载程序、如果上下文切换之间未正确初始化 RAM、则可能会出现问题。

    此致、
    马特

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

    您好 Matt、

    感谢您指出 RAM 重叠的问题 — 我们正在研究它。 同时、为了正确找出问题的根本原因、我们还希望调试应用程序。 我们通过将调试配置从“Program“更改为“Symbols Only“并构建应用来进行尝试。 我们仍然无法进行调试。 我们能够在进行编程和调试时进行调试。  

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

    这个问题很可能是由于 CCS GEL 文件 在仿真器连接时向 DSP 发出复位命令。 我建议按照  SPRACF0 的第 6 节非侵入式调试中的步骤 删除 GEL 复位调用、此调用可以让您在不中断器件运行时的情况下进行连接。

    此致、
    马特

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

    感谢您的更新。 现在就能进行调试了。 直到现在、我们通过在 8 位模式下查看内存来比较数据传输。 在 16 位模式下、我们看到额外的操作码以 MSB 的形式出现。 内联此设置、我们按如下所示更新了十六进制生成实用程序。 您能否确认是否正确?  

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

    您好:

    我在下一个星期三之前不在办公室。 请预计响应会延迟到那时。

    此致、

    马特