原文地址:CAN协议标准及相关内容 (qq.com)https://mp.weixin.qq.com/s/dC5GPowxvuTGr-La33auRw

CAN协议标准及相关内容

当要深入CAN通讯功能时,就必须得介绍下CAN2.0协议标准和ISO 11898标准。为什么呢?因为只有通过这些协议标准才能掌握CAN通讯的基石,更好地了解CAN通讯功能的硬件与软件。当去了解这些协议标准时,发现CAN通讯框架是基于OSI参考模型来设计。那么什么是OSI参考模型?它有什么作用?接下来从OSI参考模型开始了解。

1. OSI 参考模型

OSI参考模型是一个逻辑上的定义,一个规范,它把网络从逻辑上分为七层,每一层都对应着不同的作用,这七层分别为应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。对OSI七层网络模型的定义,对后续的各种网络技术的评判和分析提供了依据,也是学习网络技术的基础

OSI参考模型的七层协议的分层目的是为了解决异种机互连的问题,包括互连时所遇到的兼容性问题。分层的最大优点是将服务、接口和协议这三者明确地区分开。

在这个参考模型的数据传输过程当中,不同主机对等层之间会按照协议进行通信,同一主机的不同层之间通过接口进行通信。在这个模型中,每一层将上一层传递过来的通信数据加上若干控制位后再传递给下一层,最终由物理层传递到对方物理层,再逐级上传,从而实现了对等层之间的逻辑通信。

图1 OSI 参考模型,来源不详

考虑到作为汽车底层网络,其信息传输量相对较少,信息传输的实时性要求较高,网络连接方式相对较简单,因此,CAN总线网络底层只采用了OSI 7层参考模型的最低两层,即物理层和数据链路层,而在高层只有应用层。物理层和数据链路层的功能可由CAN接口器件来实现,应用层的功能是由微处理器实现的。这里先了解下物理层和数据链路层:

1)物理层

物理层是OSI参考模型中最底层,主要定义了系统的电气、机械、过程和功能标准。如:电压、物理数据速率、最大传输距离、物理联接器和其他的类似特性。物理层的主要功能是利用传输介质为数据链路层提供物理连接,负责数据流的物理传输工作。物理层传输的基本单位是比特流,即0和1,也就是最基本的电信号或光信号,是最基本的物理传输特征。

图2 物理层与CAN通讯相关的内容,引自[1]

2)数据链路层

数据链路层是在通信实体间建立数据链路联接,传输的基本单位为“帧”,并为网络层提供差错控制和流量控制服务。数据链路层由MAC(介质访问控制子层)和LLC(逻辑链路控制子层)组成,其中MAC的主要任务是规定如何在物理线路上传输帧,LLC对在同一条网络链路上的设备之间的通信进行管理。数据链路控制子层主要负责逻辑上识别不同协议类型,并对其进行封装,也就是说数据链路控制子层会接受网络协议数据、分组的数据包并且添加更多的控制信息,从而把这个分组传送到它的目标设备。

图3 数据链路层与CAN通讯相关的内容,引自[1]

到此我们就对OSI参考模型的物理层和数据链路层有了基本的概念,那么CAN协议标准都对物理层和数据链路层做了什么定义呢?下面来具体了解:

2. ISO 11898 标准

1991年,Bosch发布CAN 2.0 标准协议,随后 ISO 标准化了 该协议,发布了ISO 11898 和 ISO 11519 两种标准。这两种标准对数据链路层的定义相同,但物理层不同。这里我们主要关心CAN总线标准对数据链路层的定义,故下面只选取 ISO 11898 进行分析即可,如图4。因为 ISO 11898-2,3,4主要是针对于CAN总线的物理特性,电气特性等,不在本系列文章讨论范围内,故只考虑 ISO 11898-1,对应于OSI参考模型的数据链路层和物理层情况如图5所示。

图4 ISO 11898: 2003(E)

图5 ISO11898-1对应的OSI参考模型的物理层和数据链路层,引自[2]

由图5可知,CAN通讯的物理层定义信号怎样传输;数据链路层的LLC子层的功能主要是报文滤波、超载通知和恢复管理;MAC子层的功能主要是传送规则,即控制帧结构、执行仲裁、错误检测、出错标定和故障界定,是实现CAN协议的核心。

下面具体了解下ISO 11898-1标准,本文主要关注3块内容:

1)服务原语

请求(request),即服务用户向服务提供者发起请求服务;

通知(indication),即服务提供者向服务用户通知一个对其重要的服务提供者内部事件;

确认(confirm),即服务提供者向服务用户传达先前请求服务的结果,是成功还是失败,是完成还是未完成。

通俗地讲,发送时,用户先请求提供者,然后提供者发送,再向用户确认;接收时,提供者通知用户,如下图6。当信息经过LLC或MAC传输,即发送或者接收,同样地遵循上述的规则,所以在此先介绍这三条服务原语,为后续LLC和MAC的描述做铺垫。

图6 服务原语的使用示意

2)LLC子层

LLC子层提供两种无连接模式传输服务,分别为Unknowledged data transfer service和Unacknowledged remote data request service,这里我们就关注前者,对于这种服务会使用LLC data frame,用来发送和接收。

根据上述服务原语的描述,我们知道发送数据时,LLC用户传输数据给LLC子层,并请求LLC子层发送,当LLC子层发送数据后,向LLC用户确认发送状态。当接收数据时,LLC子层通知LLC用户有数据到达。这里每条服务原语对数据有怎样的规定呢?下图7做了清晰的定义。

图7 LLC子层服务原语,引自[2]

到此我们就知道了LLC子层的发送与接收过程。另外,LLC子层可以与对等的LLC实体交换数据单元的,也就是交换LLC数据帧。

图8 LLC子层的数据传输类型

一个LLC数据帧由3个位段(bit field)组成,即id,长度和数据3段,基本对应于上篇文章的CAN协议帧的三段,其中id段稍有不同,它包含3个部分:基本id,扩展flag和扩展id,但在MAC子层会将id段处理成CAN协议帧的id段格式。

图9 LLC数据帧,引自[2]

3)MAC子层

MAC子层是OSI DLL的最底层部分,介于LLC子层和PLS子层间,因此提供了访问这两层的接口,另外也提供了打包接收数据/解包发送数据,接收/发送介质访问管理等功能,如下图10。

图10 MAC子层的功能,引自[2]

与上述LLC子层同样的思路,LLC与MAC间的数据传输使用的服务原语如下所示:

图11 MAC子层的数据传输类型,引自[2]

图12 MAC子层服务原语6

回看图10可知道,MAC子层分为两条完全独立的操作部分,即发送和接收。MAC发送或接收的数据帧就是上篇文章所述的CAN协议帧,即如下图13所示。

图13 MAC数据帧结构,引自[2]

对于发送部分,MAC子层要实现:数据打包和发送介质访问管理。

数据打包,包括:LLC数据帧的接收;CRC序列计算;MAC数据帧的构建(即增加SOF,SRR位,IDE位,RTR位,保留位,CRC,ACK和EOF到LLC数据帧)。

发送介质访问管理,包括:识别到总线空闲时发起发送;位填充;仲裁,仲裁失败转为接收模式;ACK检查等;向物理层发送一串位流(a serial bit stream)。

图14 发送部分,从LLC用户到物理层接口过程

对于接收部分:MAC子层要实现:接收介质访问管理和数据解包。

接收介质访问管理,包括:从物理层接收一串位流;删除填充的位;发送ACK等。

数据解包,包括:移除数据帧的MAC特定信息;把LLC数据帧和接口控制信息给LLC子层。

图15 接收部分,从物理层接口到LLC用户过程

上面提到了位填充(bit stuffing)和去位填充(bit destuffing),这里引用[4]的解释:

图16 位填充,引自[4]

通过上面的内容,我们就了解了CAN协议帧的由来,按照OSI参考模型来分层CAN通讯架构,CAN协议帧具体在哪层使用,如何使用(当然以上内容也将为后续的CAN通讯软件实现做了铺垫)。而且我们也知道CAN协议帧最终CAN接口器件来实现,那么具体是怎么通过硬件来实现?

3. CAN协议帧的相关寄存器

从基于AUTOSAR架构的软件开发,一般会涉及到与CAN协议帧有关的几种寄存器,比如与id对应的寄存器,与数据对应的寄存器和与长度对应的寄存器。也就是说通过对寄存器的了解,就可以很清楚地明白CAN协议帧是怎么通过硬件(寄存器)实现的。下面分别通过Infineon和NXP 飞思卡尔的用户手册稍作了解。

下图17为Infineon的仲裁寄存器定义:

图17 仲裁寄存器,引自[5]

下图18为Infineon的数据寄存器(低位)的定义。

图18 数据寄存器(低位),引自[5]

下图19为Infineon的功能控制寄存器,24-27位定义了DLC。

图19 功能控制寄存器中的DLC,引自[5]

NXP的用户手册中定义的CAN协议帧的寄存器如下图20:

图20 CAN协议帧相关的寄存器,引自[6]

下图21为NXP的标识符寄存器定义:

图21 标识符寄存器,引自[6]

下图22为NXP的数据段寄存器定义:

图22 数据段寄存器,引自[6]

下图23为NXP的数据长度寄存器定义:

图23 数据长度寄存器,引自[6]

CAN协议帧就这样通过寄存器来实现:发送时,从软件写入到寄存器(硬件);接收时,从寄存器读取到软件。

4. 整车控制器CAN通信报文与CAN协议帧

整车控制器CAN通信报文定义了控制器(比如VCU)与其他控制器(比如ECU,TCU,MCU等)通过哪些id通信,每条报文有多长,数据表示什么信号,不同信号值代表什么意思等信息,如下图24所示。

图24 整车控制器报文示意

也就是说整车控制器CAN通信报文首先必须基于CAN协议帧来定义的,其次它赋予每一条CAN协议帧的实际意义,即不同id的帧数据段代表着不同的物理意义。当然这些并不在物理层和数据链路层实现,而是在应用层来实现,也就是通过软件实现物理层数据的解析。

5. 总结

到此我们就了解到了与CAN协议帧相关的协议标准,寄存器和整车控制器CAN通信报文。基于这些内容就基本可以实现一个简单版的CAN通讯功能,即接收功能:从读取相关寄存器的数据,最终传给应用层,将数据解析成具有意义的信号;发送功能:将应用层信号转换成规定的数据形式发送,写入寄存器,再向应用层确认。

写到此也产生了一个问题:数据最终发送方是以显隐性电平形式逐位地发送到总线上,那么接收方是怎么正确地接收这一位一位的总线电平呢?下篇文章将回答这个问题,即介绍ISO 11898-1中有关物理层PLS的内容。

CAN协议标准及相关内容相关推荐

  1. Qt虚拟键盘相关内容

    收集一些关于Qt虚拟键盘的内容,仅供参考.   商业版什么时候就有? Qt虚拟键盘(1.0版本)最早出现在Qt Enterprise Embedded 5.3.0中(2014-05-22)   开源版 ...

  2. Python3 标准库及相关内容

    一 .标准库相关 1.操作系统相关接口         操作系统模块,及 os 模块,在引用该模块时,建议使用 " import os" 风格而非 " from os i ...

  3. Web服务器——Apache相关内容详解

    1.相关名词介绍 1)什么是Web服务器? Web服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,可以向浏览器等Web客户端提供文档, 也可以放置网站文件,让全世界浏览:可以放置数据文 ...

  4. Network 之一 国际标准组织介绍、互联网/因特网、以太网概念区分、协议标准

      在学习计算机网络时,互联网.以太网.因特网.万维网.局域网.城域网.广域网等这些概念常常对理解计算机网络造成很大的困扰.并且在很多文章中,这些概念经常被混为一谈.但是当我们深入了解计算机网络时就会 ...

  5. OASIS协议标准文档的解读_第一部分

    译者注: 利用2022年圣诞假期,终于解读完OASIS标准协议的文档.本翻译文档基于SEMI 草案标准 3626  (2003/04/23).  因为SEMI的原版标准草案涉及到版权的一些问题,并不是 ...

  6. RDMA简介相关内容

    RDMA简介 DMA 简单的说一下DMA(Direct Memory Access),直接内存访问. 即通过DMA Enigne 能够将主板上的设备数据不通过CPU直接将数据搬运到内存当中. DMA的 ...

  7. openssl的应用及私有CA相关内容

    以CA为核心生成的一套安全架构体系我们称之为: PKI:Public Key Infrastructure,公钥基础设施:其包含的内容: 1.签证机构:CA 2.证书注册机构:RA 3.证书吊销列表: ...

  8. App Store审核指南中文版(2014.9.10更新):新增Apple Pay相关内容

    苹果在9月3日对App Store审核指南进行了重大更新,新添加了扩展.HealthKit.HomeKit以及TestFlight相关内容.另外,在9月10日新品发布会之后,苹果再次更新了App St ...

  9. 华为服务器协议标准,配置服务器的标准和要求

    配置服务器的标准和要求 内容精选 换一换 简要介绍Rsyslog是一个集中日志管理工具,基于流行的服务端/客户端模式,通过TCP或者UDP传输协议来发送日志信息,或者从网络设备.服务器.路由器.交换机 ...

最新文章

  1. 零基础入门学习Python(29)pickle模块
  2. ISME:宏基因组探究美洲河狸粪便微生物
  3. volatile,可变参数,memset,内联函数,宽字符窄字符,国际化,条件编译,预处理命令,define中##和#的区别,文件缓冲,位域
  4. [蓝桥杯][2015年第六届真题]表格计算(递归+记忆化)
  5. 【Spring】详解ContextLoaderListener和DispatcherServlet的区别
  6. 命令行运行命令时报错You don#39;t have write permissions for the /Library/***
  7. linux代码windows能跑吗,能不能帮忙改一下下面这些代码,原来是在windows系统上运行的,要让它能在linux上终端跑。该如何处理...
  8. 马云入选全球“十大思想者”,成唯一获选的中国企业家
  9. rocketmq生产者发送到哪个队列
  10. 大数据技术原理与应用-林子雨课后(部分习题答案)
  11. DIY一个正弦表计算器,用于单片机查表生成正弦波
  12. c语言for循环延时函数作用,C语言循环语句实现单片机延时函数.pdf
  13. ExactScan Pro 18.12.24 Mac 破解版 万能扫描仪整合工具
  14. ps2键盘测试软件,PS2键盘51测试程序1
  15. SAP FI 系列 007:会计科目主数据维护
  16. 代码的版权声明怎么写
  17. github 邮箱_GitHub基本操作(一)
  18. A recap of native memory
  19. JetPack知识点实战系列十:ExoPlayer进行视频播放的实现
  20. 考研复试之路:不努力怎敢轻易言弃

热门文章

  1. 自定义linux iso,制作自定义的ISO镜像(Centos 7.6)
  2. 2 Docker镜像的制作和使用说明
  3. 机器学习平台系列(六) - 再探 Jupyter Lab:在 CentOS 下制作 Docker 镜像
  4. 踩坑~CSS~8 位16 进制颜色
  5. python 脚本自动切换windows代理设置
  6. VBA 数组合并 和 用dict 去重数组
  7. I'm Da One 完整版-赵权(2AM)
  8. 用Application保存数据
  9. WPS 字符串拼接详解(concat、concatenate)
  10. python twisted是什么_Twisted基础介绍(一)