转载请注明出处:http://blog.csdn.net/Righthek 谢谢!

由于Socket CAN涉及到CAN总线协议、套接字、Linux网络设备驱动等。因此,为了能够全面地了解Socket CAN的原理。我们需要了解以下几个方面的知识点:

(1)CAN总线协议;

(2)Socket原理;

(3)Linux网络设备驱动;

当熟悉以下三个方面的知识点后,我们再去分析基于Linux的Socket CAN的驱动。这样的话理解起来更加容易、易懂。

(4)Socket CAN的驱动;

一、CAN总线协议

由于CAN总线协议的内容太多,作为博文来说,不适宜很详细的讲解。需要深入了解的朋友们可以Google一下。以下只是作些简要的说明。

CAN是ControllerArea Network(控制器局域网)的缩写。CAN通信协议在1986年由德国电气商博世公司所开发,主要面向汽车的通信系统。现已是ISO国际标准化的串行通信协议。根据不同的距离、不同的网络,可配置不同的速度,最高速度为1MBit/s。

CAN被细分为三个层次:

(1)CAN对象层(the object layer);

(2)CAN传输层(the transfer layer);

(3)CAN物理层(the phyical layer);

对象层和传输层包括所有由ISO/OSI模型定义的数据链路层的服务和功能。

对象层的作用范围包括:

(1)查找被发送的报文。

(2)确定由实际要使用的传输层接收哪一个报文。

(3)为应用层相关硬件提供接口。

传输层的作用主要:

(1)传送规则,也就是控制帧结构、执行仲裁、错误检测、出错标定、故障界定。

(2)总线上什么时候开始发送新报文及什么时候开始接收报文,均在传输层里确定。

(3)位定时的一些普通功能也可以看作是传输层的一部分。

(4)传输层的修改是受到限制的。

物理层的作用:

在不同节点之间根据所有的电气属性进行位信息的实际传输。当然,同一网络内,物理层对于所有的节点必须是相同的。尽管如此,在选择物理层方面还是很自由的。

图1  CAN协议所对应的ISO模型

CAN具有以下的属性:

(1)报文(Messages):简单来说就是具有固定格式的数据包。

(2)信息路由(Information Routing):即,报文寻找结点的方式。

(3)位速率(Bit rate):数据位的传输速度。

(4)优先权(Priorities):即报文发送的优先权。

(5)远程数据请求(Remote Data Request):通过发送远程帧,需要数据的节点可以请求另一节点发送相应的数据帧。

(6)多主机(Multimaster):总线空闲时,任何结点都可以开始传送报文。

(7)仲裁(Arbitration):当2个及以上的单元同时开始传送报文,那么就会有总线访问冲突。仲裁是确定哪个单元的具有发送优先权。

(8)安全性(Safety):CAN的每一个节点均采取了强有力的措施以进行错误检测、错误标定及错误自检。

(9)错误检测(Error Detection):包括监视、循环冗余检查、位填充、报文格式检查。

(10)错误检测的执行(Performance of Error Detection)

(11)错误标定和恢复时间(Error Sinalling and Recovery Time):任何检测到错误的结点会标志出已损坏的报文。此报文会失效并将自动地开始重新传送。如果不再出现新的错误,从检测到错误到下一报文的传送开始为止,恢复时间最多为29个位的时间。

(12)故障界定(Fault Confinement):CAN结点能够把永久故障和短暂扰动区分开来。永久故障的结点会被关闭。

(13)连接(Connections):CAN串行通讯链路是可以连接许多结点的总线。理论上,可连接无数多的结点。但由于实际上受延迟时间或者总线线路上电气负载的影响,连接结点的数量是有限的。

(14)单通道(Single Channel):总线是由单一进行双向位信号传送的通道组成。

(15)总线值(Bus value):总线可以具有两种互补的逻辑值之一:“显性”(可表示为逻辑0)或“隐性”(可表示为逻辑1)

(16)应答(Acknowledgment):所有的接收器检查报文的连贯性。对于连贯的报文,接收器应答;对于不连贯的报文,接收器作出标志。

(17) 睡眠模式/唤醒(Sleep Mode / Wake-up):为了减少系统电源的功率消耗,可以将CAN器件设为睡眠模式以便停止内部活动及断开与总线驱动器的连接。CAN器件可由总线激活,或系统内部状态而被唤醒。

1、CAN总线的报文格式

CAN传输的报文,可分为五种类型:

(1)数据帧:用于发送结点向接收结点传送数据的帧。

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

(3)错误帧:任何结点检测到一总线错误就发出错误帧。

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

(5)帧间隔:用于将数据帧及远程帧与前面的帧分离开来的帧。

数据帧由7个不同的位场组成:

帧起始 仲裁场 控制场 数据场 CRC场 ACK场 帧结束

数据帧有标准格式和和远程格式,以下是其格式表示:

图2    数据帧格式

远程帧由6个不同的位场组成:

帧起始 仲裁场 控制场 CRC场 ACK场 帧结束

远程帧没有数据帧的数据场,以下是其格式表示:

图3    远程帧格式

错误帧用于在接收和发送消息时检测出错误,通知错误的帧。错误帧由错误标志和错误界定符构成。

错误标志包括主动错误标志和被动错误标志两种。

主动错误标志:6个位的显性位,处于主动错误状态的单元检测出错误时输出的错误标志。

被动错误标志:6个位的隐性位,处于被动错误状态的单元检测出错误时输出的错误标志。

错误界定符由8个位的隐性位构成。

错误帧格式如下表示:

图4    错误帧格式

过载帧是用于接收单元通知其尚未完成接收准备的帧。过载帧由过载标志和过载界定符构成。过载帧格式如下表示:

图5    过载帧格式

帧间隔是用于分隔数据帧和远程帧的帧。数据帧和远程帧可通过插入帧间隔将本帧与前面的任何帧(数据帧、远程帧、错误帧、过载帧)分开。过载帧和错误帧前不能插入帧间隔。帧间隔如下图所示:

图6    帧间隔格式

2、CAN总线的仲裁方式

         在总线空闲态,最先开始发送消息的单元获得发送权。多个单元同时开始发送时,各发送单元从仲裁段的第一位开始进行仲裁。连续输出显性电平最多的单元可继续发送。即逐位地对比各个结点发出的报文ID。由于线与的关系,显示位“0”可以覆盖隐性位“1”,因此ID最小的节点赢得仲裁,总线上表现为该结点的报文,其他结点失去仲裁,退出发送,转为接收状态。

标准格式ID与具有相同ID的远程帧或者扩展格式的数据帧在总线上竞争时,标准格式的RTR位为显性位的具有优先权,可继续发送。

图7    仲裁方式

3、位填充(BitStuffing)

         位填充是为了防止突发错误而设定的功能。位填充的规则如下:

(1)5位连续相同电平之后,必须填充一位反向位,即不允许有6个连续相同位;

(2)SOF之前为总线空闲状态,不需要同步,因此不需要位填充;

(3)CRC之后为固定格式,不允许填充;

(4)由CAN控制器自动实现;

4、CAN的错误处理

CAN控制器检测错误共有以下5种:

(1)位填充错误;

在使用位填充的帧场内,结点如果检测到6个连续相同的位值,则产生位填充错误,在下一位开始时,该结点将发送一个错误帧。

(2)位错误;

在发送期间,结点检测到总线的位值与自身发送的位值不一致时,则产生位错误,在下一位开始时,该结点将发送一个错误帧。

(3)CRC错误;

接收结点计算的CRC码与数据帧本身自带的CRC码不一致,接收结点将丢弃该帧,并在ACK界定符之后发送一个错误帧。

(4)应答错误;

发送结点在ACK Slot位会发送隐性位,同时监听总线是否为显性位,如果是显性位,则表明至少一个节点正确收到该帧;如果是隐性位,将产生ACK错误,发送结点发送一个错误帧。

(5)格式错误;

发送结节在(CRC界定符、ACK界定符、帧结束EOF)固定格式的位置检测到显性位时,将发生格式错误,并发送一个错误帧。

5、CAN总线同步

CAN总线的通信方式为NRZ方式。各个位的开关或者结尾都没有附加同步信号。发送结点以与位时序同步的方式开始发送数据。另外,接收结点根据总线上电平的变化进行同步并进行接收工作。

但是,发送结点和接收结点存在的时钟频率误差及传输路径上的(电缆、驱动器等)相位延迟会引进同步偏差。因此接收结点需要通过同步的方式调整时序进行接收。

同步的作用是尽量使本地位时序与总结信号的位时序一致(本地同步段与总结信号边沿同步)。只有接收结点需要同步;同步只会发生在隐性到显性电平的跳沿。

同步的方式为硬件同步和再同步。

以上是CAN总线协议的一些简要总结,不足之处,请指出,谢谢!下一篇文章将开始Socket原理的讲解。

转载请注明出处:http://blog.csdn.net/Righthek 谢谢!

对Socket CAN的理解(1)——【CAN总线原理】相关推荐

  1. Linux内核--ISA总线原理

    [推荐阅读] 浅谈linux 内核网络 sk_buff 之克隆与复制 深入linux内核架构--进程&线程 了解Docker 依赖的linux内核技术 什么是ISA总线?看了许多网上的帖子和微 ...

  2. 从tomcat说起全面理解Java web开发原理

    从tomcat说起全面理解Java web开发原理 简介:Java开发分为Java ME,Java SE,Java EE.回顾过去这些的开发工作基本上都是围绕着Java EE的,在开发经历中分别经历了 ...

  3. I2C 总线原理与架构

    一.I2C总线原理 I2C是一种常用的串行总线,由串行数据线SDA 和串行时钟线SCL组成.I2C是一种多主机控制总线,它和USB总线不同,USB是基于master-slave机制,任何设备的通信必须 ...

  4. [diango]理解django视图工作原理

    前言:正确理解django视图view,模型model,模板的概念及其之间的关联关系,才能快速学习并上手使用django制作网页 本文主要讲解自己在学习django后对视图view的理解 在进入正文之 ...

  5. 深入理解CPU的调度原理

    前言 软件工程师们总习惯把OS(Operating System,操作系统)当成是一个非常值得信赖的管家,我们只管把程序托管到OS上运行,却很少深入了解操作系统的运行原理.确实,OS作为一个通用的软件 ...

  6. 京东面试官:你是怎么理解 MySQL 的优化原理的?

    说起MySQL的查询优化,相信大家收藏了一堆奇技淫巧:不能使用 SELECT*.不使用NULL字段.合理创建索引.为字段选择合适的数据类型..... 你是否真的理解这些优化技巧?是否理解其背后的工作原 ...

  7. 【分布式ID】理解Snowflake算法的实现原理

    1.概述 转载:冷饭新炒:理解Snowflake算法的实现原理 我上次也看了一个视频讲解:[分布式ID]键高并发 分布式 全局唯一 ID 雪花算法 snowflake 2.前提# Snowflake( ...

  8. 《深入理解OSGi:Equinox原理、应用与最佳实践》笔记_1_运行最简单的bundlehelloworld...

    <深入理解OSGi:Equinox原理.应用与最佳实践>笔记_1_运行最简单的bundlehelloworld 买了周大大的OSGI的书看 先前完全没有基础 就靠这本书看看学学 顺便记一些 ...

  9. 理解PHP网页运行原理

    理解php网页运行原理: 浏览器〉输入网址〉找到对应服务器 〉apache提供服务开始 -->如果是html文件〉从文件夹中拿出文件 > 发出去(经过互联网)给浏览器 -->如果是p ...

  10. 【Java核心技术大会 PPT分享】陈阳:深入理解 Java 虚拟机编译原理

    导读:深入理解 Java 虚拟机编译原理 直播分享PPT Java核心技术大会2022 分享主题:深入理解 Java 虚拟机编译原理 分享嘉宾:陈阳,京东科技架构师,曾就职于美团.去哪网,负责自研消息 ...

最新文章

  1. 普渡大学计算机硕士申请条件,普渡大学计算机与信息技术理学硕士研究生申请要求及申请材料要求清单...
  2. [译] 解密 Uber 如何使用RNN预测极端事件
  3. jdk安装和环境变量的配置
  4. two pointers
  5. pagefile.sys
  6. 在Linux中发现IP地址冲突的方法
  7. Linux基础命令---文本显示od
  8. 机器人走进开放源代码
  9. opencv for android(三):使用opencv摄像头竖屏和前后切换
  10. 怎么用C语言程序表白,c语言表白代码 用C语言表白.doc
  11. java 请求https post 接口 绕过证书验证
  12. css栅格布局的四种大小xs,sm,md,lg
  13. 永久关闭“WPS热点”的显示_我是亲民_新浪博客
  14. s5p4418的uboot网络无法使用问题解决
  15. cadence软件打开报错“计算机中丢失cdsCommon.dll”的解决办法
  16. 利用 画图 快速给图片添加文字
  17. [木野狐]ViewState 剖析(翻译兼笔记)
  18. android手机病毒多杀毒,手机中毒不用慌!教你几招安卓手机怎么彻底的进行杀毒...
  19. Python实现门禁管理系统(源码)
  20. 简单介绍API Platform Core

热门文章

  1. 对宽带帐号安全威胁分析以及防范的方法
  2. 强大合作伙伴生态系统助力 Denodo 在大中华区不断发展壮大
  3. 汽车CAN总线分析仪
  4. 抗阿达木单抗的抗体可能与阿达木单抗治疗过程中静脉和动脉血栓事件相关
  5. linux启动进程 c,Linux启动新进程的三种方法
  6. 甲骨文开始审核 Java 许可问题:500 强企业“连夜”卸载 Oracle JDK
  7. mysql dba 工资,好大夫高级mysql dba工资待遇怎么样 - 好大夫在线 - 职友集
  8. android 权限管理 主动防御,基于SEAndroid的敏感数据主被动防御机制分析与设计
  9. 如何实现广告精准投放?一文获得新思路
  10. Web开发day5:项目