CAN的基本定义
CAN,全称为“Controller Area Network”,即控制器局域网,是一种多主方式的串行通讯总线,是国际上应用最广泛的现场总线之一。
为适应“减少线束的数量”、“通过多个 LAN,进行大量数据的高速通信”的需要,1986 年德国电气商博世公司开发出面向汽车的 CAN 通信协议。此后,CAN 通过 ISO11898 及 ISO11519 进行了标准化,现在在欧洲已是汽车网络的标准协议,同时它具有很高的可靠性,被广泛应用于:汽车电子、工业自动化、船舶、医疗设备、工业设备等方面。
CAN控制器相关以及总线电平
CAN控制器是根据CAN_L和CAN_H上的电位差〔即差分信号的形式〕来判断总线电平。总总线电平分为显性电平〔对应逻辑0,电位差为2V左右〕和隐性电平(对应逻辑1,电位差为0V〕
显性电平和隐性电平
总线上的电平有显性电平和隐性电平两种。
显性电平的逻辑值为“0",隐性电平为“1"。
“显性。具有“优先"的意味,只要有一个单元输出显性电平,总线上即为显性电平。并且,“隐性其有“包容"的意味,只有所有的单元都输出隐性电平,总线上才为隐性电平(显性电平比隐性电平更强)。
CAN报文格式
数据帧由 7 个段构成,包括:
(1)帧起始。表示数据帧开始的段。
(2)仲裁段。表示该帧优先级的段。
(3)控制段。表示数据的字节数及保留位的段。
(4)数据段。数据的内容,一帧可发送0~8个字节的数据。
(5)CRC段。检查帧的传输错误的段。
(6)ACK段。表示确认正常接收的段。
(7)帧结束。表示数据帧结束的段。
CAN的特性总结
采用双线差分信号
协议本身对节点的数量没有限制,总线上节点的数量可以动态改变
广播发送报文,报文可以被所有节点同时接收(节点发送报文前要检测总线状态,在发送报文过程中进行“回读”,判断送出的位于回读的位是否一致)
多主站结构,各节点平等,优先权由报文ID确定(线与机制:显性位能够覆盖隐性位,ID越小,报文优先级越高)
每个报文的内容通过标识符识别,标识符在网络中是唯一的
根据需要可进行相关性报文过滤
总线访问——非破坏性仲裁的载波侦听多路访问/冲突避免CSMA/CA(非破坏性仲裁:退出总裁后进入“只听”状态,)
载波侦听(CS):总线上各个节点在发送数据前都要侦听总线的通信状态
总线空闲 =》 立即发送已经准备好的数据
总线有通信 = 》 不发送数据,等待网络空闲
多路访问(MA):如果总线空闲,则在同一时刻多个节点可同时访问总线
冲突避免(CA):节点在发送数据过程中药不停地检测发送的数据,确定是否与其他节点数据发生冲突,并通过非破坏性仲裁机制避免冲突