本专辑是依照瑞萨公司《CAN入门书》的组织思路来学习CAN通信的相关知识,并结合网上相关资料以及学习过程中的领悟整理成的笔记。希望对初学者有所帮助。
在讲述五种帧结构的过程中,穿插讲述CAN总线的通信机制。
一条CAN总线上有Node_A 和 Node_B两个节点,在总线空闲时,总线上为隐性电平,就在这个时候Node_A 和 Node_B 这两个节点同时向总线上发送数据,如下图:
在Node_A获取总线的发送权之后,Node_A接着发送自己的Msg_A,因此在竞争总线的过程中不会对Msg_A的传输造成延时;
在两个节点竞争总线的过程中,不会破坏Msg_A;
Substitutes for Remote Requests Bit(替代远程请求位),在扩展帧(数据帧或遥控帧)中,SRR恒为隐性位1,并且可以发现,扩展帧的隐性SRR位正好对应标准帧的显性RTR位,这就解释了 SRR位的作用:在前11位ID号相同的情况下,标准数据帧的优先级高于扩展数据帧;
RTR:保证数据帧优先级高于遥控帧;
SRR :保证标准数据帧的优先级高于扩展数据帧。
IDE :保证标准遥控帧的优先级高于扩展遥控帧。
标准帧中IDE位对应扩展帧中的IDE位,保证在前11位ID号相同的情况下,标准帧的优先级一定高于扩展帧;
然后是保留位r0和r1(扩展帧),保留位r0和r1必须以显性电平发送,但是接受方可以接受显性、隐性及其任意组合的电平;
最后是4个字节的DLC(DLC3、DLC2、DLC1、DLC0)代表数据长度,指示了数据段中的字节数。对于没有数据段的遥控帧,DLC表示该遥控帧对应的数据帧的数据段的字节数。
发送节点在ACK段发送两个隐性位,即发送方发出的报文中ACK槽为隐性1;
接收节点在接收到正确的报文之后会在ACK槽发送显性位0,通知发送节点正常接收结束。所谓接收到正确的报文指的是接收到的报文没有填充错误、格式错误、CRC错误。
错误帧由错误标志和错误界定符两个部分组成。
主动错误标志:6个连续的显性位;
被动错误标志:6个连续的隐性位;
错误界定符:8个连续的隐性位。
在仲裁区,节点向总线发送隐性位却回读到显性位,不认为是位错误,这种情况表示该节点仲裁失败;
在ACK槽,节点向总线发送隐性位却回读到显性位,不认为是位错误,这种情况表示,该节点当前发送的这一帧报文至少被一个其它节点正确接收;
该节点发送被动错误标志,节点Node_A向总线发送连续六个隐性位(被动错误标志)却回读到显性位,不认为是位错误。因为被动错误标志是六个连续的隐性位,所以在总线上按照线与机制,有可能这六个连续隐性位被其它节点发送的显性电平“吃掉”;
当发送节点Node_A在ACK槽时间段内没有回读到显性位,那么发送节点Node_A就会检测到一个ACK应答错误。这表示没有一个节点成功接收该帧报文。
数据帧和遥控帧的CRC界定符、ACK界定符、EOF;
错误帧界定符
过载帧界定符
什么情况下发送带有主动错误标志的错误帧;
什么情况下发送带有被动错误标志的错误帧;
在哪个时间点发送错误帧;
错误标志重叠部分是怎样形成的;
主动错误状态
被动错误状态
总关闭状态
处于主动错误状态,表示该节点具备发出主动错误标志的能力;
处于被动错误状态,表示节点具备发出被动错误标志的能力。
节点处于被动错误状态可以正常通信;
处于被动错误状态的节点(可能是接收节点也可能是发送节点)在检测出错误时,发出被动错误标志。
节点处于总线关闭状态,那么该节点不能收发报文;
处于总线关闭状态的节点,只能一直等待,在满足一定条件的时候,再次进入到主动错误状态。
处于主动错误状态的节点在检测到错误时会发送带有主动错误标志的错误帧;
处于被动错误状态的节点在检测到错误时会发送带有被动错误标志的错误帧。
已完成
数据加载中