CAN总线是广播类型的总线。这意味着所有节点都可以侦听到所有传输的报文。无法将报文单独发送给指定节点;所有节点都将始终捕获所有报文。但是CAN硬件能够提供本地过滤功能,让每个节点对报文有选择性地做出响应。
CAN报文
CAN使用短报文 – 最大实用负载是94位。报文中没有任何明确的地址;相反,可以认为报文是通过内容寻址,也就是说,报文的内容隐式地确定其地址。
报文类型
CAN总线上有四种不同的报文类型(或“帧”):
数据帧
远程帧
错误帧
过载帧
1. 数据帧
概要:“大家好,这是一些标签为X的数据,希望满足您的需要!”
数据帧是最常见的报文类型。由下列主要部分组成(出于简洁性目的,忽略了一些细节):
仲裁字段。当两个或多个节点竞争总线时,确定报文的优先级。仲裁字段包含:
对于CAN 2.0A,一个11位的标识符和一个支配数据帧的RTR位。
对于CAN 2.0B,一个29位的标识符(其中还包含两个隐性位:SRR和IDE)和RTR位。
数据字段。包含0到8字节数据。
CRC字段。包含一个基于报文大部分数据计算得到的15位校验和。校验和用于错误检测。
应答时隙。任何能够正确接收报文的CAN控制器都会在每条报文的末尾发送一个应答位。传送节点检查应答位是否存在,如果没有检测到应答位,会重新发送报文。
注1:请注意,总线上存在应答位不表示任何目标地址已经收到报文。唯一表示的是,总线上的一个或多个节点已经正确收到报文。
注2:仲裁字段中的标识符不一定标识报文的内容,尽管其名字会让人如此认为。