主题:C2000WARE 中讨论的其他器件
工具/软件:
您好:
我在开发从闪存引导的自定义引导加载程序时遇到问题。 添加代码来支持分支似乎会导致我的固件更新函数失败、我怀疑 MCAN 模块中存在故障。 该问题表现为 MCAN 发送和接收的数据损坏。
引导加载程序配置为空闲、直到它通过 DCAN 从外部控制器(目前是 PC)接收到指令。 可能会被指示为 1) 通过 DCAN 接受新的固件更新、并通过 MCAN 传递新的固件更新到多个子模块(最多 10 个 f28003x)或 2) 以跳转到主应用程序。代码的固件更新部分是首先开发的、并已运行一段时间。
如上所述、当我为备选方案 2 引入代码时、就会出现问题。 我添加了一个握手环、以便在分支之前将 f28388D 和子模块置于分支就绪状态。 握手循环发生在主循环之后、其中包含对接收到的数据的检查、以确定 f28388D 是否应该输入其固件更新函数。 如果 f28388D 接收到分支命令、则程序会退出主循环并进入握手循环。 在我的程序中添加握手循环会导致固件更新失败。 也就是说、我可以省略握手循环并顺利执行固件更新、但如果我包含握手循环并且不对代码进行其他更改、则 MCAN 发送和接收的数据会损坏。 f28388D 中接收的 MCAN 数据与子模块发送的数据不匹配、子模块也看不到 MCAN 发送的某些消息。 这是通过在调试会话中运行两个程序并监控 Expressions 窗口中的数据确定的。
我想了解一下在添加与工作器件不相关的代码时、为什么我的固件更新代码或 MCAN 模块的行为会有所不同。
可能与此相关的其他问题:我的程序通常会在看似随机的时间卡在 CAN_initRam 中。 在我开始尝试包括此握手循环来控制分支之前、不会出现这个问题。 我还看到、每当我敲击断点或出于调试目的暂停程序时、MCAN 就会停止发送和接收消息。 我通常每次遇到断点时都需要重新启动程序、我觉得这很不方便。
谢谢、
Tom