浅谈CAN总线--- 数据链路层

浅谈CAN总线— 数据链路层
我们还是继续从网络七层模型的视角来讨论CAN总线在汽车电子中的应用
数据链路层的是符合CAN2.0B和ISO11898的协议规范的。
1. 帧类型介绍

帧的种类有多种:
数据帧:数据帧将数据从发送器传输到接收器。
在这里插入图片描述

远程帧:用于接收单元向具有相同 ID 的发送单元请求数据的帧。
过载帧:用于接收单元通知其尚未做好接收准备的帧。
在这里插入图片描述

错误帧:任何单元检测到总线错误就发出错误帧。
在这里插入图片描述

帧间隔:用于将数据帧及远程帧与前面的帧分离开来的帧。

数据帧和遥控帧有标准格式和扩展格式两种格式。标准格式有11个位的标识符ID,扩展格式有29个位的ID。
3.2 数据帧
目前和车厂沟通,基本使用的都是数据帧,着重介绍下数据帧。
数据帧由7个段构成,分别是:
 帧起始:表示数据帧开始的段。
 仲裁段:表示该帧优先级的段。
 控制段:表示数据的字节数及保留位的段。
 数据段:数据的内容,可发送 0~8 个字节的数据。
 CRC 段:检查帧的传输错误的段。
 ACK 段:表示确认正常接收的段。
 帧结束:表示数据帧结束的段。
从下图可以看出
在这里插入图片描述

① 帧起始(SOF):标志数据帧和远程帧的起始,有一个单独的“显性(逻辑0)”位组成。
② 仲裁场(Arbitration field):
 RTR为远程传输请求位;
 IDE为扩展标识符位;
 SRR为"替代远程请求位
标准格式:11位ID + RTR位
扩展格式:29位ID + SRR位 + IDE位 + RTR位
CAN总线每组报文开头的11位字符为标识符,定义了报文的优先级;CAN总线的优先权由发送数据报文中的标识符决定报文占用总线的优先权;标识符越小,优先权越高。在同一个总线中,标识符是唯一的,不可能有两个节点发送具有相同标识符的报文。当然接收节点也会根据标识符来判断是否接收这帧信息,一般称这项技术为报文滤波技术。
③ 控制场(Control field):
标准格式:IDE位 + r0位 + 4位数据长度代码
扩展格式:r1位 + r0位 + 4位数据长度代码
④ 数据场(Data field):
数据的内容,包含0~8个字节的数据,最高位先输出。对于远程帧,数据段为空。
⑤ CRC校验场(CRC field):
CRC校验,由15位CRC值和1位界定符组成。CRC计算范围包括帧起始、仲裁段、控制段和数据段。接收方以同样的方式计算CRC值并进行比较,若不一致则报错。界定符必须为隐性。
⑥ 应答场(ACK field):
1位应答间隙+1位应答界定
用于确认是否接收正常,由ACK槽和界定符组成。界定符必须为隐性。
⑦ 帧结束(EOF):7个隐性位
CAN总线的仲裁机制:只要总线空闲,任何节点都可以向总线发送报文。如果有两个或两个以上的节点同时发送报文,就会引起总线访问碰撞。通过使用标识符逐位仲裁可以解决这个碰撞问题。而且当具有相同标识符的数据帧和远程帧同时发送时,数据帧优先于远程帧。
在这里插入图片描述

 只要总线空闲,任何节点都可以向总线发送数据;
 回读:每个字节往总线发送数据的同时读取总线上的数据,并对比;
 线与:多个字节向总线发送数据时,采取“线与”机制;
 仲裁:多个节点同时往总线发送数据时,由仲裁来决定谁先发送数据,总线仲裁失利的节点主动退出发送
关于整个数据帧的判断,网上教程有很多,主要把握的点是报文ID和报文数据长度DLC。
对于应用开发,数据链路层的大部分协议是由CAN收发器和CAN控制器实现的,在理解的基础上会用即可。
这部分一般芯片厂商会给出可以收发数据的Demo。
2. 位定时
CAN总线的位定时与采样点:
以1Mbps的传输速率为例,则速率的周期为1000ns,即CAN总线每传输一位数据需要1000ns的时间周期。但是CAN总线数据传输有一定的延时,因此必须合理考虑每一位数据的采样点位置,以满足延时的要求。下图是CAN总线网络通信的位定时与采样示意图,其中位时间为1000ns。
如图所示,CAN总线中每一位数据由四部分构成:同步段、传播段、相位缓冲段1、相位缓冲段2。
在这里插入图片描述

同步段:用于总线各个节点之间的同步。
传播段:用于补偿信号的物理传播延时。
相位缓冲段1 && 相位缓冲段2:用于补偿信号沿的相位误差,以便更精确地进行采样。
计算采样点需要用到传播段和相位缓冲段:
采样点 = (1+传播段+相位缓冲段1)/(1+传播段+相位缓冲段1+相位缓冲段2)
或者表示成:
采样点 = (1+TSEG1)/(1+TSEG1+TSEG2)
位定时的配置可以通过S32DS中可视化工具配置,如下图。

在这里插入图片描述

目前程序中使用的是Freescale给的默认值。

3. BusOFF
Busoff意思是总线故障。
每个ECU的CAN控制器会在错误计数器达到一定值的时候进入busoff状态。
进入状态后通过CAN控制器的寄存器可以查询到busoff状态.

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值