建设网站深圳市,商城网站不易优化,wordpress 新建分类目录,男孩子怎么做网站赚钱CAN多设备通信收不到某设备数据的问题及解决 遇到的问题问题的发现CAN总线的一般冲突机制STM32中的CAN冲突机制 遇到的问题
问题的发现
最近在开发Canopen项目中#xff0c;进行一主多从设备通信时#xff0c;主站发送同步帧#xff0c;两个从站往往只有帧ID优先级高的设备… CAN多设备通信收不到某设备数据的问题及解决 遇到的问题问题的发现CAN总线的一般冲突机制STM32中的CAN冲突机制 遇到的问题
问题的发现
最近在开发Canopen项目中进行一主多从设备通信时主站发送同步帧两个从站往往只有帧ID优先级高的设备可以让主站接收到数据而另一个从设备的数据往往接收不到。但当我关闭其中一个can从设备另一个就可以和主站设备通信正常。经过排查发现是由于Can的冲突解决机制的问题。 在CAN多机通信中两个设备同时发送数据帧ID优先级高的CAN设备会“抢占”总线而另外的设备需要选择冲突解决策略。
CAN总线的一般冲突机制
非破坏性抢占机制Non-Destructive Arbitration CAN 使用一种非破坏性的仲裁机制这意味着当两个节点同时发送消息时通过识别消息标识符中的位的值来确定哪个消息具有更高的优先级。具体来说CAN总线上的每个节点都会根据其消息标识符的比特值来判断是否能够“抢占”总线。标识符比较 在CAN总线上每个节点在发送消息之前会监测总线上的信号电平。如果一个节点正在发送1而另一个节点正在发送0那么正在发送1的节点会发现冲突并会停止发送消息。这种标识符比较机制有助于节点在发送消息时检测冲突并进行冲突解决。仲裁场Arbitration Field CAN消息包含一个仲裁场它包含消息标识符。在这个字段中CAN节点通过比较消息标识符中的位来决定哪个节点具有更高的优先级。较低优先级的节点将会自动停止发送并等待较高优先级的节点完成其消息的发送。回退机制 如果多个节点尝试同时发送消息冲突解决后较低优先级的节点会等待一段随机时间后重新尝试发送消息。这种回退机制有助于减少冲突的再次发生提高总线的效率。
总的来说CAN总线的冲突机制通过使用非破坏性的仲裁和标识符比较以及回退机制确保了多个节点之间的有序通信使得总线上的消息能够按照优先级顺序进行传输。这种设计使得CAN总线非常适用于要求实时性和可靠性的应用例如汽车控制系统。
STM32中的CAN冲突机制
我们在进行CAN的多机通信时往往希望不会丢帧。遇到CAN总线冲突时受阻的CAN从设备进行自动回传是我们需要的。而打开冲突回传只需要在CAN初始时对AutoRetransmission 进行使能。
hcan1.Init.AutoRetransmission ENABLE;AutoRetransmission 是用于配置CAN控制器的自动重传Automatic Retransmission功能。在CAN通信中当节点发送消息但未收到确认时可以选择是否自动进行重传。当 AutoRetransmission 被启用ENABLE时如果CAN控制器未收到确认则会自动重传先前的消息。这有助于提高消息的可靠性特别是在有可能发生干扰或冲突的环境中。当 AutoRetransmission 被禁用DISABLE时如果发送的消息未收到确认控制器将不会自动进行重传。在这种情况下需要由软件来处理重传逻辑开发者可以通过程序来控制何时以及如何进行重传。 公众号物联网知识 抖音号物联网知识