先看看工作原理

当 CAN 总线上的一个节点(站)发送数据时,它以报文的形式广播给网络中所有节点,对每个节点来说,无论数据是否是发给自己的,都对其接收。

每组报文开头的11 位字符为标识符,定义了报文的优先级,这种报文格式成为面向内容的编制方案。同一系统中标识符是唯一的,不可能有两个站发送具有相同标识符的报文,当几个站同时竞争总线读取时,这种配置十分重要。

大体的工作原理我们搞清了,但是根本的协议我们还要花一番功夫。下面介绍一个重要的名词,“显性”和“隐性”:

在我看到的很多文章里,有很多显性和隐性的地方,为此我头痛不已,最终我把它们彻底弄明白了。

首先 CAN 数据总线有两条导线,一条是黄色的,一条是绿色的------分别是CAN_High 线和CAN_Low 线,当静止状态时,这两条导线上的电平一样,这个电平称为静电平,大约为2.5 伏。

这个静电平状态就是隐形状态,也称隐性电平,也就是没有任何干扰的时候的状态称为隐性状态。当有信号修改时,CAN_High 线上的电压值变高了,一般来说会升高至少1V;而CAN_Low 线上的电压值会降低一个同样值,也是1v。

那么这时候,CAN_High 就是 2.5v+1v=3.5v,它就处于激活状态了。而CAN_Low 降为2.5v-1v=1.5v。可以看看这个图

由此我们得到

在隐性状态下,CAN_High 线与CAN_Low 没有电压差,这样我们看到没有任何变化也就检测不到信号。但是在显性状态时,改值最低为2V,我们就可以利用这种变化才传输数据了。所以出现了那些帧,那些帧中的场,那些场中的位,云云~~~~~~~~~~~

在总线上通常逻辑1 表示隐性。而0 表示显性。这些1 啊,0 啊,就可以利用起来为我们传数据了。利用这种电压差,我们可以接收信号。

一般来说,控制单元通过收发器连接到 CAN 驱动总线上,这个收发器(顾名思义,可发送,可接收)内有一个接收器,该接收器是安装在接收一侧的差动信号放大器。然后,这个放大器很自然地就放大了CAN_High 和CAN_Low 线的电平差,然后传到接收区。如下图

由上图可知,当有电压差,差动信号放大器放大传输,将相应的数据位转化为0。

下面我们进入重点难点-----报文

所谓报文,就是CAN 总线上要传输的数据报,为了安全,我们要给我们传输的数据报编码定一下协议,这样才能不容易出错,所以出现了很多的帧,以及仲裁啊,CRC 效验。这些都是难点。

识别符的概念

识别符顾名思义,就是为了区分不同报文的可以鉴别的好多字符位。有标准的,和扩展的。标准的是11 位,扩展的是29 位。他有一个功能就是可以提供优先级,也就是决定哪个报文优先被传输,报文标识符的值越小,报文具有越高的优先权。

CAN 的报文格式有两种,不同之处其实就是识别符长度不同,具有11 位识别符的帧称为标准帧,而还有29 位识别符的帧为扩展帧,CAN 报文有以下4 个不同的帧类型。分别是:

(1) 数据帧:数据帧将数据从发送器传输到接收器;

(2) 远程帧:总线节点发出远程帧,请求发送具有同一标识符的数据帧;

(3) 错误帧:任何节点检测到总线错误就发出错误帧;

(4) 过载帧:过载帧用已在先行的后续的数据帧(或远程帧)之间提供一附加的延时。

CAN总线简明易懂教程(一)相关推荐

  1. CAN总线简明易懂教程(三)

    二.远程帧 通过发送远程帧,总线的节点发出远程帧,请求以前发送给它数据帧的节点再发送一遍.具体发送哪个数据帧,由远程帧的标识符决定. 与数据帧类似,远程帧也有标准格式和扩展格式,而且都由6个不同的位场 ...

  2. python3操作mysqldb_Python3操作Mongodb简明易懂教程

    Pymongo是python的一个操作Mongodb的库. 下面我们直接简列出一些常用操作命令. 连接数据库 链接数据库需要提供一个地址和接口即可.首先还是要导入包. from pymongo imp ...

  3. OsharpNS轻量级.net core快速开发框架简明入门教程-基于Osharp实现自己的业务功能...

    OsharpNS轻量级.net core快速开发框架简明入门教程 教程目录 从零开始启动Osharp 1.1. 使用OsharpNS项目模板创建项目 1.2. 配置数据库连接串并启动项目 1.3. O ...

  4. 《简明python教程》笔记一

    读<简明Python教程>笔记: 本书的官方网站是www.byteofpython.info  安装就不说了,网上很多,这里就记录下我在安装时的问题,首先到python官网下载,选好安装路 ...

  5. 《简明Python教程》读书笔记

    <简明Python教程>读书笔记 开篇: 有两种方式构建软件设计:一种是把软件做得很简单以至于明显找不到缺陷,另一种是把它做得很复杂以至于找不到明显的缺陷. --C. AR. Hoare ...

  6. Visual SourceSafe简明培训教程

      名称 Visual SourceSafe简明培训教程 (Visual SourceSafe Training Short Course) 作者 晨光(Morning) 简介 对于采用Visual ...

  7. 简明docker教程

    简明docker教程 一.什么是docker 二.docker与虚拟机比较 三.安装docker 四.基本概念 1.镜像 2.容器 3.数据卷 4.挂载 五.参考资料 有收获的话请加颗小星星,没有收获 ...

  8. python简单入门_Python简明入门教程

    本文实例讲述了Python简明入门教程.分享给大家供大家参考.具体如下: 一.基本概念 1.数 在Python中有4种类型的数--整数.长整数.浮点数和复数. (1)2是一个整数的例子. (2)长整数 ...

  9. 简明python教程在线-简明python教程

    广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. usrbinpython#hello_world.pyprinthell ...

最新文章

  1. 《C++代码设计与重用》——1.2 重用的神话
  2. 00后社交突围:今天你CDX了吗?
  3. python decorator_python 中的decorator
  4. Android之封装好的异步网络请求框架
  5. 超详细springboot热部署
  6. 跨境电商站外引流?FB必不可少!
  7. sql文件中捕获异常_使用更改数据捕获监视SQL Server中的更改
  8. ettercap dns_spoof
  9. 多线程笔记--原子操作Interlocked系列函数
  10. Luogu P1119 灾后重建 【floyd】By cellur925
  11. 树莓派小车python pid_树莓派小车实现转弯(创乐博套件)
  12. Javascript常用对象的属性和方法
  13. 驱动人生服务器正在维护,驱动人生驱动更新失败或者设备出现异常的解决方法...
  14. 学汽车故障计算机排除怎么样,汽车故障清除后就没事了么?
  15. 项目管理-项目风险管理
  16. 用金山打字通练习打字
  17. Navicat无法导入excel文件的异常处理
  18. 运营之光2.0 我的互联网运营方法论与自白
  19. C语言:L1-078 吉老师的回归 (15 分)
  20. 迷宫中离入口最近的出口问题

热门文章

  1. 第十五届全国大学生智能汽车竞赛华南赛区成绩总结
  2. oracle imp 00028,oracle中导入.dmp文件时出现IMP-00009 和IMP-00028异常提示
  3. android 根目录缓存,Android系统中内部存储和外部存储(公有目录、私有目录、缓存目录)详解...
  4. rust python扩展_Rust语言优化Python性能案例
  5. android 反编译_Android 反编译实战
  6. java初始化虚拟机错误_异常 - 虚拟机初始化错误 - Error occurred during initialization of VM...
  7. android把255转换成字节,android 上传参数设置,字符转化成字节,包装流等
  8. FPGA之道(15)组合逻辑与时序逻辑、同步逻辑与异步逻辑的概念
  9. ROM、PROM、EPROM、EEPROM、RAM、SRAM、DRAM的区别
  10. FPGA block RAM和distributed RAM区别(以及xilinx 7系列CLB资源)