CAN 为单一逻辑总线的异步串行总线系统,具有开放的线性总线结构,每个通信参与者都是平等的,称之为节点。CAN 总线包含两个或多个节点。总线逻辑采用“线与”机制,隐性位(等同于逻辑 1 电平)被显性位(等同于逻辑0 电平)改写。只要没有节点发送显性位,总线就处于隐性状态。在这种状态下,从任何总 线节点发出的显性位产生一个显性总线状态。从定义上讲,CAN 总线的最大速度为 1Mbit/s。该速度下,CAN 总线长度最多为40 米。对于超过40 米的总线,必须降低总线速 度。 CAN 帧的二进制数据编码为 NRZ码(非归零)。为了确保所有总线节点都能够重新同 步,使用位填充方法。这意味着发送报文期间,最多5 个连续位可以具有相同的极性。发送5 个同极性的连续位之后,发送器将插入一个与先前发送的位流极性相反的附加位(填充位),之后才能继续发送后面的位。接收器也会检查具有相同极性位的位个数,并从位流中删 除填充位(=去填充)。
CAN 协议中,地址信息由报文中的标识符域给出。标识符指示报文内容和优先级。标识符的二进制数值越小,报文优先级越高。使用带 NDA 的 CSMA/CD(非破坏性仲裁的载波侦听多路访问/冲突检测)进行总 线仲裁。如果总线节点 A 试图通过网络发送报文,该节点先检测总线是否处于空闲状态(“载波侦听”),也就是说,没有节点在进行发送操作。如果情况如此(且没有其它 节点要同时启动一次报文发送操作),节点 A 成为总线主设备并发送报文。所有其它节 点在第一个发送位(帧起始位)期间切换到接收模式,每个总线节点检查报文标识符, 如有需要,存储该报文,否则忽略该报文。如果两个或多个节点同时启动发送操作(“多路访问”),通过按位仲裁(“冲突 检测/非破坏仲裁”和“线与”机制,显性位占先(显性位改写隐性位))避免报文发送 的总线冲突。每个发送报文的节点都读回总线电平。当一个节点发送隐性位而读回显性 位,该节点丢失总线仲裁并从发送模式切换到接收模式。例如,当一个竞争节点的报文 标识符具有较低的二进制值,因此具有较高发送优先级时,会出现上述情况。在这种情 况下,具有最高优先级的总线节点赢得仲裁且不需要重复发送报文(从而不需要损失时 间),一旦总线返回空闲状态,其它失去仲裁的节点将自动重复发送操作。因此,数据 帧中同一个标识符只能被系统中的一个节点发送。也就是说,一定不能设置为由多个节 点发送带同一个标识符的数据帧。
数据帧的第一位是帧起始位(SOF = 显性位),用于硬件同步所有节点。SOF 之后 是 12 位仲裁位域,由 11 位标识符(指示报文内容和优先级)和 1 位 RTR(远程发送 请求)组成。 RTR 为显性电平,指示该帧为数据帧。RTR 为隐性电平,则该帧为远程帧。仲裁域之后是 6 位控制位域。该位域的第一位是 IDE(标识符扩展)位,该位为显 性电平,表示该帧为标准数据帧。IDE 位之后一位保留,为显性电平。其余 4 位为数据 长度码 (DLC),指示数据域长度(字节个数)。数据域宽度为 0 到 8 字节。循环冗余(CRC)域紧跟数据字节,用于检测可能出现的数据字节发送错误。该位域由 15 位CRC 序列组成,其最后一位是隐性 CRC 分隔符位。 标准数据帧的最后一个位域是应答域。在 ACK 时隙期间,发送节点发出隐性位。无论该节点是否配置为接收该报文帧,接收到无错帧的任何节点都发回一个显性位指示该节点正确接收了该报文帧。该特性表明 CAN 协议属于“位回应”类型协议。隐性 ACK 分隔符 位,不能由显性位改写,是应答位域的最后一位。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !