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.
我正在处理一个 使用了 tms320f2811的项目、我们在其中使用了 CAN 外设。 我的问题是如何检测 ECU 是否与 CAN 总线断开。
我们是否有任何寄存器来指示 ECU 是否与 CAN 总线连接。 我的应用想要知道 CAN 总线是连接还是断开。 我搜索了 CAN 驱动器和 CAN 收发器驱动器的文档... 但我无法获取有关该开路总线检测的任何信息。 收发器检测到短路错误、但未开路。
Nikhil、
我可以考虑以下方法:传输虚拟帧。 如果节点与总线断开连接、则不会出现 ACK。 这应该将 ACKE 位设置为 CANES、并且将 TEC 递增到128。 更多信息、请参阅 SPRS876中的调试提示。
您好、Haresh、
非常感谢您的回复。 我一定会介绍 SPRS876。 只有问题、我无法获得与此名称 SPRS876一致的任何文档。 请向我提供链接。
为清楚起见、我的要求是在 ECU 运行条件下、假设可能会断开连接。 该时间应用需要确定 CAN 处于开路状态。 我们可以在调试期间发送虚拟帧。 但在实际情况下、何时发送虚拟帧。 控制器是否具有相同状态位的任何想法。
只需确认先前对 TEC 计数器的反馈、就会增加到128。 我们在 CAN 开路情况下观察到的是 TEC 还是 REC、否则它不会进入总线关闭状态。 网上也有读数"根据 NXP 的说明、即使总线开路、CAN 控制器也能读回自己发送的报文。因此、不会出现发送错误计数的情况、 由于没有确认、只有接收错误计数才会增加。 因此、当 CANH 或 CANL 与网络断开连接时、不会发生"总线断开"。"
谢谢、
Nikhil
很抱歉提供了错误的文献编号。 它是 SPRA876 (http://www.ti.com/lit/an/spra876b/spra876b.pdf)。
我想您正在寻找一种功能、在节点与总线断开连接时、应用程序会自动收到通知、对吧? 即无需定期发送虚拟帧。 您可以使用超时机制来感应这种情况。 如果邮箱未在规定的时间范围内发送或接收、则可以生成中断。 当然,这并不能造成巴士长时间的“沉默”。 这可能不是您所期望的、但我无法想象节点与总线断开连接时应用程序会在何处自动发出警报。
关于误差计数器的递增、几年前我做了实验、我的回忆是 TEC 增加到128并在那里停止。 在这种情况下,节点不会进入脱离总线状态,这是正确的。
您好、Haresh、
感谢您提供的所有信息和支持。 文档真的很有帮助。
让人怀疑 TEC 是否在128处停止的任何其他情况。 REC 保持为0。 因为我想、如果我们能够在 一 段时间内直接读取 ACKE 位、然后 TEC =128、REC =0计数器、并得出状态为 CAN 开路或 HS 关闭的结论。
谢谢、
Nikhil
AFAIK、TEC 只因缺少 ACK 而在128停止。 这里的关键字是"stops (停止)"。 可能始终存在 TEC = 128且 REC = 0的瞬态情况。 我这么说是为了防止您认为您将持续读取这些寄存器来确定您感兴趣的错误条件。 您知道您也正在检查 ACKE、但是如果它早已设置好、并且代码未清除标志、该怎么办?
需要考虑的另一点是:我不知道您的网络配置。 特别是是否始终存在节点以提供 ACK。 如果没有节点提供 ACK 会怎样? 这是一种真确的情况、TEC = 128、ACKE = 1、但您的 F2811节点与总线的连接非常紧密?
要说明的是,您不希望应用程序错误地确定您的节点不再连接到总线,而真正的原因可能是总线上没有其他节点提供 ACK。
您好、Haresh、
很抱歉耽误你的回答。 不在办公室、无法访问电子邮件。
是的、控制器与总线的连接非常紧密、其中连接了两个以上的节点。
在我的情况下、只有我在寻找 HS CAN 下降的方式、我的 ECU 应该按照要求正常运行。
供应商甚至提供了完整的 CAN 驱动程序、因此我现在可能需要与他们一起检查是否可能存在邮箱逻辑(确定时间段没有 Tx-Rx)。
无论如何、感谢您的支持、与您交谈真的很愉快!
请告诉我、如果您看到是否存在其他可能性。 我想控制器已经为这种情况存储了一些位信息。
谢谢、
Nikhil
否、没有位可帮助确定节点是否连接到总线。 您必须依赖我之前介绍过的方法(注意相关节点可能仍会连接到总线、但总线上没有其他节点能够进行堆叠)