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  轩~邈  阅读(258)  评论(0)    收藏  举报