1.CAN通讯有套国际标准,套协议版本号,种故障状态,种数据帧类型,种总线错误类型。

2.CAN的国际标准有两种ISO11898和ISO11519。

3.CAN2.0协议分为A版和B版两种,A版协议仅支持11位标识符(称为标准帧),B版协议兼容11位,向上扩展到19位标识符(称为扩展帧)。

4.CAN总线中。不论什么一个节点发生了错误,那么这个节点可能处于3种故障状态:错误主动状态,错误被动状态,离线状态。

错误主动状态:能够正常參加总线通讯,检測出错误时。输出主动错误标志。错误被动状态:是易引起错误的状态,尽管能參加总线通讯。但为最好还是碍其他节点通讯,接收时不能积极的发送错误通知,处于被动错误状态的节点即时检測出错误,而其他处于主动错误状态的节点假设没有发现错误。整个总线也被觉得没有错误。

离线状态:不能參加总线通讯的状态。

4.CAN总线中有5类错误。这5类错误并不具有排他性,能够同一时候发生。CAN总线在随意时刻,仅仅有一个节点在发送数据,其它全部节点都是在接收,仅仅有相应的ID报文节点对接收的报文做出应答反应。

5.位错误(Bit Error):节点是边发送边检听相应的位,发送的位和检測的位假设不一致,则检測到一个位错误。

6.填充错误(Stuff Error)监听到6个连续同样的为电平时。则检測到一个位填充错误。

7.CRC错误(CRC Error)发送节点会对报文的帧起始,仲裁场。数据场进行CRC计算。求出CRC校验码,并将其也发送出去。接收节点在接收到数据后,会依据CRC校验码来推断接收到的数据在传送过程中是否出错。

8.形式错误()一个固定形式的位场中含有非法位时。则检測到一个形式错误。

9.应答错误()仅仅要在应答期间所监听的位不为显性。则发送器检測到一个应答错误。

应答场包含应答位和应答分隔符。发送节点发送的这两位均为隐性电平,这时仅仅有正确接收报文的接收节点发送显性电平来覆盖它。

11.串口通信是一对一的通信。SPI的通信是一对多的通信。

CAN的一大特点,多主机串行通信:也就是在总线空暇时,全部单元都能够发送消息。最先訪问的节点能够获得发送权,若多个节点觉得自己获得发送权同一时候開始发送数据时,依据ID的优先级来竞争总线的发送权。总线上的节点没有类似于MAC物理地址的信息,所以在总线上增减单元时,连接在总线上的其它单元的软硬件及应用层都不须要改变。

单元依据报文ID决定接收或者屏蔽该报文,报文ID在一定程度上也决定了此帧数据的优先级,发送的信息遭到破坏后。可自己主动重发。节点在错误严重的情况下具有自己主动退出总线的功能。

12.CAN总线上全部的节点都能够检測错误。检測出错误的单元会立马通知其它全部单元。

正常发送的节点一旦检測出错误,会强制结束当前的发送,强制结束发送的节点会不断重复的发送此信息直到成功发送为止,或进入总线关闭状态。

13.CAN总线上的信号使用差分电压进行传送,两条信号线被称为CAN_H 和CAN_L,静态时均是2.5v左右。这时的状态表示逻辑1,也称为隐性电平。通常CAN_H为3.5,CAN_L为1.5时。表示为逻辑0。称为显性电平。

14.DSP的CAN模块的引脚在发送数据的同一时候。其接受引脚也在监听所发送的数据。也就是,发送数据的时候。接受引脚上也会有对应的波形能够在示波器上显示。假设CAN总线上仅仅有发送节点。却没有接受节点。那么这个发送节点会一直发送数据直到发送成功为止,也就是收到有效的应答信号。

15.CAN协议里对ACK(应答场)有例如以下的描写叙述:

应答场长度为2 个位。包括应答间隙(ACK SLOT)和应答界定符(ACK DELIMITER)。

在应答场里,发送站发送两个“隐性”位。当接收器正确地接收到有效的报文,接收器就会在应答间隙(ACK SLOT)期间(发送ACK 信号)向发送器发送一“显性”的位以示应答。

15.应答间隙:全部接收到匹配CRC 序列(CRC SEQUENCE)的站会在应答间隙(ACK SLOT)期间用一“显性”的位写入发送器的“隐性”位来作出回答。ACK 界定符:ACK 界定符是ACK 场的第二个位,而且是一个必须为“隐性”的位。因此,应答间隙(ACK SLOT)被两个“隐性”的位所包围。也就是CRC 界定符(CRC DELIMITER)和ACK 界定符(ACK DELIMITER)。

16.在CAN协议的错误检測部分有这种描写叙述:

位错误:站单元在发送位的同一时候也对总线进行监视。假设所发送的位值与所监视的位值不相符合,则在此位时间里检測到一个位错误(BIT ERROR)。

可是在仲裁场(ARBITRATION FIELD)的填充位流期间或ACK间隙(ACK SLOT)发送一“隐性”位的情况是例外的—— 此时。当监视到一“显性”位时。不会发出位错误(BIT ERROR)。应答错误:仅仅要在ACK 间隙(ACK SLOT)期间所监视的位不为“显性”。则发送器会检測到一个应答错误(ACKNOWLEDGMENT ERROR)。

17.发送者在发送的同一时候,会监视总线上的数据,假设与发送的娄据不一致,则表示发送失败或自己失去仲裁,马上停止发送或转入接收模式。假设有一个节点在ACK SLOT的时间内发送“显性”位。则发送者觉得此次发送报文成功。假设发送者检測到ACK SLOT为隐性位。则表示没有节点填充ACK SLOT。则发送者会检測到这个隐性位而知道发送失败。此条报文须要重发。所以,当总线上仅仅有一个节点的时候,或是仅仅有一个节点能够收发数据的时候。这个节点是发不出去数据的,由于它所发出的数据帧中的ACK SLOT没有另外一个节点来填充,将永远是隐性位,这个节点会一直重发数据直到发送成功或发送被取消。

18.(注:一:总线上仅仅有一个节点并且它向外发送了数据。它确实不会收到不论什么ACK。它会变成“error passive”可是它不会变成BUS off。why?请參考CAN specificaton 2.0-partB-Fault_Confinement--rule3--exception1 二:其他检測到CRC错误的节点不会立即发送错误帧,而是在ACK delimiter之后才发送。请參考CAN specificaton 2.0-partB-Error_Signalling)

19.ACK SLOT仅仅有一个BIT,而接下去的ACK delimiter始终为隐性(我们可觉得是1),当数据到达ACK SLOT的时候。全部的节点都会发送显性位(我们能够觉得是0),而发送者在ACK这个时间里保持隐性位(即发送者在发送的时候ACK SLOT 为1),这时发送者会检測总线上的ACK时间内的信号,假设是0,则表示正确,假设是1,表示有错误。假设其中有某一个节点在ACK SLOT填入隐性位,则总线上相同还是显性位电平,故仅仅要总线上有一个节点正确接收到数据。则ACK SLOT就会被填入显性电平;那么,接收错误的节点怎样来告知发送者此次发送不成功呢?这时候就要用到CAN的错误帧,当一个接收者收到错误的数据的时候,它马上開始发送一个错误帧。则接下去总线上的信号就是这个错误帧。其他的节点和发送者也都会收到这个错误帧,那全部的节点都知道出错了,接收者会丢掉此次消息,而发送者会试图重发此次消息。这才是ACK SLOT真正的含义。

20.我们觉得,发送者在发数据的时候。CANTX在发送数据,而CANRX同一时候也在接收数据,当发送者发送ACK为隐性时。接收到的ACK SLOT一定要是显性才会正确。那么。当有节点正确接收到了数据。在ACK SLOT填上显性位后,接收错误的节点这时候会怎样呢?接收错误的节点就会立即发送错误帧,通常是发送连续的6个0或1。依据CAN的位填充原理,当有五个连续的0或1出现时,为了传送中的同步,必须插入一个反相位的BIT作为填充位,假设连续出现6个或以上的同样信号,则此次传送错误,数据将被丢弃。故当发送者收到这个错误帧后,便会知道发送出错。并试图重发数据。

CAN通讯的总结的更多相关文章

  1. HTML5笔记:跨域通讯、多线程、本地存储和多图片上传技术

    最近做项目在前端我使用了很多新技术,这些技术有bootstrap.angularjs,不过最让我兴奋的还是使用了HTML5的技术,今天我想总结一些HTML5的技术,好记性不如烂笔头,写写文章可以很好的 ...

  2. (转)利用libcurl和国内著名的两个物联网云端通讯的例程, ubuntu和openwrt下调试成功(四)

    1. libcurl 的参考文档如下 CURLOPT_HEADERFUNCTION Pass a pointer to a function that matches the following pr ...

  3. (转)linux下和云端通讯的例程, ubuntu和openwrt下实验成功(二)

    前言: 上节用纯linux的函数实现了和云端通讯, 本节开始利用传说中的神器libcurl 话说一个网络程序员对书法十分感兴趣,退休后决定在这方面有所建树. 于是花重金购买了上等的文房四宝.    一 ...

  4. (转)linux下和云端通讯的例程, ubuntu和openwrt实验成功(一)

    一.  HTTP请求的数据流总结#上传数据, yeelink的数据流如下POST /v1.0/device/4420/sensor/9089/datapoints HTTP/1.1Host: api. ...

  5. 用SignalR 2.0开发客服系统[系列1:实现群发通讯]

    前言 交流群:195866844 先说一下我为什么会写这个博客吧,(首先说一下,我是一个小菜鸟,讲的不好请指导 - -,)  前段时间公司的项目涉及到在B/S上使用即时通讯,(其实就是做一个B/S的客 ...

  6. 用SignalR 2.0开发客服系统[系列3:实现点对点通讯]

    前言 交流群:195866844 目录: 用SignalR 2.0开发客服系统[系列1:实现群发通讯] 用SignalR 2.0开发客服系统[系列2:实现聊天室] 真的很感谢大家的支持,今天发表系列3 ...

  7. 基于 WebSocket 实现 WebGL 3D 拓扑图实时数据通讯同步(二)

    我们上一篇<基于 WebSocket 实现 WebGL 3D 拓扑图实时数据通讯同步(一)>主要讲解了如何搭建一个实时数据通讯服务器,客户端与服务端是如何通讯的,相信通过上一篇的讲解,再配 ...

  8. 基于 WebSocket 实现 WebGL 3D 拓扑图实时数据通讯同步(一)

    今天没有延续上一篇讲的内容,穿插一段小插曲,WebSocket 实时数据通讯同步的问题,今天我们并不是很纯粹地讲 WebSocket 相关知识,我们通过 WebGL 3D 拓扑图来呈现一个有趣的 De ...

  9. 利用WCF的双工通讯实现一个简单的心跳监控系统

    何为心跳监控系统? 故名思义,就是监控某个或某些个程序的运行状态,就好比医院里面的心跳监视仪一样,能够随时显示病人的心跳情况. 心跳监控的目的是什么? 与医院里面的心跳监视仪目的类似,监控程序运行状态 ...

  10. 利用WCF双工模式实现即时通讯

    概述 WCF陆陆续续也用过多次,但每次都是浅尝辄止,以将够解决问题为王道,这几天稍闲,特寻了些资料看,昨晚尝试使用WCF的双工模式实现了一个简单的即时通讯程序,通过服务端转发实现客户端之间的通讯.这只 ...

随机推荐

  1. Windows解决anaconda下双python版本安装TensorFlow

    首先,就是双版本anaconda的安装: 以前安装好的是python2.7版本,而TensorFlow的安装仅支持3.5版本的.但是自己本来的2.7版本又不想遗弃.所以安装双版本的: 在anacond ...

  2. css之定位(position)

    1.什么是定位: css中的position属性,position有四个值:absolute/relative/fixed/static(绝对/相对/固定/静态(默认))通过定位属性可以设置一些不规则 ...

  3. http 500错误怎么解决方法

    出现500错误的原因是很多的,一般来说,如果程序出错,那么在浏览器内会返回给用户一个友好的错误提示,统一称之为服务器500错误. 解决的方法就是您必须在http中能够正确的获得错误信息,方法为:请打开 ...

  4. 【译】Asp.Net Identity Cookies 格式化

    原文出处 Trailmax Tech Max Vasilyev: ASP.Net MVC development in Aberdeen, Scotland 中英对照版 我的读者联系到我,并向我提出了 ...

  5. 一起写框架-Ioc内核容器的实现-基础功能-ComponentScan支持组件注解限制(七)

    实现功能 以上的代码我们发现.我们都是将@ComponentScan扫描的路径下的所有类都加载到容器中的. 而实际需求,我们并不希望所有的类都创建对象,而是加了组件注解@Controller,@Ser ...

  6. 浅谈JavaScript的apply和call语句

    我们试图在回调函数中,用this表示oDiv对象,这样感觉爽. 1    animate(oDiv,{"left":600},2000,function(){ 2        t ...

  7. 基础教程:视图中的ASP.NET Core 2.0 MVC依赖注入

    问题 如何在ASP.NET Core MVC Views中注入和使用服务. 解 更新 启动 类来为MVC添加服务和中间件. 添加一项服务 添加一个Controller,返回 ViewResult. 添 ...

  8. Java多线程学习之线程池源码详解

    0.使用线程池的必要性 在生产环境中,如果为每个任务分配一个线程,会造成许多问题: 线程生命周期的开销非常高.线程的创建和销毁都要付出代价.比如,线程的创建需要时间,延迟处理请求.如果请求的到达率非常 ...

  9. 浅谈Verilog HDL代码编写风格

    消失了好久,没有写文章,也没有做笔记,因为最近再赶一个比赛,时间很紧,昨天周六终于结束了,所以趁着周末这会儿有时间,写点东西,记录下来.首先我学习FPGA才一年多,我知道自己没有资格谈论一些比较深层次 ...

  10. 怎么设置按钮的disabled属性

    首先我们要知道怎么去设置 两种方法设置disabled属性 $('#area').attr("disabled",true); $('#area').attr("disa ...