怪不得那些汽车厂商的嵌入式岗位基本都是要求会CAN的

转载自:https://mp.weixin.qq.com/s/qbN0-BtQ_q2GYEV7V_o5WA

干货分享:CAN总线详解 整车的控制只需要一条线

土豆居士 一口Linux 昨天

CAN(“Controller Area Network”,控制器局域网)

作用:将整车中各种不同的控制器连接起来,实现信息的可靠共享,并减少整车线束数量。可以设想一种极端情况,如下图所示:

如:果整车上所有的用电设备都是一个独立的CAN总线节点,并且每一个节点都向外发送自己当前的状态,并接受来自外部的信息, 那么整车的控制只需要一条CAN总线控制线和电源线就可以了!

CAN总线的基本工作原理

CAN总线的通信通过一种类似于“会议” 的机制实现的,只不过会议的过程并不是由一方(节点)主导,而 是,每一个会议参加人员都可以自由的提出会议议题(多主通信模式),二者对应关系如下:

CAN总线工作流程

CAN总线的优势

  • 数据传输速度高1Mbit/s,距离远

  • 抗干扰能力强(差分数据线)

  • 具有自我诊断能力(错误侦测)

CAN总线网络结构

01 CAN总线网络节点结构

02 为何CAN收发器

照BOSCH CAN总线标准将0或1逻辑信号转换为标准中规定的电平,同时有反馈功能

CAN总线上的电平

CAN2.0A/B标准规定:总线空闲时,CAN_H和CAN_L上的电压为2.5V

在数据传输时,显性电平(逻辑 0):CAN_H 3.5V CAN_L 1.5V

隐性电平(逻辑 1):CAN_H 2.5V CAN_L 2.5V

03总线长度的思考

影响总线长度的主要因素:

(1)CAN总线通信的应答机制,即成功接收到一帧报文的节点必须在 应答场的”应答间隙“期间发送一位“显性位”表示成功接收到一帧数据

如:通信速率为250Kbit/s,传送一个bit所需时间为:1/250×1000 = 4μ 那么,该信号在总线上的延时时间必须小于(2μ?)才能保证发送节点成功的在应答间隙期间接收到该“显性电平”。

任何一根导线都可以简化为左图所示的电路模型,可以看到,其中既有电感又有电容,因此,电流在其中传输并不是光速,而是需要一定的时间。

对于双绞线而言,信号在其中的传播延时时间约为,5ns/m(典型值)。当通信速率达到1Mbit/s时,40m的总线长度, 延时时间就达到200ns,而允许延时时间为600ns左右,还是不能不考虑的!

由上面的分析可知:

总线通信速率越高,通信距离越短,对物理传输线的要求就越高,在双绞线、屏蔽线还是其他的传输线选择上,通信速率是一个很关键的参数。

影响总线长度的其他因素:

  • 信号在节点ECU内部的延时时间

  • 振荡器的容差(各个节点ECU内部晶振频率的差别) 这些因素加起来就形成了CAN总线通信中总的信号延时。

CAN总线的硬件抗干扰

共模电感作用:共模电压有较大的感 抗,差模电压感抗为零,相当于电感滤波。对共模电流有较大的阻碍作用。

终 端 电阻 120 欧姆并非固定不变,这跟使用的导线有关!

总线长度的限制——位定时、同步

CAN总线控制器按照时间片的概念将每一个bit的时间划分成了n个时间片。这样做的目的就是为了实现CAN总线的同步、保证不同节点间时间的一致性。

如:晶振和CAN CLOCK,频率均为4MHz,那么每一个时间片最小时间就为0.25μs,通信波特率为250Kbit/s,那么每一个bit的时间就为4μs, 因此,每一个bit的总的时间片数目就为16。当然可以进一步提高晶振频率,使得每一个bit被划分的更加细致。

CAN2.0A/B将每一个bit的时间划分成了4段,同步段、传输段、相位段1和相位段2,每一段占用一定的时间片

Can总线报文帧结构

CAN总线共有四种报文:

1 数据帧

2 远程帧

3 错误帧

4 过载帧

数据帧定义

帧起始:1bit。从图中看出,在帧间隙后由逻辑1(至少两个bit)向逻辑 0 的跳变就被认为是帧起始,它的作用就是为了硬同步。

仲裁场:由29bit的ID标示符和IDE、SRR、RTR位构成。IDE位用于标示该帧是扩展帧(29bit ID)还是标准帧(11bit ID);SRR在扩展帧 中 为 一 隐 性 位 ;R T R 位 为 远 程 帧 标 志 位 。

由上图可以看出,11bit的基本ID首先被发送(ID28~ID18),然后在发送18bit的扩展ID(ID17~ID0)

CAN总线的仲裁机制

要点

(1)首先发送ID的29位,优先级问题

(2)总线电平由谁决定

CAN总线总裁机制的实现也就实现了CAN总线的多主机模式,总线节点不存在谁主谁从的概念

注意:我们可以人为的给29位的ID赋予一定的意义从而区分不同的报文类型!

报文滤波

报文滤波可以通过软件编程的方式实现,也可以通过硬件(芯片内部的报文滤波寄存器)实现,但二者实现的原理是相同的,如下图所示:

数据帧中的其他场作用

控制场:包括两位保留位(必须为0),和数据长度位(DLC0~DLC3) 数据场:包括最多8个字节的数据

CRC场:是一种算法,对数据进行CRC校验,共15bit,其后跟了一位CRC界定符——为1(隐性电平)

应答场:为两个1(总线电平为低电平),其中一位为应答间隙,另一位为应答界定符。成功接收到数据的节点必须发送一位显性位(总线电平为高电平)

来应答该发送节点,必须注意:该显性位必须在应答间隙期间, 即1bit的时间内将总线电平拉高。帧结尾:7个连续的1组成(隐性电平)

CAN总线的侦听机制—支持仲裁及错误检查

帧听就是发出去的数据再采样回来,比较采样回来的数据是否和发出的数据一致!

CAN总线错误检测

CAN总线通过如下几个方面进行错误检测

  1. 当节点赢得总线发送权后,会对总线电平进行检测,当发送的电平和检测到的总线电平不一致时,认为错误

  2. 出现6个连续相同的电平时,认为是填充错误

  3. CRC错误,接收数据的节点按照与发送数据的节点相同的方法计算数据的CRC校验值,如果接收节点的计算结果与数据包中CRC场的数据不一致, 认为是CRC错误

  4. 应答错误,在应答场如果没有监控到一个显性电平,那么就认定一个应答错误

  5. 固定位错误,例如:CRC界定符等,其电平是固定的,当监控到该电平不相符时,认定一个错误

另:总线同步机制也是CAN总线容错的一种方式

注意:通过上面5种错误检测机制,发送节点和接收节点均可以检测到总线上的错误,并通过错误的累加来实现总线节点的关闭等操作

CAN总线负载率计算

计算例子:

假设CAN总线波特率为250Kbit/s,总线报文发送时间间隔为10ms, 报文为数据帧(8个字节数据),那么10ms内总线能够支持的最大报文数量为多少?

第一步:根据通信波特率计算10ms总共可以发送多少bit (250000/1000)*10 = 2500bit

第二步:计算最长的一帧报文有多少个bit

1sof + 29id + 1ide + 1rtr + 1srr + 2r + 4dlc + 8*8data

+ 16crc + 2ack + 7eof = 128bit

第三步:计算10ms内可以支持的报文数目

2500/128 ≈ 19

由上面的计算可知,当10ms间隔的报文数量超过19条时,就会出现丢帧,总线饱和。

计算报文数量也是设计CAN网络所要考虑的,可以查阅相关文献看负载率在多少时合适

来源:头条 亿佰特物联网实验室

侵权删

CAN总线详解 整车的控制只需要一条线(怪不得那些汽车厂商的嵌入式岗位基本都是要求会CAN的)相关推荐

  1. RS485通信总线详解

    RS485 总线详解 RS-485 是美国电子工业协会(EIA)在 1983 年批准了一个新的平衡传输标准(Balanced Transmission Standard)也称作差分,EIA 刚开始将 ...

  2. AXI总线详解完结篇

    经过几个月的整理和发文,AXI总线详解系列正式迎来最终篇,内容基本涵盖了上一篇文章的全部内容. 所有文章的链接如下: 1. AXI总线详解 2.AXI总线详解-总线和接口以及协议 3.AXI协议中的通 ...

  3. linux驱动之总线详解

    linux驱动 第一章 linux驱动之设备与驱动 第二章 linux驱动之设备树与GPIO子系统 linux驱动之总线详解 linux驱动 一.总线bus 1.bus在linux中文件结构 2.bu ...

  4. CSS 长度单位的详解『你还是只会使用PX吗?(╬▔皿▔)╯』

    CSS 长度单位的详解『你还是只会使用PX吗?』 文章目录 CSS 长度单位的详解『你还是只会使用PX吗?』 一.CSS的长度单位

  5. python动态显示进度条_实例详解python如何轻松实现动态进度条

    本次的这篇文章主要是和大家分享了关于实例详解python如何轻松实现动态进度条,有需要的小伙伴可以看一下 思路及讲解 假设有一个1000000数据的列表(为了让进度条可以显示出来,很大的数据),我们每 ...

  6. ZYNQ_AXI4_Lite总线详解

    1,AXI总线与AXI接口以及AXI协议 总线,接口和协议,总线是一组传输通道,是各种逻辑器件构成的传输数据的通道,一般由数据线,地址线,控制线等组成.接口是一种连接标准,有常常被称之为物理接口.协议 ...

  7. AXI_Lite 总线详解

    12.1前言 ZYNQ拥有ARM+FPGA这个神奇的架构,那么ARM和FPGA究竟是如何进行通信的呢?本章通过剖析AXI总线源码,来一探其中的秘密. 12.2 AXI总线与ZYNQ的关系 AXI(Ad ...

  8. 米联客 ZYNQ/SOC 精品教程 S02-CH15 AXI_Lite 总线详解

    软件版本:VIVADO2017.4 操作系统:WIN10 64bit 硬件平台:适用米联客 ZYNQ系列开发板 米联客(MSXBO)论坛:www.osrc.cn答疑解惑专栏开通,欢迎大家给我提问!! ...

  9. XILINX AXI_Lite 总线详解

    本文转载自FPGA之家 12.1前言 ZYNQ拥有ARM+FPGA这个神奇的架构,那么ARM和FPGA究竟是如何进行通信的呢?本章通过剖析AXI总线源码,来一探其中的秘密. 12.2 AXI总线与ZY ...

最新文章

  1. matplotlib 子图超过4个_走进Matplotlib世界(四)
  2. DB性能调优之RAID比较
  3. [Nand Flash]软件ECC
  4. 高效开发者是如何个性化VS Code插件与配置的?
  5. 30个数据可视化小技巧(文末赠书)
  6. iOS开发中的富文本
  7. growup怎么读_growup..是什么意思
  8. 查看局域网内所有ip 和 mac
  9. zip()和enumerate()用于for-in中遍历可迭代对象
  10. 大学计算机考试必备,大学计算机基础大一考试必备题库
  11. android中小数怎么定义,android 如何保留数据两位小数
  12. u-boot中nand相关命令使用---- ubi, ubifsls, ubifsmount, ubifsumount
  13. Unable to process Jar entry [org/springframework/boot/autoconfigure/quartz/QuartzAutoConfiguration
  14. 一篇文章带你认识数学建模中的方程与方程组
  15. 【AAAI2021】Dual-Level Collaborative Transformer for Image Captioning
  16. shell文本编辑之awk
  17. 含有受控源的电路分析
  18. 国内20个最文艺小清新网站,推荐给你
  19. STM32 IIC协议 读写EEPROM
  20. linux配置指定ip访问指定端口号,操作系统linux和dos linux下通过iptables只允许指定ip地址访问指定端...

热门文章

  1. 《互联网金融投资理财一册通》一一2.2 使用余额宝赚钱实战
  2. 如何找客户?这6种常见寻找客户渠道你都了解吗
  3. Mac浏览器无法上网但可以用微信等
  4. Vue3.x全家桶之Vue组件化开发(二)
  5. 电脑删除照片怎么恢复
  6. php opp三个特点,opp3.php
  7. 汽车门店如何做好新客户开发和老顾客维护的问题?
  8. 2022年计算机一级WPS Office备考模拟试题卷及答案
  9. PS将PNG图片内外发光和变色
  10. 移动互联网手游市场火爆背后到底隐藏着什么秘密?