发现这个问题没有人正确回答,是不是太简单了?但初学者可能多少都会有这个疑惑,现在我来试着回答一下,看看对不对,对着您点赞,不对请斧正。
首先,在链路层,CAN指令发送不是针对总线上某个设备的(针对某设备是应用层解决的问题),而是针对整个网络的,网络上只要有一个设备接收不成功,就会在应答位上显现出来,将此次的发送否决掉,于是连带整个网络的设备都会否决该帧指令,此时发端可以重发,直到某次被全部设备正确接收,也就是说发端的正确发送是针对整个网络的正确发送,每一个设备都必须正确接收了。
因此当你发出的指令成功后,说明当前所以在线设备都收到了正确的指令,包括你想传递的那个设备在内。
当发出的指令失败,对所有在线设备都是失败的,没有一个是成功的,因为至少有一个在线设备通过应答位实行了“一票否决权”。
这就是CAN总线可靠传输的机理。