CAN通信协议介绍

一、CAN简介

CAN是控制器局域网络(Controller Area Network, CAN)的简称,是由以研发和生产汽车电子产品著称的德国BOSCH公司开发的,并最终成为国际标准(ISO 11898),是国际上应用最广泛的现场总线之一。can的发明最初是为了减少汽车上的线束,随着汽车上通讯节点的增多,使用总线形式的通讯网络可以大大减少各个节点线束的连接,因此,can技术孕育而生。can总线发展经历了can 2.0、can fd、can xl,分别于1991年发布can2.0标准,2015年发布can FD标准,2020年发布can XL标准

CAN通信有如下特点

1、它的电气特性和rs485一样采用差分信号,差分信号保证了can总线通讯的可靠性和远距离通讯。

2、can总线采用多主通讯模式,每个can节点都能自主收发数据,不像rs485和i2c采用主从模式。

3、can总线采用短报文形式,can2.0数据段最多8字节,can fd 数据段最大64字节。

4、有id仲裁机制,id小的优先级高,保证优先级高的数据实时传输。

5、can的通讯方式是异步半双工,通讯前双方要约定波特率。

6、距离在40m一下通信速度能达到1Mb/s,距离10km速度能达到5kb/s。一般汽车中用到的速度是250kb/s和500kb/s居多

CAN结构模型如下图

应用层为软件部分

数据链路层主要是实现CAN协议部分。主要由CAN控制器完成

CAN物理层主要是将数据链路层的TTL信号转换为CAN差分信号。主要有CAN收发器完成

二、CAN 2.0物理层

1.can总线的电气信号 如下图

CAN_H - CAN_L = 2V表示显性,代表逻辑0

CAN_H - CAN_L = 0V表示隐性,代表逻辑1

2、一般can总线两端会各加一个终端电阻以减少can总线上的反射,一般为120欧姆。如下图

三、CAN 2.0数据链路层

1.CAN帧报文种类有如下几种

1.数据帧:用于发送节点向接收节点传送数据。

2.远程帧:用于某个接收节点向某个发送节点请求数据

3.错误帧:用于当某节点检查出错误时向其它节点通知错误的帧

4.过载帧:用于接收节点向发送节点通知自身接收能力的帧

5.帧间隔;将数据帧或远程帧与前面的帧分离的帧

2.数据帧帧格式

数据帧可分为标准数据帧和扩展数据帧

标准帧帧ID长度是11位,帧ID范围是0x000 - 0x7FF

扩展帧帧ID长度是29位,帧ID范围是0x00000000 - 0x1FFFFFFF

can报文数据帧格式如下图

1.帧起始: 由一位显性位组成。can总线在空闲时为隐形

2.仲裁段:仲裁段可设置id过滤(各个细分位如下图)

3.控制段: 主要说明数据段的数据长度,长度可以是1~8个字节(普通CAN)CANFD格式最大64字节

4、数据段:普通can总线的数据段可以是1~8个字节。

5.CRC校验段:CRC段有16bit组成,1-15bit存放从起始到数据段的校验值,第16bit是CRC界定符占1bit为隐性电平(1)。

6.ACK段: ACK段有两个bit组成。第一个bit是应答结果,第二个bit是ACK界定符。

ACK应答位:对于发送节点发送隐性电平(逻辑1)。

ACK界定符:  接收正确的节点发送显性电平(逻辑0)。通过总线线与结果(1&0)为显性电平(逻辑0)。发送节点根据这个来判断发送是否成功。

7、帧结束:帧结束有连续7bit隐性位组成

四、CAN填充位和采样点

1.填充位

为减少波特率误差带来的通讯错误,can协议规定,在信号的跳变沿时刻进行同步,保证波特率的准确性。为解决数据出现连续的隐性位或者显性位,can协议规定当出现连续5个相同电平时就插入一个相反电平的填充位。比如出现了连续5个显性电平,就在5个显性电平后面插入一个隐性电平。接收端也按照这个规则过滤出去填充位。

2.can采样点

当CAN波特率位500kbps时,1bit电平的持续时间为2us。can协议中将1bit的电平分为四段:

1.同步段(sync_seg)

2.传播时间段(prop_seg)

3.相位缓冲段1(phase_Seg1)

4.相位缓冲段2(phase_Seg2)

若将1bit电平时间分为10等分,1等分称为1个Time Quantum(1Tq)。为方便编程。大部分厂家将prop_seg和phase_Seg1和一起称为TSEG1,phase_Seg2称为TSEG2。如下图所示

sync_seg通常是固定的1Tq。

设置TSEG1和TSEG2时需要遵循一定的规则:

1、TSEG1 > TSEG2

2、TSEG2 > SJW(同步跳转宽度)

3、一般采样点设置在85%位置左右。

采样点和波特率可以通过一些公式计算:

  采样点=(1+TSEG1)/(1+TSEG1+TSEG2)

        位时间 = (1+TSEG1+TSEG2)*Tq。

       can波特率 = (can时钟频率)/(1+TSEG1+TSEG2)

  例如:can时钟频率为8MHZ,要将波特率设置为500kbps,可以设置TSEG1=12,TSEG2=3.带入公式

 采样点=(1+12)(1+12+3) = 81%

  波特率 = (8*1000)/(1+12+3)  = 500kbps

采样点可以参考链接:http://www.eepw.com.cn/article/202004/411611.htm

五、can协议中的字节解析顺序

can报文的字节顺序格式分为Intel格式和Motolola格式。

例如A向B发送0x12A0,对于Inter格式来说先发送0xA0再发送0x12。

对于Motolola格式则先发送0x12,再发送0xA0.

Inter模式相当于小端模式,Motolola模式相当于大端模式。

  • 21
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青涩天空

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值