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.

[参考译文] TMS320F280039C:DCAN 引导加载程序问题

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1589032/tms320f280039c-dcan-bootloader-issue

器件型号: TMS320F280039C

您好团队

客户实现了与自定义控制卡上的 SDK dcan_kernel 示例相同的基于闪存的 DCAN 引导加载程序内核。

主 FW (bank0、bank1) 基于特定的 CAN 消息切换到使用 LB 进行应用程序更新的内核 (bank2、0xa8000)。

CAN 比特率设置为 500kbs、并且 flash_progammer 已修改为仅发送应用程序。

如果 switchToXTAL(内核)设置为 1、则该过程通过从主固件切换到内核来成功运行。但 这需要在调试器端的最短 SLEEP_TIME 为 75ms。 否则、CAN 帧已损坏或丢失。这会导致总时间为 8 分钟

如果 switchtoXTAL 设置为 0。 内核能够以非常少的 SLEEP_TIME (10ms) 加载新应用程序、但仅在内核直接从 CCS 加载时工作。在这种情况下、如果我们从主 FW 切换到内核、内核会卡在 DCAN_ReadMessage () 上。

控制卡中使用的外部晶体是 10MHz。 内核工程使用 device.h 中定义的 INTSOC2

如果您需要任何其他信息、请告诉我

期待您对上述两个问题的意见。

此致、

Rupesh Yadav  

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

    尊敬的 Rupesh:

    更改时钟源和比特率可能会影响您的 CAN 位时序。 您能否确认 bootloader_can_timing.h 中的 CAN_CALC_bitrate、CALC_CALC_CANCLK 和 CALC_CALC_BITTIME 值正确?

    此外、还有几个其他澄清问题:

    1. switchToXTAL 何时设置为 0?

    2.您认为内核直接从 CCS 加载是什么意思? 加载它的正常方式是什么?

    此致、

    Alex

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

    您好 Alex、

    以下是基于 10MHz 晶体且适用于 500Kbps 的时序参数

    #define CAN_CALC_bitrate 500000U
    define CAN_CALC_CANCLK 10000000U
    #define CAN_CALC_BITTIME 20U。

    1. switchToXTAL 何时设置为 0?

    它会传递到 DCAN_Boot (CAN_BOOT_ALT3、0、 1. ) 作为 0 或 1。

    2.您认为内核直接从 CCS 加载是什么意思? 加载它的正常方式是什么?

    内核  通过 CCS 加载功能加载到 FLASH_BANK2_SEC8_15:origin = 0x0A8002、length = 0x007FED。

    我的意思是、如果内核被加载到设备中、设备将直接 运行内核、而无需先运行主固件。

    引导过程成功。 在 这种情况下、主固件没有跳转到存储的内核、而是直接引导到内核的器件

    让我 重新表述这两个内核版本的行为、以提高清晰度

    V1:XTAL 作为 CAN 的源: DCAN_Boot (CAN_BOOT_ALT3、0、 1. )

    • 通过允许主固件长分支到内核、然后加载新映像、可以成功实现这一目标。
    • 然而、这需要最小的帧延迟 (SLEEP_TIME) 为从编程器端传出的 75ms 延时时间、从而显著提高 时间限制在 8 分钟左右
    • 如果延迟进一步减少、损坏以及接收到不完整的数据、CAN 无法接收正确的数据

    V2:不切换到 XTAL: DCAN_Boot (CAN_BOOT_ALT3、0、 0 )

    • 从主 FW 长分支到该内核:内核卡在 DCAN_readMessage () 上
    • 但是、如果使用此内核直接将器件置于调试/独立模式(不需要 LB 形式的主 FW)
      • 这样便可以成功加载新的固件 最小帧延迟 10ms

    这两种情况下、所有时序参数以及其他配置都是相同的。

    此致、

    Rupeh

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

    尊敬的 Rupesh:

    对此处延迟的回复表示歉意。

    帮助我了解您的 V1 要点 2 — 要求编程人员侧的最小帧延迟为 75ms。

    什么定义了这一要求?

    此外、要点 3 — 如果延迟进一步减少,CAN 无法接收正确数据。

    这是如何测试的?

    我使用下面随附的 CAN 位计时计算器进行了快速分析、以便进一步分析。

    /cfs-file/__key/communityserver-discussions-components-files/171/Copy-of-CAN-Bit-Timing-Calculator.xls

    这表示位时间 (Tq) 为 10(而响应中显示的时间为 20)。 您能否根据计算器确认针对预期 CAN 总线通信的时序参数正确?

    此致、

    Zackary Fleenor

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

    尊敬的 Zacakary:

    感谢您的回复,希望离线解决此问题,以便更快地解决问题。

    我已经为此向您发送了一封邮件。

    感谢您的理解!