工具/软件:
您好:
我们目前正在使用 TMS570LS3137微控制器开发一个项目。 为此、我们采用 TMS570LS3137 Hercules 开发套件(HDK)。 在开发过程中、我们遇到了某些问题、请您注意。 我们非常感谢您为解决这些问题提供的帮助。
我们的项目使用 CAN 通信协议。 系统中的一个模块是 HMI 器件、需要通过 CAN 与 MCU 通信。 通过 PCAN 接口监控该通信。 两个节点都以100毫秒的间隔发送 CAN 消息。 每条消息都包含一个序列号、这样我们就可以检测到任何丢失的传输。
分配给 HMI 的 CAN ID 在数字上小于 MCU 的 CAN ID。 因此、当两个器件尝试同时发送时、HMI 在仲裁中胜出、并按预期获得对 CAN 总线的访问权限。
尽管通过 DCAN CTL 寄存器中的 DAR 位启用了"自动重新传输未成功消息"功能、但我们观察到消息缺失、如通过 PCAN-View 获得的图[00]所示。 数据字段右侧的第三个字节表示序列号。 虽然9A 预计将跟随99、但序列直接跳至9B、表示消息丢失。
在从 HMI 获取的日志(图[01])中、标记为"msg#:"的字段表示消息总数、而"panded msg#:"表示错过的消息数。 长时间的测试表明、错过的消息数量会随着时间的推移而增加。
从 CTL 寄存器禁用自动重传功能不会导致错误数量发生任何显著变化、如图[02]所示。
在这方面、我们想提出以下问题:
- 如何正确配置和操作自动重新传输功能?
- 在仲裁丢失的情况下、外设如何确保在总线可用后、挂起数据以正确的顺序重新传输?
- 除了自动重传之外、是否有任何其他外设级机制或配置可用于解决此问题?
下面提供了上述数字供您参考。
此致、
图[00]
图[01]
图[02]