打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
can2.0和can fd协议介绍

注:以下大部分内容摘抄B站视频:https://www.bilibili.com/video/BV1gD4y1U7bJ?p=1

一、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标准。

  图1.1是早期使用端到端形式连接车上的各个设备,这样需要更多的线束,图1.2是使用can总线的形式连接车上的各个设备,每个设备都可以挂到can总线上,这样使得整个汽车网络特别清晰。

  

          图1.1 早期ecu的连接线束

  

                               图1.2 使用can总线连接

1.1 can的技术特定

  can总线是为了解决汽车上各个设备互联问题,汽车上设备节点繁多,有些设备节点比如油门,刹车灯需要实时响应,所以这就要求can总线要具备支持多节点、高可靠、高速度、低延时、低成本要求。由于现在汽车上要求通讯带宽越来越高,通讯速度越来越快,特别是智能电动汽车的发展为can总线提出了更高要求。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居多

1.2 can结构模型  

 can采用应用层+数据链路层+物理层的模型,如下所示:

  

  应用层是软件实现部分,数据链路层主要是实现can协议部分,具体见第三节。can物理层主要功能是将数据链路层的TTL信号转换为can差分信号。在soc中得can控制器就是工作在can数据链路层,还需要外接一个can收发器,收发器就是工作在can物理层,至于为什么不把can物理层集成到soc中,可能是因为物理层是有模拟电路实现体积较大,不好集成。这个和以太网的数据链路层和物理层相似,具体见链接:https://www.cnblogs.com/YYFaGe/p/16289035.html

  

二、can 2.0物理层

2.1can总线的电气信号

  can物理层最重要的功能就是TTL信号和差分信号的相互转换,那么TTL信号和差分信号是如何对应的呢?can2.0总线有iso11898和iso11519标准,如果没有特殊说明,一般都是iso11898标准。如下所示,

  

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

 2.2can终端电阻

  为减少信号在can总线上的反射,需要在总线两端各加一个终端电阻,一般是120欧姆。如下所示:

  

 

三、can 2.0数据链路层

  can数据链路层实现了can协议的大部分内容,包过发送竞争机制,校验等。

3.1 can报文帧种类与帧格式解析

  can 2.0报文分为以下几种:

  

  3.1.1 数据帧帧格式

  can报文中用的最多的就是数据帧,数据帧可分为标准数据帧和扩展数据帧。标准帧的帧ID长度道是11位,也就是帧ID的范围是000-7FF。扩展帧内的帧ID长度是29位,也就是帧ID的范围是0000 0000-1FFF FFFF。

  can报文数据帧的格式如下所示:

  

   一帧完整的数据帧包含帧起始、仲裁段、控制段、数据段、CRC段、ACK段、帧结束。一帧报文是传输的基本单位,每次都收发一帧完整的帧报文。

  1、帧起始:帧起始由一位显性位组成,can总线在空闲的时候为隐形,如果摸个节点要通讯,就把总线拉低成显性,表示通讯的开始,这时总线上的所有节点就开始同步接收。

  2、仲裁段:仲裁段可设置id过滤,总裁端各个细分位作用如下所示

    

    RTR:远程帧标志位,显性(0)代表数据帧,隐性(1)代表远程帧

    SRR:替代远程帧标志位,与RTR功能一致

    IDE:扩展帧标志位,显性(0)代表标准帧,隐性(1)代表扩展帧

  3、控制段:控制段中主要是说明数据段的数据长度,数据段数据长度可以是1~8个字节。

    

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

  5、CRC校验段:CRC段有16bit组成,1~15bit存放从起始到数据段的校验值,第16bit是CRC界定符。如下所示:

    

  6、ACK段:ACK段有两个bit组成,第一个bit是应答结果,第二个bit是ACK的界定符。对于发送节点ACK端段发送隐性电平,接受节点则发送线性电平作为应答。

    

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

   3.1.2 远程帧格式

   远程帧用于请求对方数据,因此,远程帧只是一个请求,并没有数据内容。远程帧的格式如下所示:

  

 

 

4 、CAN FD 物理层

  can fd物理层与can 2.0基本一致

 

5、CAN FD 数据链路层

5.1 can报文帧种类与帧格式解析

  can fd没有了远程帧,其它与can 2.0一致。

  5.1.1 数据帧帧格式

  

   canfd 设计上完全兼容can 2.0,can fd的帧格式和can 2.0一样分为帧起始、仲裁段、控制段、CRC段、ACK段、帧结束。

  1、帧起始:与can 2.0一致,由一位显性位组成

  2、仲裁段:can fd 的仲裁段与can 2.0一致

  

 

  RRS:远程帧标志位,与can 2.0的RTR一致,,显性(0)代表数据帧,隐性(1)代表远程帧

  SRR:替代远程帧标志位,与RRS功能一致

  IDE:扩展帧标志位,显性(0)代表标准帧,隐性(1)代表扩展帧

  3、控制段:

  

  FDF:区分can 2.0还是can fd,隐性位can fd,显性位can 2.0。

  res:保留位

  BRS:是否为可变波特率,隐性表示为可变波特率

  ESI:错误指示标志位,隐性表示节点处于错误状态
  DLC:数据长度

  4、数据段:

  can fd的数据段将can 2.0的8字节扩展到64字节

  5、校验段

  

  6、ACK应答段:应答段与can 2.0有些不一致,两位都为显示也表示接收到正常数据

  7、帧结束:帧结束有连续7bit隐性位组成,与can 2.0一致

  

6 can总线仲裁与竞争机制

6.1 can总线竞争机制

  can总线上 的节点都是自由发送数据的,各个节点是何时才能发送数据能?各个节点只有在总线空闲的时候才能发送数据。上面的can报文结构中可以看到,每帧can报文都有连续7bit隐性位组成的帧结束段。帧结束段后还有3bit的隐性位组成帧间隔,ACK段中又有1bit的隐性位,所以一帧can报文结束后总共有11bit隐性位。如下所示:

  

  当can节点检测到连续11bit的隐性位后就代表总线空闲,可以发送报文。如果数据段中也有连续11bit的隐性位岂不是会发生误判?在2.3节中,can协议有填充位的规定,所以can报文中不会出现连续5个以上相同的电平。

6.2 can总线仲裁机制

  can总线上的所有节点都能自由的向can总线发送数据,这样就存在发送数据竞争问题,有竞争就会有仲裁。can总线是非破坏性的仲裁机制,不会对数据造成破坏。can总线的仲裁发生在can数据帧的仲裁段,采用“线与”机制,id越小的can报文优先级越高。can节点在发送数据同时会监听总线上的数据,如果总线上的数据与自己发送的不一致就退出竞争。例如A、B两个节点同时向总线发送数据,根据线与机制,如果A和B同时发送1则实际发送1、若有一个发送0,则实际发送0。假设A节点发送数据的id为0010 0011(b),B节点发送数据的ID为0011 0101(b),can总线发送的bit顺序是MSB,也就是由左往右发送。前三个bit 两个节点都一样都是 0 0 1,因此根据线与机制,总线上实际电平也是0 0 1,发送到第四个bit时,A发送的是,0而B发送的是1,根据线与机制,实际发送的是0,节点在发送数据同时也会将总线上的数据取回来跟自己发送的进行对比,这时A发现自己发送的和总线上的一样,都是0,而B节点则发现自己发送的跟总线上的不一样,则B就认为自己总线竞争失败,转换为接收模式。从这里也可以看出,为什么id小的节点优先级高。

  

 

7、can填充位和采样点

7.1 can 填充位

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

7.2 can采样点

  

 

   例如波特率为500kbps,那么1bit电平的持续时间为2us。在这持续2us电平中何时采样呢?是t1时刻还是t2时刻?这就涉及采样点的问题。can协议中,将1bit的电平分为四段: 

同步段(sync_seg )

传播时间段(prop_seg )

相位缓冲段1(phase_Seg1 )

相位缓冲段2(phase_Seg2)

  

以上将1bit电平时间分为10等分,1等分称为1个Time Quantum(Tq).为方便编程,很多厂家将prop_seg和Phase_Seg1合在一起为TSEG1,phase_Seg2称为TSEG2.如下所示:

  

sync_seg通常是固定的1Tq,在配置can控制器时就是通过设置TSEG1和TSEG2的值来设置波特率,位时间=(1+TSEG1+TSEG2)*Tq。波特率=1/位时间。设置TSEG1和TSEG2时需要遵循一定的规则:

  1、TSEG1>TSEG2

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

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

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

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

  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

 

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

  can报文的字节顺序格式分为Intel格式和Motolola格式。例如A向B发送0x12A0,对于Inter格式来说先发送0xA0再发送0x12。对于Motolola格式则先发送0x12,再发送0xA0.Inter模式相当于小端模式,Motolola模式相当于大端模式。

9、实际使用过程中可能遇到的问题及解决方法

9.1 can通讯不上可能的原因

  1、波特率不匹配

  2、终端电阻没接或不匹配

  3、can协议不一致,一个是can 2.0 另一个是can fd

 

9、can 2.0和can fd区别 

  1、can fd的数据长度有can 2.0的8字节扩展到64字节

  2、can fd的通讯速度支持可变方式,分为标称比特率(Nominal Bit Rate)和数据比特率(Data Bit Rate),标称比特率也叫仲裁比特率,是在仲裁段使用的比特率,最高和can 2.0一样也是1Mbps,而数据比特率最高可以提高到5Mbps。

 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
CAN-FD 前世今生及特点详解
CAN FD升级之后通讯距离会缩短吗?
干货分享:CAN总线详解 整车的控制只需要一条线
什么情况会导致CAN错误帧?
CAN波特率计算问题
一文读懂CAN通讯协议
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服