CAN总线学习笔记(1、CAN总线定义)
江协科技CAN总线入门教程视频学习笔记
CAN特性
-
两根通信线(CAN_H\CAN_L),两根线,无需工地
-
差分信号,抗干扰能力强
-
高速CAN(ISO11898):125K-1Mbps,<40m
-
低速CAN(ISO11519):10K-125Kbps,<1km
-
异步,无需时钟线,通信速率由设备各自约定
-
半双工,可挂载多设备,多设备同时发送数据时通过仲裁判断先后顺序
-
11/29位报文ID,用于区分消息功能,同时决定优先级
-
可配置1-8字节有效载荷
-
可实现广播式和请求式两种传输方式
-
应答、CRC校验、位填充、位同步、错误处理等特性
CAN硬件电路
CAN电平标准
帧格式
帧类型 | 用途 |
数据帧 | 发送设备主动发送数据(广播式) |
遥控帧 | 接收设备主动请求数据(请求式) |
错误帧 | 某个设备检测出错误时,向其他设备通知错误 |
过载帧 | 接收设备通知其尚未做好接收准备 |
帧间隔 | 用于将数据帧及遥控帧与前面的帧分离开 |
数据帧和遥控帧使用最多,其它3种帧做了解即可
数据帧
-
在ack槽时,可以有多个接收方同时拉开总线,因为一个报文可以被多个设备同时接收。
-
SOF(start of frame):帧起始。表示后面一段波形为传输的数据位
-
ID(identify):标识符,区分功能,同时决定优先级
-
RTR(remote transmission request):远程请求位,区分数据帧和遥控帧
-
IDE(identifier Extension):扩展标志位,区分标准格式和扩展格式
-
SRR(substitute remote request):替代RTR,协议升级时留下的无意义位
-
r0/r1(reserve):保留位,为后续协议升级留下空间
-
DLC(data length code):数据长度,指示数据段有几个字节
-
Data:数据段的1-8个字节有效数据
-
CRC(cyclic redundancy check):循环冗余校验,校验数据是否正确
-
ACK(acknowledgement):应答位,判断数据有没有被接收方接收
-
CRC/ACK界定符:为应答位前后发送方和接收方释放总线留下时间
-
EOF(end of fram):帧结束,表示数据位已经传输完毕
遥控帧
遥控帧无数据段,RTR为隐形电平1,其它部分与数据帧相同
仲裁
多设备同时发送时的规则
-
数据帧和遥控帧ID一样时,数据帧RTR位为显性电平0,所以数据帧的优先级高于遥控帧
-
数据帧的标准格式和扩展格式的高11位一样时,扩展帧的SRR为隐性电平1,所以标准格式的优先级高于扩展格式
-
标准遥控帧和扩展数据帧高11位一样时,标准遥控帧的IDE位为显性电平0,所以标准遥控帧的优先级高于扩展数据帧
先到先得
-
已有设备在操作总线发送数据帧/遥控帧,则其它设备不能再同时发送数据帧/遥控帧(可以发送错误帧/过载帧破坏当前数据)
-
只有在总线空闲时(连续检测到11个隐性电平),设备才能发送数据帧/遥控帧
非破坏性仲裁
-
CAN总线根据ID进行非破坏性仲裁,ID号小的(优先级高)取到总线控制权,ID号大的(优先级低)仲裁失利后将转入接收状态,等待下一次总线空闲时再尝试发送。
-
线与特性:总线上任何一个设备发送显性电平0时,总线就会呈现显性电平0状态;只有总线上所有设备都发送隐性电平1时,总线才会呈现隐性电平1状态
-
回读机制:每个设备发出一个数据位后,都会读回总线当前的电平状态,以确定自己的电平被发送。
错误处理
错误类型
错误类型 | 错误的内容 | 错误的检测帧(段) | 检测单元 |
位错误 | 比较输出电平和回读信号,当两电平不一样时产生此错误 |
| 发送单元 接收单元 |
填充错误 | 连续检测到6位相同电平时产生此错误 |
| 发送单元 接收单元 |
CRC错误 | 计算的CRC结果和接收到的CRC不一样时产生此错误 |
| 接收单元 |
格式错误 | 再固定电平字段检测到相反电平时产生此错误 |
| 接收单元 |
ACK错误 | 发送单元再ACK槽中检测出隐性电平,即没有接收发应答时产生此错误 |
| 发送单元 |
错误状态
通过状态机切换设备错误状态
-
设备初始状态为主动错误状态
-
主动错误状态检测到错误时,发送主动错误状态帧,会破坏数据传输
-
当TEC或REC>127时,设备进入被动错误状态,此时检测到错误,发送被动错误,不会破坏数据传输,
-
当TEC>255时,设备进入总线关闭状态