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:CANbus 闪存内核查询

Guru**** 2529560 points
Other Parts Discussed in Thread: C2000WARE, SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1564138/tms320f28p650dk-canbus-flash-kernel-inquiries

器件型号:TMS320F28P650DK
Thread 中讨论的其他器件:C2000WARESysConfig

工具/软件:

您好、

我目前正在尝试使用 P65x 让 CAN 闪存内核正常工作、以便远程固件更新。 我已经成功执行了针对 C2000 微控制器的 CAN 闪存编程中的所有步骤、但遗憾的是、无法让闪存内核正常工作。 在我想澄清的过程中、我有几个点不确定。

1.我使用了示例 dcan_flash_kernel_c28x_dual_ex5 工程、并在闪存内核 main 内将下一行修改为我的配置

  返回 DCAN_Boot (CAN_BOOT_ALT3、0、1、25、5、 Application_Flash_Banks、
           WE_Protection_A_Masks、WE_Protection_B_Masks、WE_Protection_OTP_Masks);
CAN_BOOT_ALT3 将内核上的 CAN 引脚移动到 GPIO36 + GPIO37、这是我在定制电路板上使用的功能。 请注意、我还有一个 25MHz XTAL
在该内核设置中、是否需要在器件上对 OTP 寄存器进行编程、以便也运行该寄存器? 在 P65x TRM 中、表 4-49 提到应将值 0x62 编程到 Z1-DEF OPT-BOOTDEF-LOW + Z2-DEF 处的 BOOT_DEF 存储器中 OPT-BOOTDEF-HIGH。 我没有对它们进行编程、因为我想验证内核是否正在运行。 我是否需要在构建内核的同时对它们进行编程?
2.为了使其正常工作、我保留在默认的引导引脚 (GPIO84 + GPIO72) 上。 我目前有一个拨动开关、需要手动切换以进入和退出闪存+ CAN 引导模式。 只是确认这是有效的。 我最终将更改为 SPRACN1“ C2000 软件控制的固件更新“中类似的设置、因此此设置将自动执行。
3.我已经确认我的 CAN 线路良好,我没有使用 PEAK PCAN-USB Pro FD CAN 总线分析仪,而是使用常规 PCAN-USB。 我假定 API 在 PCAN 上是通用的、所以内核应该仍然工作? 不确定这是否有效。
我能够按照 CAN 闪存编程指南中的说明进行编程、该指南以详细模式告诉我已加载内核+为我所做的一些示例闪烁的工程加载了应用程序。 但是、在复位器件并移回闪存引导后、我的旧程序仍然保留在闪存中、这意味着内核绝不会加载到 RAM 中以清除闪存组 1-5。
请提供有关这些问题的任何信息!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Ayden:

    F28P65x 器件上有 DCAN 模块和两个 MCAN (CAN-FD) 模块。   GPIO36 和 GPIO37 均映射到 DCAA 和 MCANA RX/TX。 您可以使用哪些设备?

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

    我打算使用 DCAN、因为 TRM 的 ROM 引导加载程序部分表明您必须使用每个通信端口的模块 A 才能执行固件更新。 P65 数据表第 297 页中的 CAN 引导表指示只有 GPIO36 + GPIO37 是 DCAN 的模块 A(作为选项 4)。

    谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    为了使其正常工作、我保留在默认引导引脚 (GPIO84 + GPIO72) 上。

    GPIO84 和 GPIO72 用于选择 ROM 引导模式:SCI、CAN 或闪存等  

    关于哪些引脚用于 CAN 引导、请对 EMU-BOOTDEF-LOW 进行编程 0x0D04。 请参阅器件 TRM 的表 4-17 和应用手册“sprad51a_can_pdf.pdf"<xmt-block0>“ Flash_Programming

    6.在仿真模式下、需要设置以下存储器位置以启用 CAN 引导模式:a.带 0xFFFF 的位置 0xD00 b.带 0x5AFF C 的位置 0xD01。带 0x00XX 的位置 0xD04、其中 XX 是 CAN 引导的引导模式:0x02、0x22、0x42 或 0x62。 0x82、0xA2、0xC2 和 0xE2 的 SENDTEST CAN 引导模式分别使用与前四种配置相同的引脚、并且它们还发送两个 CAN 帧。 在评估模式下、使用其中一种 SENDTEST 模式可确保 CAN 模块在主机开始发送闪存内核之前不会超时。 要了解有关 SENDTEST 模式的更多信息、请参阅 C2000Ware 中的 DCAN 引导源文件 (C2000Ware_x_xx_xx_xx > driverlib > f28003x > examples > flash > DCAN_Boot.c)。

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

    只需确认我正在写入此 ROM 并正确执行复位。

    我之前已将这些地址写入 CAN 闪存编程文档中所述。 接下来还有几个问题。

    1.在 P65x 的 dcan_flash_kernel_c28x_dual_ex5 示例工程中、是否需要对程序进行修改、或者这些临时 OTP 仿真是否涵盖让基本闪存编程器运行所需的所有配置?  

    2.我注意到 dcan_flash_programmer 可执行文件在详细模式下会告诉我加载了内核+应用程序、无论我是否在总线的另一端连接了器件、我认为通信是自动确认的、如果编程器实际上可以看到我的器件、是否有办法使用另一个实用程序进行测试?

    3、在工程内部,我直接在这个语句后放置一个断点

      //
      //等待邮箱 1 中接收新的 CAN 消息
      //
      while ((HWREG_BP (CANA_BASE + CAN_O_NDAT_21)& CAN_MSG_OBJ_1)!= CAN_MSG_OBJ_1)
        {
        }
     
    但是、甚至可以在这个 while 循环永远不会退出时使用逻辑分析仪验证某些消息。 我想知道为 DCAN 设置这些引脚的配置中是否缺少一些内容(如您所说的,GPIO 36 + GPIO 37 可用于 MCAN + DCAN)。
    再次感谢您的帮助
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我将再次检查该模式是否支持应用中使用的 DCAN 引脚。 下午会回来的。

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

    只是在进一步调查之后的一个跟进。

    我已经对 EMU_BOOTDEF_LOW (0xD04) 进行了编程、以将 GPIO 配置移动到 GPIO36 + GPIO37。 我已经调查了一点、发现我当前的硬件与当前内核的位时序不匹配。 我手动更改 GPIO 切换引脚、所以只保留了 D00 和 D01。

    下面我将在内核调用内部传递到 DCAN_BOOT

    CAN_BOOT_ALT3 ->作为引导模式

    bitTimingRegValue = 0x7FC0(我在 25MHz XTAL 和 BITTIME = 25 条件下以 1Mbps 获得的数学运算)。 根据 TRM、CALC_CANCLK 是未预分频的 CAN 时钟的值、我假设它是 XTAL(当我添加 SysConfig 时,时钟树不会显示为选项,因此这是一个假设)。

    我有一个跟进问题、取自 C2000 的应用加载 CAN 闪存编程的 sectioin 4.1.2 第 2 点

    2.闪存内核以每帧 2 字节的数据传输到设备。 主机编程器将帧传输到器件、检查数据字节 3 和 4 是否为非零值。 文本文件的字节 3 和 4 必须替换为根据位时序寄存器值 (CAN_CALC_BTRREG) 的最终结果计算出的十六进制值、顺序为最低有效字节后跟最高有效字节。 如果主机编程器识别出字节 3 和 4 的位时序更改、则主机编程器会将位时序更改发送到器件并重新初始化自身(跳过以下 7 个保留字)。 器件会将比特率增加到所需的位时序、并继续接收帧、直到内核完成下载。

    您能否确认这是我生成的内核文件中唯一需要更改的字节? 这是为了与 can_btr 寄存器匹配。

    再次感谢  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我要手动更改 GPIO 切换引脚、因此我只剩下 D00 和 D01。

     EMU-BOOTPIN-CONFIG 用于选择引导引脚。 它位于 0xD00。 其高位字节[31:24]必须为 0x5A、位[7:0](BMSP0) 与位[15:8](BMSP1) 设置要在引导期间使用的 GPIO。 用例中、BMSP0 为 36 (GPIO36)、BMSP1 为 37 (GPIO37)。

    地址 0xD04 处的值用于定义引导模式和引导选项。 对于 CAN 引导、位[3:0]为 0x2。

    您能否确认这是我生成的内核文件中唯一需要更改的字节? 这是为了与 can_btr 寄存器
    匹配

    内核中的 CAN 时钟可能不是晶体时钟。 它可以是 20MHz 或 25MHz(在 ex_5_bootloader_can_timing.h 中定义) 请查看您使用的示例。

    BYTE3=0xC0 --> SJW=3、BRP=0;

    BYTE4=0x7F --> TSEG1=15 且 TSEG2=7。

    如果 CAN 时钟为 25MHz、则波特率将为 25MHz /(25)= 1mbps