CAN总线协议:标准CAN和扩展CAN
CAN通讯协议是一个载波侦听、基于报文优先级碰撞检测和仲裁(CSMA/CD+AMP)的多路访问协议。CSMA的意思是总线上的每一个节点在企图发送报文前,必须要监听总线,当总线处于空闲时,才可发送。CD+AMP的意思是通过预定编程好的报文优先级逐位仲裁来解决碰撞,报文优先级位于每个报文的标识域。更高级别优先级标识的报文总是能获得总线访问权,即:标识符中最后保持逻辑高电平的会继续传输,因为它具有更高优先级。
ISO-11898:2003标准,带有11位标识符,提供的最高信号速率从125Kbps到1Mbps。更迟一些的修订标准使用了扩展的29位标识符。
标准CAN
标准CAN只有11位标识符,每帧的数据长度为51+(064)=(51117)位。
· SOF - 帧起始。显性(逻辑0)表示报文的开始,并用于同步总线上的节点。
· 标识符 - 标准CAN具有11位标识符,用来确定报文的优先级。
此域的数值越小,优先级越高。
· RTR - 远程发送请求位。
当需要从另一个节点请求信息时,此位为显性(逻辑0)。
所有节点都能接收这个请求,但是帧标识符确定被指定的节点。
响应数据帧同样被所有节点接收,可以被有兴趣的节点使用。
· IDE - 标识符扩展位,为显性时表示这是一个标准CAN格式,为隐形表示这是扩展CAN格式。
· r0 - 保留位(可能将来标准修订会使用)。
· DLC - 4位数据长度代码表示传输数据的字节数目,一帧CAN最多传输8字节用户数据。
· 数据0~8 – 最多可以传输8字节用户数据。
· CRC - 16位(包括1位定界符)CRC校验码,用来校验用户数据区之前的(包含数据区)传输数据段。
· ACK - 2位,包含应答位和应答界定符。
发送节点的报文帧中,ACK两位是隐性位,当接收器正确地接收到有效的报文,接收器会在应答位期间向发送节点发送一个显性位,表示应答。
如果接收器发现这帧数据有错误,则不向发送节点发送ACK应答,发送节点会稍后重传这帧数据。
· EOF – 7位帧结束标志位,全部为隐性位。
如果这7位出现显性位,则会引起填充错误。
· IFS – 7位帧间隔标志位,CAN控制器将接收到的帧正确的放入消息缓冲区是需要一定时间的,帧间隔可以提供这个时间。
扩展CAN
扩展CAN具有29位标识符,每帧数据长度为71+(064)=(71135)位。
注:不计位填充。
扩展CAN消息相对于标准CAN消息增加的内容如下:
· SRR – 代替远程请求位,为隐性。所以当标准帧与扩展帧发送相互冲突并且扩展帧的基本标识符与标准帧的标识符相同时,标准帧优先级高于扩展帧。
· IDE – 为隐性位表示标志位扩展帧,18位扩展标识符紧跟着IDE位。
· r1 – 保留