CAN总线协议最早是为了统一汽车车载设备间通信的标准而开发的协议,后来由于其高速、稳定、可靠的特点,已经被ISO标准化并广泛应用于工控、医疗等领域,目前依然是欧洲汽车网络的标准协议。
CAN总线协议规定了ISO七层通信协议模型的物理层和数据链路层。其具体实现都已经被固化到CAN总线控制芯片中,无需软件实现。
理论上,CAN总线在速率小于5K时,距离可达10000m;速率接近1M时,距离小于0.4m。现实中常用的高速CAN总线速率有500k或250k,低速CAN总线有125k和62.5k,传输距离在几米到几十米间。速率和传输距离的选择还要考虑硬件的要求。
理论上,一条CAN总线上可以连接无数个CAN设备,但实际上受到其他条件限制,数量总是有限的。例如,使用了更上层的CANOPEN协议,则一条总线上只能有128个设备。
CAN总线所使用的最基本通信单元称为帧,CAN总线协议规定了数据帧、遥控帧(也有称为远程帧的)、错误帧、过载帧和间隔帧。以下仅详细分析数据帧的帧格式,其他均只描述功能,不详细描述格式。
有些文档喜欢用显性电平和隐性电平来描述帧格式,这里说明一下,显性电平可以理解为逻辑1,隐性电平可以理解为逻辑0。
数据帧由7段构成
起始段 | 仲裁段 | 控制段 | 数据段 | CRC段 | ACK段 | 帧结束 | |
---|---|---|---|---|---|---|---|
bit | 1 | 12 | 6 | 0-64 | 16 | 2 | 7 |
起始段:长度固定为1bit,逻辑0
仲裁段:前11bit为帧ID,后1bit为RTR标志
控制段:前2bit规定为0,后4bit为数据段的BYTE长度
数据段:长度可变,0~8BYTE
CRC段、ACK段、帧结束对于软件工程师来说可以不关注,比较重要的是理解仲裁段、控制段和