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.

[参考译文] TMS320F28379D:TMS320F28379D:引导 ROM 和看门狗、CAN 可兼容性

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

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1549122/tms320f28379d-tms320f28379d-boot-rom-and-watchdog-can-compability

部件号:TMS320F28379D
Thread 中讨论的其他器件:SysConfigC2000WARE

工具/软件:

您好:

是我,又是我。

我关闭了这个问题、因为解释非常清楚(非常感谢)

所以,我开始把它包括在我的项目中,但它不起作用。 为什么? 我的工程包括 CAN 功能。 因此、我加入了已解决的相同示例、但可以添加。

下面我来解释一下会发生什么情况:

1) 该工程与之前相同、但我在 SysConfig 中添加了一个 CAN 外设。 我不会使用它。 我只希望工程在 board.c 中初始化此外设:

2) 我启动一个包含闪存配置的调试会话。 因此、当 CPU2 将复位时、不会擦除 RAM 中的代码、这对代码启动很有用

3) 在运行每个内核之前、我启动脚本 emu_boot_flash、并检查在地址 0xD00:

(CPU1)

(CPU2)

3) 设置变量 uint16_Freeze 时、CPU1 进入无限 while 循环、看门狗的 ISR 会请求 CPU1 和 CPU2 复位:

4) 我在调试会话中看不到任何错误消息,但我清楚地看到程序不再运行

如果我将 CPU2 设置为暂停状态、则可以看到程序在 CAN RAM init 函数中被阻止:

我想问题与 RAM 擦除有关。

有人能告诉我到底有什么错吗? 是否会在独立配置中发生? 如何在调试会话中测试看门狗功能?

谢谢你。

e2e.ti.com/.../2025_5F00_08_5F00_04_5F00_TISupport.zip

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

    尊敬的 Vincent:

    让我跟看门狗专家谈谈这一点。

    此致、

    Delaney

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

    您好、

    CPU1 WDRSn 会导致 XRSn。

    CPU2 WDRSn 只是导致 CPU2 复位。

    XRSn 是否清除 0xD00、我们需要进行检查。 在 XRSn 置位时、BootROM 会在之后运行、因此需要逐步执行并确认相同的操作、将线程重新分配给 BootROM 专家。

    独立配置不依赖于 0xD00、独立配置中的引导模式由引导模式引脚或 OTP 配置决定。

    谢谢

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

    你好 Prarthan、

    我很抱歉,我在你的消息之前回答了你,但我看不到我的消息。

    让我再解释一下。 也许您可以去看看原始问题。 我知道复位处理过程。 一位同事帮了我很多。

    但是,你可以看看我的档案,或者也许只是读一下,如果我的程序的开头包含 RAM 初始化 (for CAN) 会发生什么情况。

    我预计 RAM 的擦除是在此初始化之前完成的、但似乎这两个操作之间存在冲突。

    我在两天的假期,两个星期。 所以,如果你不让我下个星期,不要惊讶,我不给你一些消息。 这个问题对我来说真的很重要,我会在我回来的时候管理它。

    Vincent

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

    尊敬的 Vincent:  

    为了让你保持最新:我明天会看看它,看看我是否可以复制。  

    此致、

    马特

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

    尊敬的 Vincent:

    我观察到 CPU2 存在相同的 CAN 初始化问题。 我通过在 IPC 同步后移动 CPU2 工程中的“board_init ()“函数调用来解决问题。 这样、CPU1 就可以在同步之前将 CAN 外设正确连接到 CPU2。  

    此致、

    马特

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

    您好 Matt、

    感谢您花时间测试存档。 解决方案的工作原理。

    你能告诉我为什么吗? 在电路板初始化之后放置 IPC_SYNC 函数似乎有更多的逻辑、以便在两个内核之间实现更好的同步、这种方式确实可以在不出现看门狗问题的情况下正常工作。

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

    您好:

    我很高兴该解决方案也适用于您。

    CPU1 需要将 CAN 模块分配给 CPU2、然后 CPU2 才能对其运行。  内核分配到外设只能 在 CPU1 中完成。  IPC 同步可确保在 CPU2 使用 board_init () 开始初始化模块之前、将 CAN 模块正确分配给 CPU2 作为所有者。

    如果这有道理、请告诉我。  

    此致、

    马特

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

    您好 Matt、

    这对我来说是有意义的,但我仍然想知道为什么在第一次开机时每件事都是好的。

    由于它已经消掉了 CAN 的 RAM 初始化、我认为这是 CPU1 对 CPU2 复位的副作用。

    所以我做了一个测试:  

    -在 ipc_sync () 函数之前,让 CPU2 中的 board_init ()

    -我只是在  board_init () 之前延迟

    因此、当 CPU1 复位时、在 CPU2 尝试初始化 board_init () 中的 CAN 存储器之前、有时间将 CAN 模块分配给 CPU2。

    它是有效的。

    因此、我的结论是 CPU2 在上电时的复位/唤醒速度比 CPU1 请求时的复位速度慢

    我可以问你同样的问题:

    如果这有道理、请告诉我

    感谢你的帮助。

    Vince。

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

    您好 Vince、

    很有道理。   

    通常将 board_init () 置于同步机制(在 C2000Ware 示例代码中)之后的原因是在初始化期间消除 CPU1 和 CPU2 之间可能存在的竞态条件。 在 CPU2 调用 board_init () 之前添加延迟会增加该裕度、但无法完全解决问题。

    此致、

    马特

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

    谢谢 Matt