CAN协议

1、CAN总线简介

CAN是Controller Area Network的缩写,ISO11898和ISO11519(国际标准),J(美国标准)。

背景:车辆上电控电源数量越来越多。原先点对点连接的方式,成本过高。采用总线形拓扑结构(节点与节点之间的数据共享,通过共享介质。即一条总线传输),降低成本,开发周期快等优点。

分类:高速CAN和低速CAN。
特点:可以联想CAN协议的传输和格式。
传输:
主线空闲时,都可以发送,即没有主从
协议格式:
CRC,错误检测,错误通知,错误恢复。
ACK确认,广播形式传输。

2、物理层

2.1、CAN总线原理

总线结构:
在这里插入图片描述

发送过程:
● 微控制器接收与其他节点的一些应用层数据的交互,当需要有数据需要发送的时候,微控制器(MCU)会将应用层数据传递给CAN控制器;
● CAN控制器进行报文的封装,封装之后以二进制码流的形式传给收发器;
● 收发器将这种二进制位流信号(数字信号)与物理的电平信号(电信号)进行转换,从而实现MCU接收要实现的功能。比如车窗的控制,乘客按键按下,车窗电机转动,实现车窗的打开和关闭。
上面是整体的一个流程,可以说一下帧的传输过程。

接收过程:
● 收发器检测到总线上的数据时,会将CAN高低这两根线的差分电平(电信号),解析成数据链路层传输的0101比特流(数字信号)传给控制器;
● 控制器进行报文的解封装,然后将应用层数据打包传给微控制器进行处理。

2.2、CAN总线协议

1、位电平
CAN控制器根据CAN_H和CAN_L上的电位差来判断总线电平。总线电平分为显性电平和隐形电平,

显性电平对应逻辑:0,隐性电平对应逻辑:1。

CAN_H的电平为3.5V,CAN_L线的电平为1.5V,CAN_H和CAN_L的电压差为2V左右,CAN_H和CAN_L线上的电压均为2.5v, CAN_H和CAN_L之间的电压差为0V。可以用示波器观察。每一帧报文的传输,每一位的电平都是显性。

2、终端电阻
接在CAN_H和CAN_L之间的电阻。
作用:
3、差分电路
CAN使用差分电路:有外来干扰时,CAN_H和CAN_L会同时受到干扰,但是电位差不会改变太多,抗干扰能力强。

3、数据链路层

3.1 位速率

不同的子网(系统),CAN的通信速率(带宽)是不同的,在一个给定的子网(系统中),通信速率(带宽)是唯一且固定。
以500Kbit/s的速率为例,发送一个bit的时间是2us,那么信号在总线上的延时必须小于1us(往返)才能保证发送节点成功在应答间隙接收到“显性电平”。
典型导线的延时为5ns/m,所以40m线长产生的延时达到400ns(往返)。

3.2 帧类别

通过CAN ID的可以分类不同报文。网络管理报文(CAN 4开头,CAN FD 5开头),应用报文,诊断报文(7开头,物理寻址:一对一 比如对单体安全访问,在线编程,功能寻址:服务需要一对多,保证ECU的状态相同,比如多个 ECU需要知道车速的信息,温度的信息)
1、帧类别:
数据帧、错误帧常用,远程帧不用。
CAN2.0 ID不一样 标准帧11(乘用车) 扩展帧29(商用车),给ID具体信息,为了把车的发动机、扭矩信息写进去。
标准帧格式:
在这里插入图片描述在这里插入图片描述
七段。1+12+6+(0-8)*8+16+2+7 =( 44-108) + 19 = 127
● 帧起始:SOF
● 仲裁段(Arbitration Field):ID和RTR
RTR:远程发送请求位,区分该帧是数据帧还是远程帧:显性信号(0)代表数据帧(Data Frame),隐性信号(1)代表远程帧(Remote Frame)。
远程帧:由6个场组成,相比数据帧少了数据场。
● 控制段:IDE、RB0、DLC;
IDE:扩展位,区分标准帧还是扩展帧:显性信号(0) 是标准帧,隐形信号 (1) 是扩展帧;
标准帧:ID范围是11位 0x000-0x7FF
扩展帧:29位ID 0x0000 0000 - 0x1FFF FFFF
RB0:保留位;
DLC:数据长度编码位,数据的长度。
● 数据段:传送数据,最多8个字节。
● 循环校验段:CRC、CRC DEL;
CRC:循环校验序列;
CRC DEL:界定符,表示循环校验序列的结束。隐性信号
● 确认段:ACK SLOT(确认位)和ACK DEL(界定符,隐性信号)
● 帧结束:EOF,7位,隐性信号,表示帧的结束。

DLC和DL的区别:
● CAN message 属性DLC和DataLength 是对应着CAN/CANFD报文的报文结构的
● 如果是标准CAN,因为最多是8字节,两个参数值都一样,但是CANFD报文的话,就应该记住映射表

DLCData Length CANData Lehgth CANFD
9812
10816
11820
12824
13832
14848
15864
● 仿真CAN报文的时候,长度可别设错。

填充位:连续5个相同位,填充反转位,防止累加错误。

2、仲裁
1、显性覆盖隐形
当多个信号在总线上发送数据时,显性信号0覆盖隐形信号1,所以ID 0越多靠前,报文优先级更高,表现ID数字越小,优先级越高。
2、非预期位退出发送。
在多个报文发送位时,与总线报文位进行对比,不相同的退出竞争。

3.3、同步(位时序分解)

CAN使用"位同步"的方式来抗干扰/吸收误差,实现对总线电平信号进行正确的采样,确保通讯正常。
硬同步:在总线空闲时通过一个下降沿(帧起始)来完成;
重同步:每当有从“隐性位”到“显性位”的跳变,并且该跳变落在了同步段之外,就会引起一次重同步。
为了实现位同步,CAN协议把每一个数据位的时序分解成SS(同步)段,PTS(传输)段,PBS1段(相位段1),PBS2段(相位段2),这四段的。
长度加起来即为一个CAN数据位的长度。分解后最小的时间单位是Tq,1bit的时间段(16TQ)。
同步段:电平跳变范围,若超出,则重新;
传输段:补偿网络的物理延时时间,保证数据位都已经传输,从第一位到最后一位,
相位段1和相位段2。
在这里插入图片描述
主要是采样点的知识点,采样点在相位段1和相位段2边界,采样点测试。
采样点 = (同步段 + 相位段1)/NBT;

侦听机制:
侦听–发出的数据再采样回来,比较采样回来的数据是否和发出的数据一致。
在这里插入图片描述

3.4、错误流程:

错误类别:5种;
1、Noack Error 控制器没有给上位机Ack。一般是硬件线路接错导致,比如电源没开,样件没有插在接插口上,电源线、CAN线接错或者工程配置 通道选错、波特率、采样点的设置 CAN 75%-81.3% CANFD 80%
2、Stuff Error 填充错误,逢5反转(连续5个相同的电平,插入一个相反的电平)。一般是电阻配置的不对,比如没有接入电阻或者少接了电阻。整车若有量电阻是否正确,是否还需要接入支线终端电阻。
3、Form Error 格式错误,一般是帧结构中的固定位发生错误。比如CAN协议中固定位 SOF(0)、RTR(0)、IDE(0)、CRC Del(1)、ACK Del(1)。ACK界定符固定是一个隐形位,若检测到显性,就认为是格式错误。
4、Bit Error 位错误,发送节点在发送数据,进行回读,检测到总线上的数据与自身发出的数据不同时,位错误。
5、CRC Error 接收节点接收到的CRC序列与发送节点发送的CRC序列不同时,识别位CRC错误。
在这里插入图片描述

5、错误处理机制:
检测到错误,自动重发,同时发送错误帧。
发送节点检测到错误一次,TEC加8,直到加到255(第32次,TEC > 255 总线关闭),休眠,避免优先级高的数据帧一致发送占用总线,导致其他报文无法发送。
在这里插入图片描述

3.5、负载率

以11位ID,8位数据长度,填充位19bit,子网带宽500Kbit/s为例:
报文长度127bit,周期10ms
单帧负载 = (127bit/10ms)/ (500*1000bit/1000ms) * 100% = 2.54%
周期500ms:
单帧负载 = (127bit/500ms)/ (500 * 1000bit/1000ms) * 100% = 0.05%
在这里插入图片描述

4、交互层-网络自诊断

自诊断条件:
1、KL15 ON
2、诊断电压在范围内
3、T_DiagStart/T_DiagRestart时间截止
在这里插入图片描述
过压欠压:
当供电电压超出控制器自诊断电压范围,关闭自诊断行为同时不记录相关故障;
当供电电压处于过压或者欠压状态并持续一定时间,记录过压或者欠压DTC。
报文超时:
如果接收节点接收的某一帧周期型报文或者周期事件型报文丢失了一段事件,接收节点将会记录"报文超时故障DTC"
Bus Off
控制器需要可以检测到BusOff状态,当连续多次BusOff后需要记录相关的DTC码。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值