[CAN Bus]有关 CAN 总线 通讯可靠性的 N个问题

目录

 

第1问:总线中有若干节点,若某节点发送一帧报文且被ACK,那么能保证总线上所有节点都收到了这帧报文吗?

第2问:当总线中一节点接收到一帧报文,且这帧的仲裁域(ID)与接收节点的过滤器不匹配。也就是说接收节点并不会将这帧数据放入接收fifo或者rx mail box。那么这个接收节点会在这帧的ACK slot发送显性位吗?

第3问:设置为只听模式(listening only or silent mode)的节点,在接收到报文后,会发送ACK或错误帧吗?

第4问:如何在CAN总线中跑满理论最大负载?


第1问:总线中有若干节点,若某节点发送一帧报文且被ACK,那么能保证总线上所有节点都收到了这帧报文吗?

答:不能,只能保证至少一个节点应答了这帧报文。

 

第2问:当总线中一节点接收到一帧报文,且这帧的仲裁域(ID)与接收节点的过滤器不匹配。也就是说接收节点并不会将这帧数据放入接收fifo或者rx mail box。那么这个接收节点会在这帧的ACK slot发送显性位吗?

答:会的,只要接收节点计算这帧crc正确,那就会发送ACK的,即使软件层面不会收到这一帧。

 

PS: 第1问和第2问可以说明,在CAN总线上发送报文,没有办法在链路层保证报文一定被所有节点可靠接收,必须通过上层协议设计应答机制。

 

第3问:设置为只听模式(listening only or silent mode)的节点,在接收到报文后,会发送ACK或错误帧吗?

答:不会。(理论上,只听模式下CAN控制器可以认为它的TX与收发器的TX已经被断开,只有RX可以接收总线上的信号)

NOTE:作为监控记录或抓包设备(CAN分析仪记录仪等)的节点一定要处于只听模式,否则会引入监控设备的发送信号(ACK或错误帧等)。

 

第4问:如何在CAN总线中跑满理论最大负载?

答:利用CAN控制器发送的重发机制。除了发送节点以外,将所有其他节点设置为只听模式。再用发送节点发送一帧远程帧(远程帧最短,每秒发送帧数可以达到最大),将不会有节点应答ACK,CAN控制器将启用重发机制,在链路层持续重发该报文。每秒报文数可以达到该波特率下最大值。(硬件重发机制,相邻报文波形之间几乎不存在延时)

PS: 可以用这个方式测试CAN设备的最大接收能力。在1M波特率下大部分USB-CAN设备在这种负载下都会丢包,可以用逻辑分析仪进行抓波形并统计每秒实际发生的报文数量。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章