线束工程师要了解的CAN总线协议基础原理

网络架构评论3字数 1704阅读模式
线束工程师必备资料包

本文说的CAN即是一种总线,也是一种协议。因此,我们常听见CAN总线,也常听见CAN协议。本CAN协议和CANOpen协议是两套不同的协议。从软硬件层次来划分,CAN协议属于硬件协议,而CANOpen属于软件协议本文文线束工程师之家网将概述CAN网络,让大家对CAN总线协议有一个全局的概念,再到底层的CAN总线协议知识。

 文章源自线束工程师之家-https://www.suncve.com/basic-principle-of-can-bus-protocol/

1CAN网络

CAN网络可以理解为多台CAN设备连接在同一条CAN总线上组合成的网络,其中的CAN设备我们称之为节点。CAN网络拓扑结构如下图:文章源自线束工程师之家-https://www.suncve.com/basic-principle-of-can-bus-protocol/

文章源自线束工程师之家-https://www.suncve.com/basic-principle-of-can-bus-protocol/

如上图,一个CAN节点主要包含三类:MCU应用程序、CAN控制器、CAN收发器
1. MCU应用程序
MCU应用程序我将其分为三块:业务逻辑代码、协议层代码、底层驱动代码
A.业务逻辑代码:是根据项目需求而定,也很好理解。比如我读取一个传感器数据,并对其做出相应逻辑处理。
B.协议层代码:比如后续要讲述的CANOpen。
C.底层驱动代码:配置CAN总线相应参数、控制收发的代码。
2.CAN控制器
CAN控制器内部结构还是挺复杂的,一般现在CAN控制器都是与处理器集成在一起
其实对于编程的人来说,无非也就是包含一些控制、状态、配置等寄存器。
比如我们看到有些STM32芯片带有CAN,也就是说CAN控制器已经集成在STM32芯片中了,我们只需要编程操作其中的寄存器即可。
3.CAN收发器
CAN收发器:将CAN收发引脚(CAN_TX和CAN_RX)的TTL信号转换成CAN总线的电平信号
PS:你可以把CAN总线通信认为是UART通过485进行通信:CAN控制器就如UART的控制器,而CAN收发器就如485转换芯片。

2ISO标准化的CAN协议

写这一章节的主要目的就是想让大家了解CAN总线位于OSI所在层次。文章源自线束工程师之家-https://www.suncve.com/basic-principle-of-can-bus-protocol/

 文章源自线束工程师之家-https://www.suncve.com/basic-principle-of-can-bus-protocol/

1.ISO/OSI基本参照模型文章源自线束工程师之家-https://www.suncve.com/basic-principle-of-can-bus-protocol/

文章源自线束工程师之家-https://www.suncve.com/basic-principle-of-can-bus-protocol/

【注】文章源自线束工程师之家-https://www.suncve.com/basic-principle-of-can-bus-protocol/

ISO:International Standardization Organization国际标准化组织;文章源自线束工程师之家-https://www.suncve.com/basic-principle-of-can-bus-protocol/

OSI:Open Systems Interconnection开放式系统间互联;文章源自线束工程师之家-https://www.suncve.com/basic-principle-of-can-bus-protocol/

 

2.CAN在OSI模型中的定义

【注】

LLC:Logical Link Control逻辑链路控制;

MAC:Medium Access Control媒介访问控制;

 

从上图可以知道CAN总线底层硬件的内容(CAN控制器、收发器)主要位于OSI的第1层和第2层。

3概述CAN总线协议

CAN总线协议:就是为了保证通信(收发)数据在CAN总线上能稳定传输而制订的一套协议。

 

CAN总线协议的内容很多,为方便初学者理解,本文先大概描述一下CAN总线协议,后续文章详细讲述CAN总线协议的内容。

1.总线信号
CAN总线为「两线」「差分」信号,用隐形代表逻辑1,显性代表逻辑0。如下图:

 

2.优先级

假如某一时刻,一个设备(节点)往总线发0,一个设备往总线发1。那么总线会呈现什么现象?

答案:最后总线呈现为显性,也就是0。

3.位时序

位时序逻辑将监视串行总线,执行采样并调整采样点,在调整采样点时,需要在起始位边沿进行同步并后续的边沿进行再同步。

简单的说就是对一个bit位分几段进行采样,目的就是提高数据传输稳定性。在STM32中底层驱动代码就需要进行位时序编程,在STM32参考手册中也会发现如下位时序图:

 

4.帧的种类和格式
帧的种类有多种:
数据帧:用于发送单元向接收单元传送数据的帧。
遥控帧:用于接收单元向具有相同 ID 的发送单元请求数据的帧。
错误帧:用于当检测出错误时向其它单元通知错误的帧。
过载帧:用于接收单元通知其尚未做好接收准备的帧。
帧间隔:用于将数据帧及遥控帧与前面的帧分离开来的帧。
数据帧和遥控帧有标准格式和扩展格式两种格式。标准格式有11个位的标识符ID,扩展格式有29个位的ID。
 
5.位填充
位填充是为防止突发错误而设定的功能。当同样的电平持续 5 位时则添加一个位的反型数据。如下图:

 

6.错误的种类

 

CAN总线协议内容很多,初学者可以先了解这些,希望对你有所帮助。
推荐阅读:
一文搞懂CAN总线的AUTOSAR网络管理
CAN、LIN、FlexRay、TTP总线的特点比较
基于CAN的网络管理(network management)
weinxin
我的微信
立即关注公众号线束工程师:
1、免费领取线束设计资料包(资源); 2、进入线束技术交流专家群(进群);3、免费获取发布求职招聘信息。
线束工程师进群
 
汽车CAN 总线故障诊断分析 网络架构

汽车CAN 总线故障诊断分析

高压部件的加入,主要有动力电池、车载充电机、直流转换器、驱动电机等,这些部件是传统车上所没有的,而它们之间的信息通信依然使用的是CAN总线系统,即所谓的新能源CAN。本文线束工程师之家网以吉利EV45...
车载以太网:解决复杂线束并支持更多的数据 网络架构

车载以太网:解决复杂线束并支持更多的数据

  如果你曾经有机会观察过汽车线束中乱七八糟的东西,你就会知道这些东西可能非常庞大;数百根电线都用扎带捆绑在一起,希望你永远不必剪断这些电线,以免划伤内部敏感的屏蔽层。   这些捆绑包占用了汽车底盘内...
电子电气架构设计的取与舍 网络架构

电子电气架构设计的取与舍

我理想中的电子电气架构是什么样子的?这个课题我自己思考过很多次,但是每次都是一些零散的想法,然后因为一些偶然的发现,又自己否定了自己。然后我发现这个事情就跟一千个人眼中就有一千个哈姆雷特一样,没有标准...
聊聊汽车以太网的互连要求 网络架构

聊聊汽车以太网的互连要求

汽车以太网互连解决方案需要小型化、轻量化、模块化,针对高速汽车系统进行优化,并与自动化装配流程兼容。连接性、自动驾驶和电气化,这三大全球大趋势,正在将汽车转变为终极智能设备。汽车以太网连接扩展到整个车...
线束工程师必备资料包

发表评论