1、CAN通信特征和优点
Controller Area Network Bus = 控制器局域网总线
① 通信线:CAN_H 和 CAN_L,采用差分信号,所以抗干扰能力强;
② 通信速率:高速 CAN(125K-1Mbps,传输40m), 低速CAN(10k-125kbps,传输1Km)
③ 异步半双工通信:没有时钟线,在同一时刻,只能有一台设备处于发送数据状态,其他设备处于接收状态;
④ 仲裁机制:多设备同时发送数据时通过仲裁判断先后顺序
⑤ 传输方式:分为广播式传输和请求式传输;
| 名称 | 引脚 | 双工 | 时钟 | 电平 | 设备 | 引用场景 |
| UART | TX, RX | 全双工 | 异步时钟 | 单端电平 | 点对点 | 两设备之间通信 |
| I2C | SCL, SDA | 半双工 | 同步时钟 | 单端电平 | 多设备 | 一主多从 |
| SPI | SCK,MOSI,MISO,SS | 全双工 | 同步时钟 | 单端电平 | 多设备 | 一主多从(高速) |
| CAN | CAN_H,CAN_L | 半双工 | 异步时钟 | 差分电平 | 多设备 | 多主机通信 |
2、CAN通信硬件基础

① 连接方式:终端设备(CAN控制器)-----CAN收发器 --------CAN总线--------CAN收发器--------终端设备(CAN控制器)
② 高速CAN总线的电平标准:两线收紧电压差0V,为隐形电平1;两线张开电压差2V,为显性电平0;(默认电平为高电平,所以隐性电平为1)
③ 高速CAN的终端电阻是120Ω,低速CAN的终端电阻是2.2KΩ
④ CAN 收发器的功能:实现电平转换、输出驱动,输入采样;

3、CAN总线的帧格式
| 帧类型 | 用途 |
| 数据帧 | 发送设备主动发送数据 |
| 遥控帧 | 接受设备主动接受数据 |
| 错误帧 | 某个设备检测出错误时向其他设备通知错误 |
| 过载帧 | 接收设备通知其尚未做好准备 |
| 帧间隔 | 用于将数据帧、遥控帧和其他帧分隔开来 |
(1)数据帧

D表示显性电平0(两线张开); R表示隐性电平1(两线收紧)
帧起始:两线张开,1个显性电平0
报文ID:用于接收过滤器筛选;用于仲裁:报文ID小的优先发送;
RTR:远程请求标志位,用于区分数据帧(RTR=0)和 遥控帧(RTR=1); RTR和报文ID共同构成仲裁段;
IDE:用于区分标准格式还是扩展格式;
r0:保留位;
DLC + Data:表示数据位的长度 + 数据载荷;
CRC校验码 + CRC界定符
ACK槽 + ACK界定符
帧结束:两线收紧,7个隐性电平
(2)遥控帧(适用于使用频率低的数据)

接收方需要某个报文ID的数据,会广播发出相应ID的遥控帧,总线设备上某设备存在遥控帧上的ID,则会广播发出相应ID的数据帧;
遥控帧没有数据段,RTR为隐性电平1,其他部分与数据帧相同;
4、位填充规则:发送方每发送5个相同电平后,会自动追加一个相反电平的填充位;
5、接收方数据采样规则:总线上所有设备以约定的波特率方式确定数据位时长,即异步通信;
位时序:每个数据位的时长划分为 同步段+传播时间段+相位缓冲段1+相位缓冲段2

硬同步:使接收方第一个采样点和波形的第一位对齐
当某个设备率先发送报文时,其他设备接收到SOF的下降沿(发送设备处于SS段),接收方会将自己的时序计时周期拨到SS段的位置,与发送方的计时周期保持一致。

再同步:接收方根据再同步补偿宽度值(SJW)加长PBS1段或者缩短PBS2段,以调整同步

波特率 = 1 / (TSS + TPTS + TPBS1 + TPBS2)
总线资源分配规则
1、先占先得规则
① 若当前已经有设备操作总线,其他设备不准同时发送数据帧和遥控帧(但是可以发送错误帧和过载帧)
② 设备检测到连续11个隐性电平时(连续收紧),即认为总线空闲
2、非破坏性仲裁
① 多设备同时开始一段波形(确实同时发送,或者因为等待导致同时发送)
② 仲裁段 = 报文ID + RTR 标志位 ,仲裁段数值小的报文优先级高(ID号中1出现的晚,所以优先级越高)
③ 实现非破坏性仲裁要求:线与特性 + 回读机制 ,A发送1,B发送0, 线与为0 ------ A读到0与自己不一致,仲裁失败,退出接收 ------- B读到0和自己一致,仲裁胜利,开始发送;
④ 数据帧和遥控帧的报文ID号一样时,数据帧的优先级高于遥控帧
⑤ 标准格式11位ID号和扩展格式29位ID号的高11位一致时,标准格式的优先级更高
错误处理:
| 错误种类 | 错误内容 | 错误检测帧 | 检测单元 |
| 位错误 | 输出电平和总线电平不一致 | 数据帧、遥控帧、错误帧、过载帧 | 发送单元、接收单元 |
| 填充错误 | 连续6个相同电平 | 数据帧(SOF-CRC)、遥控帧(SOF-CRC) | 发送单元、接收单元 |
| CRC错误 | 计算CRC值和接收CRC值不一致 | 数据帧、遥控帧 | 接收单元 |
| 格式错误 | 与固定格式不一致 | 数据帧的CRC界定符、ACK界定符、EOF,错误界定符、过载界定符 错误 | 接收单元 |
| ACK错误 | 发送方在ACK槽中检测出隐性电平 | 数据帧,遥控帧 | 发送单元 |
错误状态:
TEC(发送错误计数值): 统计CAN总线上已发送但未被确认的消息发生错误的次数
REC(接收错误计数值): 统计CAN总线上已接收但发生错误的消息的次数

多主总线通信协议,用于实现多个节点设备之间高效、可靠的数据传输
浙公网安备 33010602011771号