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.

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

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

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

器件型号: TMS320F28P650DK

尊敬的 TI:

我尝试使用 F28P65X LaunchPad 板上的 CAN 引导加载程序功能刷写仅 CPU1 的应用程序映像。 我正在使用 TI 示例工程:“dcan_flash_kernel_c28x_dual_ex5“。 我正在使用 PCAN 标准 USB 器件、其中 GPIO4/5 用于 CANA TX/RX。

以下是我的方法:

1.使用板载开关 S3 将 GPIO72 设置为高电平、将 GPIO84 设置为低电平。

2.使用板载开关 S4 至 XCVR 将 CANA 引脚 (GPIO4/5) 通过收发器 (U15) 连接到 J14 上的接头引脚。

3.将 J14 引脚高/低/接地连接至 PCAN 标准 USB(使用 120 欧姆端接)。

4.转至“device.h“并修改第 270 行和第 271 行以启用 INTOSC。 具体如下:  

//#define USE_PLL_SRC_XTAL
#define USE_PLL_SRC_INTOSC

5.转至“flash_kernel_ex5_can_flash_kernel.c“、并修改第 92 行以禁用 XTAL。 具体如下:  

return DCAN_Boot(CAN_BOOT_ALT1_SENDTEST, 0, 0, 25, 5, Application_Flash_Banks,
                     WE_Protection_A_Masks, WE_Protection_B_Masks, WE_Protection_OTP_Masks);

6.编译工程并进入调试/仿真模式。

7.转至“dcan_flash_kernel_c28x_dual_ex5.txt“、并修改字节 3 和 4 以匹配 CAN_BTR 寄存器。 该 txt 文件的前 4 个字节如下:

AA 08 C0 7A

8.转至“Memory Browser“、将位置 0xD01 的高字节修改为“5A“、然后将位置 0xD05 的低字节修改为“22“。 这应选择 GPIO4/5 作为 CANA TX/RX 引脚。 如下图所示。

0x00000D00    22E8 5A5B DB0E 4FD0 B28E 6A22

9.使用 XRSn 按钮复位 F28P65X LaunchPad 板、然后按 CCS Debug 中的“Resume“按钮。 此器件现在处于 CAN 引导模式。  

10.在 cmd 窗口中运行以下命令:  

"C:\ti\C2000Ware_26_00_00_00\utilities\flash_programmers\dcan_flash_programmer\dcan_flash_programmer.exe" -d f28p65x -k "C:\Users\f799267\workspace_v12\dcan_flash_kernel_c28x_dual_ex5\LAUNCHXL_CPU1_RAM\dcan_flash_kernel_c28x_dual_ex5.txt" -a "C:\GIT\application.txt" -v

等待内核和应用程序加载完毕。

11.将 GPIO84 和 GPIO72 切换为高电平以从闪存引导新的应用程序、并使用 XRSn 按钮复位 F28P65X LaunchPad 板。


我面临的问题是无法加载我的应用程序。 我相信内核本身已被发送到 CPU、因为在 CCS“Registers View“上、我可以看到、随着 cmd 窗口可执行文件正在运行、“CAN_BTR“会从 0x7FC7 实时更改为 0x7AC0(更改为 1Mbps)。 该函数还成功擦除任何现有闪存。

内核加载后、CPU 尝试发送和接收一些测试字节 (DCAN_Boot.c 中的函数 DCAN_SendWordData)。 使用范围、我无法看到从 GPIO4/5 发送这些消息。 我可以看到可执行文件从 PCAN 向 CPU 发送字节、但 CPU 似乎无法检测到字节。 这就是它在以下 while 循环上挂起的原因:

while((HWREGH(CANA_BASE + CAN_O_TXRQ_21) & CAN_MSG_OBJ_2) == CAN_MSG_OBJ_2)
    {
    }

似乎 CPU 一直在等待它从不检测到的 CAN 消息。  

我已通过单独的测试验证 CANA 是否通过收发器与 GPIO4/5 配合使用。 我也是 512 位、通过使用“align (32)“修改其链接器文件来对齐应用程序映像

您能提供建议吗?

谢谢、Samuel。

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

    您好:

    return DCAN_Boot (CAN_BOOT_ALT1_SENDTEST、0、0、25、5、 Application_Flash_Banks、 WE_Protection_A_Masks、WE_Protection_B_Masks、WE_Protection_OTP_Masks);

    您是否尝试过 在 DCAN_Boot () 调用中将 ENABLE XTAL 位保持为“1“? 不需要更改此值、尤其是因为内核的比特率高于 ROM 引导加载程序。

    此致、
    马特

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

    尊敬的 Matt:

    谢谢、这解决了这个问题!

    Samuel