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总线上已接收但发生错误的消息的次数

               

 

posted on 2025-03-30 10:01  轩~邈  阅读(187)  评论(0)    收藏  举报