CAN通讯的总结

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

2.CAN的国际标准有两种ISO11898ISO11519

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_H3.5CAN_L1.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填上显性位后,接收错误的节点这时候会怎样呢?接收错误的节点就会立即发送错误帧,通常是发送连续的601。依据CAN的位填充原理,当有五个连续的01出现时,为了传送中的同步,必须插入一个反相位的BIT作为填充位,假设连续出现6个或以上的同样信号,则此次传送错误,数据将被丢弃。故当发送者收到这个错误帧后,便会知道发送出错。并试图重发数据。

posted @ 2017-04-17 10:38  zsychanpin  阅读(4881)  评论(0编辑  收藏  举报