CAN总线之理论篇(一)

CAN总线之理论篇(一)

前段时间负责即将发布的SoC上CAN总线模块的开发,截止目前为止,整个驱动模块不管在裸机还是在Linux下测试性能都很稳定,并且整个底层代码完善了代码规范,前期基本上算告以尾声。在这个开发过程中有很多记录,在此和大家交流分享一下。

CAN总线是啥?

为了知识的完备性稍微了解下背景,网上一搜一大堆。

  • CAN总线是由德国研发和生产汽车电子产品著称的BOSCH公司开发的, 此后CAN协议经过 ISO 标准化后有两个标准:ISO11898标准 和 ISO11519标准。 现在已是汽车网络的标准协议,同时是目前国际上应用最为广泛的现场总线之一。

  • 引用一个比喻:把汽车比如成人体,那CAN总线就是神经系统,电子控制单元(ECU)就是身体的一部分,身体是由多个ECU组成的,各个ECU之间通过神经系统进行通信,一个部分感知到的信息可以与另一部分共享。

  • CAN 是 Controller Area Network 的缩写(以下称为 CAN),是ISO国际标准化的串行通信协议。

  • CAN 在汽车上的应用示例
    在这里插入图片描述

  • CAN总线基本结构
    在这里插入图片描述

CAN总线协议分析

CAN总线协议如下表所示涵盖了ISO规定的OSI基本参照模型中的传输层、数据链路层及物理层。后续内容大致依次按照此顺序展开。
在这里插入图片描述

物理层

  • 首先CAN总线通信是没有时钟信号来进行同步的(即异步通信)和IIC及SPI等具有时钟信号通信方式不同。

  • 如上面“CAN总线基本结构” 图所示, 连接在CAN总线上的设备叫做节点设备(CAN Node),CAN的通信节点由一个CAN控制器和一个CAN收发器组成一般CAN控制器集成在主控芯片内部,需要外接CAN收发器(也有部分集成在芯片内部的,感兴趣的自行查找)。同时CAN总线只具有CAN_High和CAN_Low一对差分信号线,线上传输为对称的差分电平信号。其中CAN收发器的作用则是把逻辑信号转换为差分信号:
    在这里插入图片描述

  • 上面说到CAN协议经过ISO标准化后有两个标准:ISO11898标准和ISO11519-2标准。二者对于数据链路层的定义相同,但物理层不同。ISO11898是针对通信速率为125Kbps~1Mbps 的高速通信标准,而 ISO11519-2是针对通信速率为 125Kbps以下的低速通信标准。物理层特征如下所示:
    在这里插入图片描述
    放大上图电平部分如下所示:
    在这里插入图片描述
    发送数据时,CAN控制器把需要发送的二进制编码通过CAN_TX信号线发送到CAN收发器上,再由CAN收发器把TTL逻辑电平信号转换为CAN差分信号CAN_High 和CAN_Low发送到CAN总线上。接收数据的过程则与发送数据的过程相反。

  • 所谓的差分信号,即信号的逻辑“0”和逻辑“1”不再是单纯的与地线电压比较的低电平和高电平,而是根据两条差分信号线的电压差决定逻辑“0”和逻辑“1”。如上所示,不同标准的CAN,其物理层信号也有所差异,以ISO11898协议为例,隐性(逻辑“1”)时,CAN_High 和CAN_Low 电压都为2.5 V,即两者的电压差 VH - VL= 0;显性(逻辑“0”)时,CAN_High电压为 3.5 V,CAN_Low为1.5V,即电压差 VH - VL= 2 V。所以判别CAN总线是逻辑“1”还是逻辑“0”不是依靠CAN总线信号的电压值,而是CAN 总线两条总线的电压差。

  • 关于CAN总线“线与”逻辑的说明:总线上执行逻辑上的“线与”时,显性电平的逻辑值为“0”,隐性电平为“1”。“显性”具有“优先”的意味,只要有一个单元输出显性电平,总线上即为显性电平。并且“隐性”具有“包容”的意味,只有所有的单元都输出隐性电平,总线上才为隐性电平(显性电平比隐性电平更强,优先级更高)。

CAN报文(message)种类

CAN总线物理层非常简洁,仅采用两根差分线来组成一个数据通道。与USB协议相同(后续看项目情况,可能更新USB协议内容),物理层决定了CAN总线必须配套更加复杂的上层协议,即对数据和操作指令打包。CAN总线以 “帧”(Frame)的形式进行通信。CAN总线协议规定了5种帧,分别是数据帧、远程帧、错误帧、超载帧以及帧间隔,其中数据帧最常用,下表是各个帧的用途。
在这里插入图片描述

数据帧有 标准格式(CAN2.0A)扩展格式(CAN2.0B) 两种格式。标准格式有11个位的标识符(ID),扩展格式有29个位的ID。扩展格式的基本ID和标准格式的ID相同。禁止高 7 位都为隐性(禁止设定:基本 ID=1111111XXXX)。数据帧一般由7个段构成,如下所示:
在这里插入图片描述
分段介绍如下:

帧起始——SOF

在这里插入图片描述

仲裁域——ID

在这里插入图片描述

仲裁域——SRR

在这里插入图片描述

仲裁域——IDE

在这里插入图片描述

仲裁域——RTR

远程帧没有数据段。
在这里插入图片描述

控制域——r0,r1

在这里插入图片描述

控制域——DLC

在这里插入图片描述

数据域

在这里插入图片描述

CRC域

在这里插入图片描述

CRC界定符

在这里插入图片描述

ACK域

在这里插入图片描述

帧结束——EOF

在这里插入图片描述

帧间空间——ITM(Intermission)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

铁头小哥

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

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

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

打赏作者

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

抵扣说明:

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

余额充值