一篇易懂的CAN通讯协议指南1 - 知乎
一篇易懂的CAN通讯协议指南1 - 知乎首发于智能驾驶专业学习切换模式写文章登录/注册一篇易懂的CAN通讯协议指南1谦益行广东工业大学 机械工程硕士本文力求以图文并茂来接好CAN通讯协议的基础知识,希望能给有兴趣的朋友带来一些收获。为了便于大家理解与接受,请先看一幅图:图1 电话会议简单地讲CAN总线就如上图1中两根粗黄线,其通讯原理:好比开一个电话会议,大家都拨进来了,这时会议的状态可能是:一人说,其他人听;两人甚至多人同时开口了,但只会让另一人说,其他人听;一人要求另一人说;有人睡着了,掉线了,电话卡顿了... ...针对于上述各种情况,要保证这个电话会议的有序高效地进行,那么我们需要有一些约定俗成的规定或协议,大家都遵守。CAN总线通讯与这种电话会议形式有异曲同工之处,那么CAN总线通讯到底具体是怎么回事?接下来将以理论与实践相结合方法来介绍CAN通讯协议。第1部分 概览感谢前人引路,激励后人前行,先简要引自:控制器局域网CAN( Controller Area Network)属于现场总线的范畴,是一种有效支持分布式控制系统的串行通信网络。是由德国博世公司在20世纪80年代专门为汽车行业开发的一种串行通信总线。由于其高性能、高可靠性以及独特的设计而越来越受到人们的重视,被广泛应用于汽车业、航空业、工业控制、安全防护等领域。随着CAN总线在各个行业和领域的广泛应用,对其的通信格式标准化也提出了更严格的要求。1991年CAN总线技术规范(Version2.0)制定并发布。该技术规范共包括A和B两个部分。其中2.0A给出了CAN报文标准格式,而2.0B给出了标准的和扩展的两种格式。1.1 CAN总线架构简介CAN总线是一种用于在不同的ECU(电子控制单元)之间传输数据的线,CAN总线协议是一种ISO 国际标准化的串行通信协议,有 ISO-11898 和 ISO-11519两个系列。其定义有:ISO-11898 定义了通信速率为 125 kbps ~1Mbps 的高速 CAN 通信标准,属于闭环总线,传输速率可达1Mbps,总线长度 ≤ 40米,如图2。ISO11519 定义了通信速率为 10~125 kbps 的低速 CAN 通信标准,属于开环总线,传输速率为40kbps时,总线长度可达1000米,如图2。图2 两类CAN总线(引自[1])高速CAN和低速CAN广泛应用于汽车总线,如下图3。图3 两类CAN总线应用在汽车(引自[2])CAN总线终端电阻的作用?为什么是120Ω?为什么是0.25W?CAN通讯速率(位速率)与CAN总线长度的关系大致如下图。以上介绍了高低速CAN两种总线架构的基本概念,接下来具体看看这两种CAN总线。1.2 CAN总线结构信息将上图2细化,我们可以看到两种CAN总线结构都有CAN_H,CAN_L两根线和多个节点。其中CAN_H和CAN_L线是以双绞形式缠绕,每个节点都有CAN收发器(transceiver)和CAN控制器(controller),CAN收发器和CAN控制器可能集成在芯片(on-chip),也可能是独立于芯片(off-chip)。(图3列举了两种CAN收发器--TJA1054和82C250)图4 两类CAN总线(引自[3])图6 双绞线形式(提高抗干扰能力,引自附1)附1: CAN总线抗干扰的6条“军规”https://zhuanlan.zhihu.com/p/265445671.3 CAN总线信号CAN总线上,信号表现为电压形式,通过CAN_H和CAN_L线上的电位差来表示CAN信号,分为显性电平(dominant)和隐性电平(recessive)两种类型。其中显性电平规定为逻辑0,隐性电平则为逻辑1。其具体定义可通过下图来理解。图7 ISO-11898 (高速CAN)和ISO-11519(低速CAN)的CAN信号定义(引自[3])具体说,如上图第1幅图:当CAN_H和CAN_L的电压均为2.5v,两者电压差为0,就规定CAN信号为隐性电平;当CAN_H的电压为3.5v,CAN_L的电压为1.5v,两者电压差为2V,就规定CAN信号为显性电平。这里实际的规定是:电压差满足定义的一定范围,就可以认为是显性电平或者隐性电平,比如电压差在1.5-2.5v范围,都认为是显性电平。为了加深理解,看了一段实际采集的电压形式的CAN信号:图8 高速CAN总线实际电压状态1.4 CAN信号传输上述的电位差(差分电平)与逻辑电平由CAN收发器实现。在发送过程,CAN控制器将CPU传来的信号转换为逻辑电平。CAN收发器接收逻辑电平之后,再将其转换为差分电平输出到CAN总线上。图9 CAN信号发送(引自3)在接收过程,CAN收发器将CAN_H 和 CAN_L 线上传来的差分电平转换为逻辑电平输出到CAN控制器,CAN控制器再把该逻辑电平转化为相应的信号发送到CPU上。图10 CAN信号接收(引自3)通俗地讲,就是发送方通过CAN收发器使总线电平发生变化,将其信息传递到CAN总线上。接收方通过监听总线电平,将总线上的消息读入自己的CAN收发器。由上可知:CAN总线有2种架构,CAN信号有2种形式,CAN信号发送和接收2个过程。第2部分 CAN总线特性为了有助于理解后面讲述的内容,先看CAN总线有什么特性。2.1 多主工作方式CAN总线上的所有节点没有主从之分,反应在数据传输上是:在总线空闲状态下,任意节点都可以向总线上发送信息。另外:最先向总线发送信息的节点获得总线的发送权;当多个节点同时向总线发送消息时,所发送消息的优先权高的那个节点获得总线的发送权。图11 多主工作方式示意图(引自[5])图11说明:0x12优先级高于0x67,所以0x12先于0x67发送;紧接着0x52也要求发送,同样其优先级也高于0x67,所以0x52先于0x67发送,依次类推。这里0x12优先级高于0x67是怎么判断的呢?这就下个特点相关。2.2 非破坏性仲裁机制非破坏性仲裁机制是一种既不会造成已发送数据的延迟,也不会破坏已经发送的数据的仲裁机制,其具体实施需要了解CAN协议帧结构,线与机制等。其中,线与机制简单说就是位与计算,显性电平会覆盖隐性电平(换种方式理解:电路通路情况下,有一个端点接地(GND),那么整个电路电压就接地了)。图12 线与机制图解(引自[6])再了解线与机制后,看一个简单的仲裁例子,如下图:上图:假设CAN总线上只有两个节点 A和B,它俩的ID用逻辑电平表示,我们规定:从SOF位开始,从左往右逐位比较,只要出现位不一样,比较就结束,显性电平者胜出,有权发送。当节点A,B都发送请求时,开始逐位比较,直到它俩的ID7位,节点A为显性电平,节点B为隐性电平。根据线与机制,节点A胜出,优先发送。这就是一个大致的非破坏性仲裁过程。为了精准地实施仲裁过程,对CAN协议帧结构有严谨的设计,后续将会详细分析。2.3 系统的柔软性与总线相连的节点没有类似于“地址”的信息。因此在总线上增加节点时,连接在总线上的其它节点的软硬件及应用层都不需要改变。2.4 通信速度根据整个网络的规模,可设定适合的通信速度。在同一网络中,所有单元必须设定成统一的通信速度。即使有一个单元的通信速度与其它的不一样,此单元也会输出错误信号,妨碍整个网络的通信。不同网络间则可以有不同的通信速度。(简单一句话理解:双方必须需要在同一频道交流,不然沟通就有障碍)引自[6]2.5 远程数据请求可通过发送“遥控帧” 请求其他单元发送数据。引自[6]2.6 信息广播信息广播就如:节点A发送一条ID 0x12的信息,然后节点B,C,D都能收到。引自[5]上图节点B,C,D最终是否会接收这个0x12发送信息,与他们设置相关,如下图只有节点B设置接收,C,D将会丢弃该条信息,这个过程与报文过滤相关。第3部分 CAN协议帧结构上述仲裁机制部分我们提到CAN协议帧,总的来说CAN协议帧有5种类型,下面逐个展开。引自[4]由于数据帧与遥控帧的最大差别在于遥控帧没有数据段,所以将两者放在一起讲述:3.1数据帧和遥控帧数据帧和遥控帧都有标准格式和扩展格式,这2种格式都具有相同的帧结构。数据帧由7个段构成,遥控帧由6个段构成。先看数据帧:图13 数据帧结构及其两种格式(引自[4])引自[6]这里结合实际采集的CAN总线电压信号来看下标准格式的数据帧。图14 标准(格式)数据帧的CAN总线电压(引自[5])再看遥控帧(也叫远程帧):图15 遥控帧的两种格式(引自[4])通过图13和15对比数据帧和遥控帧有:通过对数据帧和遥控帧有了基本认识,下面我们再具体了解下每个段。1) 帧起始(SOF, Start of Frame)表示帧开始的段,1个位的显性位。(总线空闲时为隐性位,故帧起始以显性位非常好识别),对于数据帧和遥控帧的标准/扩展格式均如此。引自[4]2) 仲裁段(Arbitration field)表示数据的优先级的段,起作用就是根据报文ID来确定其发送优先级。标准格式和扩展格式在此的构成有所不同。引自[4]这里对比数据帧与遥控帧各自的两个格式,其不同为:针对上表的这种设计,后面会具体分析其在仲裁过程的作用。3) 控制段(Control field)表述数据段的字节数,由6个位构成,标准格式和扩展格式的构成有所不同。引自[4]图16 控制段与数据段的关系(引自[5])4) 数据段(Data Field)数据段可包含0-8个字节的数据,从MSB(最高位)开始输出。遥控帧没有此段。引自[4]5) CRC段(Cyclic Redundancy Check Field)检查帧传输错误的段,由15个位的CRC序列和1个位的CRC界定符(用于分隔位)构成。CRC界定符恒为隐性。引自[4]这里CRC序列是根据多项式生成的CRC值,CRC的计算范围包括帧起始,仲裁段,控制段和数据段。图17 CRC序列计算方法附2:https://en.wikipedia.org/wiki/Cyclic_redundancy_check , 如何通俗的理解CRC校验并用C语言实现, https://zhuanlan.zhihu.com/p/774080946) ACK段(Acknowledge Field)用来确认是否正常接收。由ACK槽(ACK Slot)和ACK界定符2个位构成。引自[4]图18 发送与接收时的ACK槽状态(引自[3])7) 帧结束(End of Frame)表示帧的结束的段。由7个位的隐性位构成。引自[4]3.2 错误帧用于在接收和发送消息时检测出错误通知错误的帧,错误帧由错误标志和错误界定符构成。图19 错误帧结构(引自[4])上图的错误标志包括主动错误标志(6个位的显性位)和被动错误标志(6个位的隐性位)两种。主动错误标志处于主动错误状态下的单元检测出错误时输出的错误标志。被动错误标志处于被动错误状态的单元检测出错误时输出的错误标志。错误界定符由8个位的隐性位构成。注意上图0~6位的错误标志重叠,这段怎么确定呢?需先介绍2个概念:位填充和错误类型。1)位填充(Bit Stuffing)位填充是为防止突发错误而设定的功能。当同样的电平持续5位则添加一个位的反型数据位:图20 位填充示意(引自[4])注意:位填充作用范围为SOF-CRC段机间的数据。2)错误类型引自[4]图21 CRC匹配示意(引自[6])图22 CRC错误(引自[6])针对上述位错误再做说明(引自[3]):所谓“发出的电平与从总线上回读的电平不一致”,指的就是节点向总线发出隐性位,却从总线上回读到显性位或者节点向总线发出显性位,却从总线上回读到隐性位这两种情况。有三种例外情况不属于位错误:在仲裁区,节点向总线发送隐性位却回读到显性位,不认为是位错误,这种情况表示该节点仲裁失败;在ACK槽,节点向总线发送隐性位却回读到显性位,不认为是位错误,这种情况表示,该节点当前发送的这一帧报文至少被一个其它节点正确接收;一个节点发送被动错误标志,该节点向总线发送连续六个隐性位(被动错误标志)却回读到显性位,不认为是位错误。因为被动错误标志是六个连续的隐性位,所以在总线上按照线与机制,有可能这六个连续隐性位被其它节点发送的显性电平覆盖。3)错误处理错误状态的种类有:主动错误状态,被动错误状态和总线关闭态3种状态。单元始终处于3种状态之一。(1)主动错误状态:可以正常参加总线通信的状态,处于主动错误状态的单元检测出错误时,输出主动错误标志。(2)被动错误状态:是易引起错误的状态。处于被动错误状态的单元虽能参加总线通信,但为不妨碍其他单元通信,接收时不能积极地发送错误通知;处于被动错误状态的单元即使检测出错误,而其它处于主动错误状态的单元如果没发现错误,整个总线也被认为是没有错误的。处于被动错误状态的单元检测出错误时,输出被动错误标志。另外,处于被动错误状态的单元在不能马上再次开始发送。在开始下次发送前,在间隔帧期间内必须插入“延迟传送”(8个位的隐性位)。(3)总线关闭态是不能参加总线上通信的状态。信息的接收和发送均被禁止。以上这些状态依靠发送错误计算和接收错误计数来管理,根据计数值决定进入何种状态。错误状态和计数值的关系如下表:图23 单元的错误状态(引自[4])发送错误计数值和接收错误计数值根据一定的条件发送变化。错误计数值的变动条件如下表,一次数据的接收和发送可能同时满足多个条件。错误计数器在错误标志的第一个位出现的时间点上开始计数。引自[4]4)错误帧发送检查到错误后,什么时候发送错误帧呢?按照CAN协议的规定:位错误、填充错误、格式错误、ACK错误。在错误产生的那一位的下一位开始发送错误帧。CRC错误。紧随ACK界定符后的位发送错误帧。具体来看一个例子:图24 错误帧(引自[3])1)发送节点Node_A发送一个显性位,但是却从总线上听到一个隐形位,于是Node_A节点就会检测到一个位错误;2)Node_A检测到位错误之后,立即在下一位开始发送主动错误帧:6个连续显性位的主动错误标志+8个连续隐性位的错误界定符;3)对应Node_A发出的主动错误标志,总线上电平为6个连续显性位;4)接收节点Node_B和Node_C从总线上听到连续6个显性位,那么就会检测到一个填充错误,于是这两个节点都会发送主动错误帧;5)对应Node_B和Node_C发出的主动错误标志,总线电平又有6个连续显性电平,对应Node_B和Node_C发出的错误界定符,总线电平有8个连续的隐性电平。6)在间歇场之后,Node_A节点重新发送刚刚出错的报文。在了解了错误帧的发送后,回到之前提到错误标志重叠部分是怎样形成的,再看一个例子:图25 (引自[3])在这个例子,我们知道位错误的错误标志与填充错误的错误标志重叠2位,剩下部分还有4位:引自[4]3.3 过载帧过载帧是用于接收单元通知其尚未完成接收准备的帧。过载帧由过载标志(6个位的显性位)和过载界定符(8个位的隐性位)构成。过载界定符的构成与错误界定符的构成相同。过载帧的构成如下图所示。引自[4]对于过载帧的帧结构我们可以这样理解:接收节点达到接收极限时,就会发出过载帧到总线上,显然,过载标志的6个连续显性位会屏蔽掉总线上其它节点的发送,也就是说这个时候的接收节点通过发送过载帧的方式来破坏其它节点的发送,这样在接收节点发送过载帧期间,其它节点就不能成功发送报文,于是就相当于把其它节点的发送推迟了,也就是说接收节点在其发送过载帧的这段时间得以“休息”。有3种情况会引起过载帧:接收节点自身原因。接收节点由于某种原因需要延迟接收下一个数据帧或者遥控帧。在帧间隔的间歇段的第一位和第二位检测到一个显性位(正常的间歇段都是隐性位)。帧间隔的间隔段本应是三个连续的隐性位,如果接收节点在间隔段检测到显性位,那么就意味着此时有报文发向接收节点,但这个时候是不应该有报文发来的,于是接收节点发送过载帧。CAN节点在错误界定符或过载界定符的第八位(最后一位)听到一个显性位0,节点会发送一个过载帧,且错误计数器不会增加。接收节点在错误界定符和过载界定符的最后一位听到显性位,也意味着有报文发向接收节点,但这个时候是不应该有报文发来的,于是接收节点发送过载帧。3.4 帧间隔帧间隔是用于分隔数据帧和遥控帧的帧。数据帧和遥控帧可通过插入帧间隔将本帧与前面的任何帧(数据帧、遥控帧、错误帧、过载帧)分开。过载帧和错误帧前不能插入帧间隔。引自[4]针对上图,间隔为3个位的隐性位;总线空闲为隐性电平,无长度限制(0亦可);延迟传送为8个位的隐性位,只在处于被动错误状态的单元刚发送一个消息后的帧间隔中包含的段。这里为什么需要延迟传送段呢?首先,考虑主动错误状态的节点A,发送主动错误标志之后,随之就要重新发送刚刚发送失败的报文,但是为了间隔开与前面刚刚发送的错误帧,总线在错误帧之后就会插入3个隐形位的帧间隔,在这3个隐形位期间,其它的节点不足以判定总线空闲(需要连续11个隐性位才能判定),所以节点A仍然占据着总线的控制权,于是在帧间隔之后,节点A能够接着发送报文。现在节点A转入到被动错误状态了,说明它已经不是很可靠了,这个时候如果没有延迟传送段,在节点A发出被动错误标志之后,它仍然能够在3位的帧间隔之后立即重新发送报文,这是不符合我们对被动错误状态的处理要求的当然也是不符合CAN协议的,于是乎对于发送出被动错误标志的节点,总线在帧间隔中加入了8个连续隐性位的延迟传送段,这样的3+8=11个连续隐性位。就能让节点A在这个帧间隔期间失去对总线的控制权,从而优先保证其它正常(处于主动错误状态)节点能够使用总线,而不必等着一个已经不可靠的节点A占据总线。到此CAN协议帧结构就基本介绍完了,下面综上所述来分析下具体的总线仲裁:第4部分 总线仲裁基于上节的仲裁段和控制段,这里主要考虑几种情况的仲裁:假设一条CAN总线上有两个节点Node_A和Node_B。在总线空闲时,总线上为隐性电平,就在这个时候Node_A 和 Node_B 这两个节点同时向总线上发送数据,如下图,其中,Tx表示发送,Rx表示接收,也就是说每个节点都有发送与接收。当作为发送方的节点会去接收自己发送的内容进行检查,即回读机制(节点在向总线上发送报文的过程中,同时也对总线上的二进制位进行“回读”,对比该节点发出的二进制位与总线上当前的二进制位是否一致,就可节点数据是否被正确接收。)图26 仲裁过程(引自[3])情况1:仲裁在前11位ID就结束 ,如上图。从D28-D18,采用线与机制,逐位进行比较,一旦某位出现不同,上图的ID25,则显性位覆盖隐性位,仲裁结束,显性位的对应节点胜出,上图的Node_A。情况2:仲裁在前11位ID未结束,即说明前11位ID相同在这种情况下,我们就需要回顾一下前面的一个表:根据这个表,我们可以进一步分为4种情况:标准格式的数据帧与遥控帧,看RTR位,数据帧的RTR位恒为显性,遥控帧的RTR位恒为隐性。故前11位ID号相同时,标准数据帧优先级高于标准遥控帧。扩展格式的数据帧与遥控帧,在前11位ID和后18位ID全相同的情况,与上条一致。数据帧的标准格式与扩展格式,比较标准格式的RTR位与扩展格式的SRR位,标准格式的RTR位恒为显性,扩展格式的SRR位恒为隐性。故前11位ID号相同时,标准数据帧优先级高于扩展数据帧。遥控帧的标准格式与扩展格式,看IDE位,扩展格式的IDE位恒为隐性,标准格式的IDE位在控制段,恒为显性。故前11位ID号相同时,标准遥控帧优先级高于扩展遥控帧。通过上述分析,我们可以知道在前11位ID号相同时,根据协议设定的RTR, SRR, IDE,就可以保证如下:RTR:保证数据帧优先级高于遥控帧;SRR :保证标准数据帧的优先级高于扩展数据帧;IDE :保证标准遥控帧的优先级高于扩展遥控帧。第5部分 报文过滤在CAN总线中没有地址的概念,CAN总线是通过报文ID来实现收发数据的。CAN节点上都会有一个验收滤波ID表,其位于CAN节点的验收滤波器中,如果总线上的报文的ID号在某个节点的验收滤波ID表中,那么这一帧报文就能通过该节点验收滤波器的验收,该节点就会接收这一帧报文。假设有设置:可看报文过滤过程如下图示意:图27 报文发送到接收的过程关于报文过滤具体如何实现,可参考:再谈STM32的CAN过滤器-bxCAN的过滤器的4种工作模式以及使用方法总结_flydream0的博客-CSDN博客_stm32 can 掩码第6部分 数据传输同步6.1 位速率概念位速率(也叫做比特率)表示的是单位时间内,总线上传输的信息量,即每秒能够传输的二进制位的数量,R=1/T ,单位是bit per second。比如比特率为8bit/s,意思为一秒传输了8bit,包含了8个二进制事件的信息量。注意位速率与波特率不是同一概念。摘自:https://zhuanlan.zhihu.com/p/103511011 实际传输中,传输速率以每秒发送的符号(baud)数量进行计算,即波特率。 当一个符号只包含两种可能,即一个事件两种可能,那么此时1baud=1bit。此时波特率等于比特率。 一个符号也有可能包含多个可能,例2中,一个符号中包含四个电平,那么接受端的一个事件,有了abcd四种可能,那么1baud=2bit。此时波特率为比特率的两倍。6.2 位时序第3部分讲到帧结构,我们知道每一帧数据(即一个完整的数据帧)有很多位组成,当发送方发送一帧数据到总线时,接收方怎么准确接收到这帧数据呢?实际采用逐位逐位地接收数据。引自[3]具体来说,将一个位分为4段,如上图所示。这些段又由可称为Time Quantum(以下称为Tq)的最小时间单位构成。1位分为4个段,每个段又由若干个Tq构成,这称为位时序。1位由多少个Tq构成,每个段又由多少个Tq构成等,可以任意设定位时序。通过设定位时序,多个单元可同时采样,也可任意设定采样点。各段的作用和Tq数如下表:引自[4]所谓采样点是读取总线电平,并将读到的电平作为位值的点,位置在PBS1结束处。CAN协议的通信方法为NRZ方式,各个位的开头或者结尾都没有附加同步信号。发送单元以与位时序同步的方式开始发送数据。另外,接收单元根据总线上电平的变化进行同步并进行接收工作。但是,发送单元和接收单元存在的时钟频率误差及传输路径上的(电缆/驱动器等)相位延迟会引起同步偏差,因此接收单元通过硬件同步或者再同步的方法调整时序进行接收。6.3 硬同步在总线空闲状态,接收节点检测出帧起始(SOF位)时,会调整当前位的同步段,调整宽度不限。如下图假设这时检测的时SOF位。那么硬同步简单说就是接收节点直接与发送节点同步(真有硬的味道),如下:引自[3]具体解释引自[3]:
1)发送节点Node_A在发送SOF位时,SOF位的下降沿在SS段;
2)这个时候接收节点Node_B发现自己当前位的SS段和发送节点SOF位的SS段不同步。也就是说当Node_A
产生SOF位SS段时,Node_B的当前位的SS段已经在5个Tq之前产生了;
3)于是接收节点Node_B强行将自己当前位的SS段拉到与SOF位的SS段同步。6.4 再同步接收节点检测出除SOF位以外的其他位时,进行的同步调整。重同步会通过加长PSB1段,或缩短PBS2段来调整同步,以保证采样点的准确。对于再同步,需一个概念SJW(同步跳转宽度),是指PSB1和PSB2再同步时允许跳转的最大宽度,其必须满足以下2个条件:SJW必须小于PBS1和PBS2的最小值;SJW最大值不能超过4。下面看一下再同步的两种情况:情况1: PSB1段加长(发的晚,收的早)引自[3]具体解释引自[3]:
1)发送节点Node_A比接收节点Node_B的时间慢了,也就是说Node_A当前位的ss段产生的时候,Node_B
当前位的ss段已经在2个Tq之前产生了;
2)所以这个时候接收节点Node_B就将PBS1延长2个Tq的时间;
3)于是这个时候Node_A当前位的采样点就和Node_B的采样点同步了。情况2:PSB2段缩短(发的早,收的晚)引自[3]具体解释引自[3]:
1)发送节点Node_A当前位的SS段诞生2Tq时长之后,接收节点Node_B的当前位才产生SS段;
2)于是,接收节点Node_B当前位的PBS2段缩短,
3)这样就会导致接收节点Node_B的下一位能够提前2个Tq,从而Node_B的下一位采样点和Node_A下一位
的采样点能够同步。6.5 调整同步的规则硬件同步和再同步遵从如下规则。
1) 1 个位中只进行一次同步调整。
2) 只有当上次采样点的总线值和边沿后的总线值不同时,该边沿才能用于调整同步。
3) 在总线空闲且存在隐性电平到显性电平的边沿时,则一定要进行硬件同步。
4) 在总线非空闲时检测到的隐性电平到显性电平的边沿如果满足条件(1)和(2),将进行再同步。
但还要满足下面条件。
5) 发送单元观测到自身输出的显性电平有延迟时不进行再同步。
6) 发送单元在帧起始到仲裁段有多个单元同时发送的情况下,对延迟边沿不进行再同步。第7部分 位时间实例本部分将根据Infineon的芯片手册对位时间如何计算和如何配置位时间的寄存器进行说明。假设我们有一条需求:设置CAN通讯的波特率为500KBaud。7.1 计算Infineon芯片手册提供的CAN总线位时间标准格式定义如下图,后面根据该定义进行求解。CAN总线位时间标准设:晶振时钟周期频率为40MHz,转换为时间表示则为T=1/40MHz=25nsNBT=16(即一个位有16个tq,time quantum),因为要设置的波特率为500KBaud,换算时间表示则为1/500KBaud =2000ns,即传输一个位的时间要2000ns。那意味着16个tq就等于2000ns,即tq=125ns。又因为有:所以:tq/T=125ns/25ns=5,因为BRP只能为整数,这时取DIV8=0, BRP=4。我们已经NBT=16,假设我们采样点取在50%处,即有:50%=Tseg2/NBT=[(TSEG2+1)tq]/16*tq=(TSEG2+1)/16即有:TSEG2=7。那么Tseg1= NBT-Tseg2-Tsync=7tq,所以TSEG1=6。再根据下式计算SJW, 这里直接假设TSJW=3*tq能保证下式两个不等式成立(不在此处展开Tprope的讨论),那么SJW=2。综上有:DIV8=0, BRP=4,TSEG1=6,TSEG2=7,SJW=2。7.2 寄存器配置根据上节的计算结果进行位时间寄存器的配置,关于该寄存器的内容以及配置信息见下图。位时间寄存器说明经过上述配置,我们成功设置了CAN通讯的波特率为500KBaud。7.3 补充:传输延迟时间tPTSCAN报文在CAN总线上的传输时,物理延迟包含两个部分:在CAN-BUS上传输造成的延迟在节点上传输造成延迟按照CAN通信协议的规定,补偿给传播延迟的时间长度要至少等于实际实际传播延迟时长的2倍,即:tPTS≥2×tdel=2×(tdel+tBus)注意:在CAN总线通信系统中是以时间量子Tq来度量时间的,所以如果延迟补偿时间tPTS = 3.1Tq,那么这个时候要取:tPTS = 4Tq。最后推荐一个系列的精彩博文:参考:[1] Understanding and Using the Controller Area Network Communication Protocol theory and practice[M].[2] 恒润科技-CAN教材.pdf[3] https://blog.csdn.net/weixin_40528417/category_7489864.html[4] CAN入门书,renesas[5] https://elearning.vector.com/mod/page/view.php?id=333[6] CANPES.pdf2020.08.24对上述理论知识有了较好的理解之后,再来结合实际项目的CAN通讯相关需求,就会比较好理解了。最近开始写了篇基于实际项目经验的文章,《CAN通讯需求解析系列》,首发于公众号益行课堂,敬请关注。2023.06.09编辑于 2023-11-14 22:56・IP 属地上海CAN总线autosar汽车电子控制赞同 122277 条评论分享喜欢收藏申请转载文章被以下专栏收录智能驾驶专业学习从学术和工程视角来学习智能驾驶的软
CAN总线协议_百度百科
线协议_百度百科 网页新闻贴吧知道网盘图片视频地图文库资讯采购百科百度首页登录注册进入词条全站搜索帮助首页秒懂百科特色百科知识专题加入百科百科团队权威合作下载百科APP个人中心CAN总线协议播报讨论上传视频用于实时应用的串行通讯协议总线收藏查看我的收藏0有用+10本词条由“科普中国”科学百科词条编写与应用工作项目 审核 。控制器局域网总线(CAN,Controller Area Network)是一种用于实时应用的串行通讯协议总线,它可以使用双绞线来传输信号,是世界上应用最广泛的现场总线之一。CAN协议用于汽车中各种不同元件之间的通信,以此取代昂贵而笨重的配电线束。该协议的健壮性使其用途延伸到其他自动化和工业应用。CAN协议的特性包括完整性的串行数据通讯、提供实时支持、传输速率高达1Mb/s、同时具有11位的寻址以及检错能力。目录1概述▪总线发展▪相关组织▪概念特征2协议内容3报文传输▪报文类型▪帧类型4应用领域▪使用范围▪发展趋势概述播报编辑总线发展控制器局域网CAN( Controller Area Network)属于现场总线的范畴,是一种有效支持分布式控制系统的串行通信网络。是由德国博世公司在20世纪80年代专门为汽车行业开发的一种串行通信总线。由于其高性能、高可靠性以及独特的设计而越来越受到人们的重视,被广泛应用于诸多领域。而且能够检测出产生的任何错误。当信号传输距离达到10km时,CAN仍可提供高达50kbit/s的数据传输速率。由于CAN总线具有很高的实时性能和应用范围,从位速率最高可达1Mbps的高速网络到低成本多线路的50Kbps网络都可以任意搭配。因此,CAN己经在汽车业、航空业、工业控制、安全防护等领域中得到了广泛应用。随着CAN总线在各个行业和领域的广泛应用,对其的通信格式标准化也提出了更严格的要求。1991年CAN总线技术规范(Version2.0)制定并发布。该技术规范共包括A和B两个部分。其中2.0A给出了CAN报文标准格式,而2.0B给出了标准的和扩展的两种格式。美国的汽车工程学会SAE在2000年提出了J1939协议,此后该协议成为了货车和客车中控制器局域网的通用标准。CAN总线技术也在不断发展。传统的CAN是基于事件触发的,信息传输时间的不确定性和优先级反转是它固有的缺陷。当总线上传输消息密度较小时,这些缺陷对系统的实时性影响较小;但随着在总线上传输消息密度的增加,系统实时性能会急剧下降。为了满足汽车控制对实时性和传输消息密度不断增长的需要,改善CAN总线的实时性能非常必要。于是,传统CAN与时间触发机制相结合产生了TTCAN(Time-Triggered CAN),ISO11898-4己包含了TTCAN。 TTCAN总线和传统CAN总线系统的区别是:总线上不同的消息定义了不同的时间槽(Timer Slot)。相关组织依据国际标准化组织/开放系统互连(International Standardi-zation Organization/Open SystemInterconnection,ISO/OSI)参考模型,CAN的ISO/OSI参考模型的层结构。概念特征CAN总线的工作原理CAN总线使用串行数据传输方式,可以1Mb/s的速率在40m的双绞线上运行,也可以使用光缆连接,而且在这种总线上总线协议支持多主控制器。 [1]CAN与I2C总线的许多细节很类似,但也有一些明显的区别。当CAN总线上的一个节点(站)发送数据时,它以报文形式广播给网络中所有节点。对每个节点来说,无论数据是否是发给自己的,都对其进行接收。每组报文开头的11位字符为标识符,定义了报文的优先级,这种报文格式称为面向内容的编址方案。在同一系统中标识符是唯一的,不可能有两个站发送具有相同标识符的报文。当几个站同时竞争总线读取时,这种配置十分重要。当一个站要向其它站发送数据时,该站的CPU将要发送的数据和自己的标识符传送给本站的CAN芯片,并处于准备状态;当它收到总线分配时,转为发送报文状态。CAN芯片将数据根据协议组织成一定的报文格式发出,这时网上的其它站处于接收状态。每个处于接收状态的站对接收到的报文进行检测,判断这些报文是否是发给自己的,以确定是否接收它。由于CAN总线是一种面向内容的编址方案,因此很容易建立高水准的控制系统并灵活地进行配置。我们可以很容易地在CAN总线中加进一些新站而无需在硬件或软件上进行修改。当所提供的新站是纯数据接收设备时,数据传输协议不要求独立的部分有物理目的地址。它允许分布过程同步化,即总线上控制器需要测量数据时,可由网上获得,而无须每个控制器都有自己独立的传感器。CAN总线特征(1)报文(Message)总线上的数据以不同报文格式发送,但长度受到限制。当总线空闲时,任何一个网络上的节点都可以发送报文。(2)信息路由(Information Routing)在CAN中,节点不使用任何关于系统配置的报文,比如站地址,由接收节点根据报文本身特征判断是否接收这帧信息。因此系统扩展时,不用对应用层以及任何节点的软件和硬件作改变,可以直接在CAN中增加节点。(3)标识符(Identifier) 要传送的报文有特征标识符(是数据帧和远程帧的一个域),它给出的不是目标节点地址,而是这个报文本身的特征。信息以广播方式在网络上发送,所有节点都可以接收到。节点通过标识符判定是否接收这帧信息。(4)数据一致性应确保报文在CAN里同时被所有节点接收或同时不接收,这是配合错误处理和再同步功能实现的。(5)位传输速率不同的CAN系统速度不同,但在一个给定的系统里,位传输速率是唯一的,并且是固定的。(6)优先权 由发送数据的报文中的标识符决定报文占用总线的优先权。标识符越小,优先权越高。(7)远程数据请求(Remote Data Request) 通过发送远程帧,需要数据的节点请求另一节点发送相应的数据。回应节点传送的数据帧与请求数据的远程帧由相同的标识符命名。(8)仲裁(Arbitration) 只要总线空闲,任何节点都可以向总线发送报文。如果有两个或两个以上的节点同时发送报文,就会引起总线访问碰撞。通过使用标识符的逐位仲裁可以解决这个碰撞。仲裁的机制确保了报文和时间均不损失。当具有相同标识符的数据帧和远程帧同时发送时,数据帧优先于远程帧。在仲裁期间,每一个发送器都对发送位的电平与被监控的总线电平进行比较。如果电平相同,则这个单元可以继续发送,如果发送的是“隐性”电平而监视到的是“显性”电平,那么这个单元就失去了仲裁,必须退出发送状态。(9)总线状态 总线有“显性”和“隐性”两个状态,“显性”对应逻辑“0”,“隐性”对应逻辑“1”。“显性”状态和“隐性”状态与为“显性”状态,所以两个节点同时分别发送“0”和“1”时,总线上呈现“0”。CAN总线采用二进制不归零(NRZ)编码方式,所以总线上不是“0”,就是“1”。但是CAN协议并没有具体定义这两种状态的具体实现方式。(10)故障界定(Confinement) CAN节点能区分瞬时扰动引起的故障和永久性故障。故障节点会被关闭。(11)应答接收节点对正确接收的报文给出应答,对不一致报文进行标记。(12)CAN通讯距离最大是10公里(设速率为5Kbps),或最大通信速率为1Mbps(设通信距离为40米)。(13)CAN总线上的节点数可达110个。通信介质可在双绞线,同轴电缆,光纤中选择。(14)报文是短帧结构,短的传送时间使其受干扰概率低,CAN有很好的校验机制,这些都保证了CAN通信的可靠性。CAN总线的特点(1)具有实时性强、传输距离较远、抗电磁干扰能力强、成本低等优点;(2)采用双线串行通信方式,检错能力强,可在高噪声干扰环境中工作;(3)具有优先权和仲裁功能,多个控制模块通过CAN 控制器挂到CAN-bus 上,形成多主机局部网络;(4)可根据报文的ID决定接收或屏蔽该报文;(5)可靠的错误处理和检错机制;(6)发送的信息遭到破坏后,可自动重发;(7)节点在错误严重的情况下具有自动退出总线的功能;(8)报文不包含源地址或目标地址,仅用标志符来指示功能信息、优先级信息。协议内容播报编辑CAN总线的物理层是将ECU连接至总线的驱动电路。ECU的总数将受限于总线上的电气负荷。物理层定义了物理数据在总线上各节点间的传输过程,主要是连接介质、线路电气特性、数据的编码/解码、位定时和同步的实施标准。总线竞争的原则BOSCH CAN基本上没有对物理层进行定义,但基于CAN的ISO标准对物理层进行了定义。设计一个CAN系统时,物理层具有很大的选择余地,但必须保证CAN协议中媒体访问层非破坏性位仲裁的要求,即出现总线竞争时,具有较高优先权的报文获取总线竞争的原则,所以要求物理层必须支持CAN总线中隐性位和显性位的状态特征。在没有发送显性位时,总线处于隐性状态,空闲时,总线处于隐性状态;当有一个或多个节点发送显性位,显性位覆盖隐性位,使总线处于显性状态。在此基础上,物理层主要取决于传输速度的要求。从物理结构上看,CAN节点的构成如图7-8所示。在CAN中,物理层从结构上可分为三层:分别是物理信号层(Physical Layer Signaling,PLS)、物理介质附件(Physical MediaAttachment,PMA)层和介质从属接口(Media Dependent:Inter-face,MDI)层。其中PLS连同数据链路层功能由CAN控制器完成,PMA层功能由CAN收发器完成,MDI层定义了电缆和连接器的特性。目前也有支持CAN的微处理器内部集成了CAN控制器和收发器电路,如MC68HC908GZl6。PMA和MDI两层有很多不同的国际或国家或行业标准,也可自行定义,比较流行的是ISOll898定义的高速CAN发送/接收器标准。节点数量CAN网络上的节点不分主从,任一节点均可在任意时刻主动地向网络上其他节点发送信息,通信方式灵活,利用这一特点可方便地构成多机备份系统,CAN只需通过报文滤波即可实现点对点、一点对多点及全局广播等几种方式传送接收数据,无需专门的"调度"。 CAN的直接通信距离最远可达10km(速率5kbps以下);通信速率最高可达1Mbps(此时通信距离最长为40m)。 CAN上的节点数主要决定于总线驱动电路,目前可达110个;报文标识符可达2032种(CAN2.0A),而扩展标准(CAN2.0B)的报文标识符几乎不受限制。CAN的数据链路层CAN的数据链路层是其核心内容,其中逻辑链路控制(Logical Link control,LLC)完成过滤、过载通知和管理恢复等功能,媒体访问控制(Medium Access control,MAC)子层完成数据打包/解包、帧编码、媒体访问管理、错误检测、错误信令、应答、串并转换等功能。这些功能都是围绕信息帧传送过程展开的。报文传输播报编辑报文类型在CAN2.0B的版本协议中有两种不同的帧格式,不同之处为标识符域的长度不同,含有11位标识符的帧称之为标准帧,而含有29位标识符的帧称为扩展帧。如CAN1.2版本协议所描述,两个版本的标准数据帧格式和远程帧格式分别是等效的,而扩展格式是CAN2.0B协议新增加的特性。为使控制器设计相对简单,并不要求执行完全的扩展格式,对于新型控制器而言,必须不加任何限制的支持标准格式。但无论是哪种帧格式,在报文传输时都有以下四种不同类型的帧:帧类型在报文传输时,不同的帧具有不同的传输结构,下面将分别介绍四种传输帧的结构,只有严格按照该结构进行帧的传输,才能被节点正确接收和发送。(1)数据帧由七种不同的位域(Bit Field)组成:帧起始(Start of )、仲裁域(Arbitration Field)、控制域(Control Field)、数据域(DataField)、CRC域(CRC Field)、应答域(ACK Field)和帧结尾(End of )。数据域的长度可以为0~8个字节。1)帧起始(SOF):帧起始(SOF)标志着数据帧和远程帧的起始,仅由一个“显性”位组成。在CAN的同步规则中,当总线空闲时(处于隐性状态),才允许站点开始发送(信号)。所有的站点必须同步于首先开始发送报文的站点的帧起始前沿(该方式称为“硬同步”)。2)仲裁域:仲裁域由标识符和RTR位组成,标准帧格式与扩展帧格式的仲裁域格式不同。标准格式里,仲裁域由11位标识符和RTR位组成。标识符位有ID28~ID18。扩展帧格式里,仲裁域包括29位标识符、SRR位、IDE(Identifier Extension,标志符扩展)位、RTR位。其标识符有ID28~ID0。为了区别标准帧格式和扩展帧格式,CANl.0~1.2版本协议的保留位r1现表示为IDE位。IDE位为显性,表示数据帧为标准格式;IDE位为隐性,表示数据帧为扩展帧格式。在扩展帧中,替代远程请求(Substitute Remote Request,SRR)位为隐性。仲裁域传输顺序为从最高位到最低位,其中最高7位不能全为零。RTR的全称为“远程发送请求(Remote TransmissionRequest)”。RTR位在数据帧里必须为“显性”,而在远程帧里必须为“隐性”。它是区别数据帧和远程帧的标志。3)控制域:控制域由6位组成,包括2个保留位(r0、r1同于CAN总线协议扩展)及4位数据长度码,允许的数据长度值为0~8字节。4)数据域:发送缓冲区中的数据按照长度代码指示长度发送。对于接收的数据,同样如此。它可为0~8字节,每个字节包含8位,首先发送的是MSB(最高位)。5)CRC校验码域:它由CRC域(15位)及CRC边界符(一个隐性位)组成。CRC计算中,被除的多项式包括帧的起始域、仲裁域、控制域、数据域及15位为0的解除填充的位流给定。此多项式被下列多项式X15+X14+X10+X8+X7+X4+X3+1除(系数按模2计算),相除的余数即为发至总线的CRC序列。发送时,CRC序列的最高有效位被首先发送/接收。之所以选用这种帧校验方式,是由于这种CRC校验码对于少于127位的帧是最佳的。6)应答域:应答域由发送方发出的两个(应答间隙及应答界定)隐性位组成,所有接收到正确的CRC序列的节点将在发送节点的应答间隙上将发送的这一隐性位改写为显性位。因此,发送节点将一直监视总线信号已确认网络中至少一个节点正确地接收到所发信息。应答界定符是应答域中第二个隐性位,由此可见,应答间隙两边有两个隐性位:CRC域和应答界定位。7)帧结束域:每一个数据帧或远程帧均由一串七个隐性位的帧结束域结尾。这样,接收节点可以正确检测到一个帧的传输结束。(2)错误帧错误帧由两个不同的域组成:第一个域是来自控制器的错误标志;第二个域为错误分界符。1)错误标志:有两种形式的错误标志。①激活(Active)错误标志。它由6个连续显性位组成。②认可(Passive)错误标志。它由6个连续隐性位组成。它可由其他CAN总线协议控制器的显性位改写。2)错误界定:错误界定符由8个隐性位组成。传送了错误标志以后,每一站就发送一个隐性位,并一直监视总线直到检测出1个隐性位为止,然后就开始发送其余7个隐性位。(3)远程帧: 远程帧也有标准格式和扩展格式,而且都由6个不同的位域组成:帧起始、仲裁域、控制域、CRC域、应答域、帧结尾。与数据帧相比,远程帧的RTR位为隐性,没有数据域,数据长度编码域可以是0~8个字节的任何值,这个值是远程帧请求发送的数据帧的数据域长度。当具有相同仲裁域的数据帧和远程帧同时发送时,由于数据帧的RTR位为显性,所以数据帧获得优先。发送远程帧的节点可以直接接收数据。(4)过载帧 过载帧由两个区域组成:过载标识域及过载界定符域。下述三种状态将导致过载帧发送:1)接收方在接收一帧之前需要过多的时间处理当前的数据(接收尚未准备好);2)在帧空隙域检测到显性位信号;3)如果CAN节点在错误界定符或过载界定符的第8位采样到一个显性位节点会发送一个过载帧。应用领域播报编辑使用范围汽车制造中的应用、大型仪器设备中的应用、工业控制中的应用、智能家庭和生活小区管理中的应用以及机器人网络互联中的应用。同时,由于CAN总线本身的特点,其应用范围目前已不再局限于汽车行业,而向自动控制、航空航天、航海、过程工业、机械工业、纺织机械、农用机械、机器人、数控机床、医疗器械及传感器等领域发展。CAN已经形成国际标准,并已被公认为几种最有前途的现场总线之一。发展趋势目前大多数CAN控制器只做到链路层,然而随着CAN的发展和应用,应用层的硬件设计也成为硬件厂商的考虑范畴。新手上路成长任务编辑入门编辑规则本人编辑我有疑问内容质疑在线客服官方贴吧意见反馈投诉建议举报不良信息未通过词条申诉投诉侵权信息封禁查询与解封©2024 Baidu 使用百度前必读 | 百科协议 | 隐私政策 | 百度百科合作平台 | 京ICP证030173号 京公网安备110000020000CAN中文(简体)翻译:剑桥词典
CAN中文(简体)翻译:剑桥词典
词典
翻译
语法
同义词词典
+Plus
剑桥词典+Plus
Shop
剑桥词典+Plus
我的主页
+Plus 帮助
退出
剑桥词典+Plus
我的主页
+Plus 帮助
退出
登录
/
注册
中文 (简体)
查找
查找
英语-中文(简体)
can 在英语-中文(简体)词典中的翻译
canmodal verb uk
Your browser doesn't support HTML5 audio
strong /kæn/ weak /kən/ us
Your browser doesn't support HTML5 audio
strong /kæn/ weak /kən/
can modal verb
(ABILITY)
Add to word list
Add to word list
A1 to be able to
能,会
Can you drive?
你会开车吗?
She can speak four languages.
她会讲4门语言。
Can you read that sign from this distance?
你从这么远的距离能看清楚那标牌上的东西吗?
The doctors are doing all that they can, but she's still not breathing properly.
医生们在竭尽所能,可是她仍然不能正常呼吸。
Do the best you can - I realize the circumstances are not ideal.
尽力而为吧——我知道情况不理想。
If the party is awful, we can always leave (= that would be one possible solution to our problem).
如果聚会很糟,我们总还可以离开。
"She's really furious about it." "Can you blame her (= I'm not surprised)?"
“她对此确实很生气。”“你能怪她吗?”
can do US informal
used to say that you can and will do something: "Will you mail this letter for me, please?" "Can do."
“请你帮我把这封信寄了,好吗?”“行。”
查看更多
更多范例减少例句I don't know how he can afford a new car on his salary.Cats can see in the dark.The water's not deep here - look, I can touch the bottom.I doubt whether I can finish the work on time.Computers can perform millions of calculations every second.
can modal verb
(PERMISSION)
A1 to be allowed to
(表示许可)可以,能
Can I use your bike, John?
约翰,我能用你的自行车吗?
You can park over there.
你们可以把车停在那边。
You can have a piece of cake after you've eaten your vegetables!
吃完蔬菜你就可以吃块蛋糕!
informal sometimes used to tell someone angrily to do something
(生气地命令某人)必须,得
If you carry on being horrible to your sister, Sophie, you can just go to bed!
索菲,如果你对你妹妹还这么凶,就上床睡觉去!
更多范例减少例句If you finish early you can go home.She can come whenever she likes, as far as I'm concerned.Finish up your dinner and you can have dessert.How early can you get off this afternoon?Anyone can go - you don't have to be invited.
can modal verb
(REQUEST)
A1 used to request something
(用于请求)能,可以
If you see Brett, can you tell him I'm in town next weekend?
如果你见到布雷特,能告诉他我下周末在伦敦吗?
Can you make a little less noise, please? I'm trying to work.
请你别发出那么大声音好吗?我正在工作。
更多范例减少例句I can't get the cork out of the bottle - can you try?Excuse me, can I just get past?It's freezing in here - can I close the window?Please can I have a go on your bike?Andrew, can you help me install this software?
can modal verb
(POSSIBILITY)
A2 used to express possibility
(表示可能性)可以,能,会
You can get stamps from the local newsagents.
你可以在当地的报刊销售店买到邮票。
You can get very nasty skin diseases from bathing in dirty water.
在脏水里洗澡会得严重的皮肤病。
Smoking can cause cancer.
吸烟可能会导致癌症。
Noise can be quite a problem when you're living in a flat.
住公寓噪音会很成问题。
He can be really annoying at times (= he is sometimes very annoying).
有时候他很烦人。
更多范例减少例句Couples who are childless can feel excluded from the rest of society.Children can choke on peanuts.Clearance of a cheque can take up to a week.You can get travel concessions if you are under 26.Not making a will can have serious consequences for the people you might wish to benefit.
can modal verb
(OFFER)
A1 used in polite offers of help
(用于礼貌地提出帮忙)可以,能
Can I help you with those bags?
我帮您拎那些包好吗?
I'm afraid Ms Ferguson has already left the office. Can I be of any help?
恐怕弗格森女士已经离开办公室了。我能帮什么忙吗?
更多范例减少例句Is there anything I can do to help?You can go instead of me, if you want.You look lost - can I help you?What a lot of bags! Can I carry something for you?"If you like I can do some shopping for you." "That's a very kind offer."
语法
CanCan comes first in the verb phrase (after the subject and before another verb): …
Can, could or may: typical errorsCould in the present only expresses weak possibility. Can expresses strong possibility: …
Can: formsCan comes first in the verb phrase (after the subject and before another verb): …
Can: usesWe often use can to ask for or give permission: …
Can: pastThe past of can is could: …
Can: typical errorsWe write cannot as one word: …
Can, could or may?When we talk about possibility, we use can, could and may, but they are different in meaning. …
PossibilityWhen we talk about possibility, we use can, could and may, but they are different in meaning. …
PermissionWe use can, could and may to ask for permission. We use can and may, but not could, to give permission. May is less common: …
RequestsWhen we make requests, we can use can or could (but not may). Could is more polite than can: …
cannoun uk
Your browser doesn't support HTML5 audio
/kæn/ us
Your browser doesn't support HTML5 audio
/kæn/
can noun
(CONTAINER)
A2 [ C ] (also tin can); (UK also tin) a closed metal container, especially cylinder-shaped, in which some types of drink and food are sold
(尤指圆柱形的)罐,筒,听
a can of soup/beans
一罐汤/豆
[ C ] (UK also tin) the amount of food or drink that is contained in a can
一罐的量
You'll need a can of tuna for this recipe.
做这道菜需要一罐金枪鱼。
[ C ] (UK also tin) a metal container, especially one with a lid, handle, and shaped opening for pouring
(尤指带盖和把的)金属罐
an oil can
油罐
a can of paint
一桶油漆
can noun
(HEADPHONES)
cans [ plural ] slang
→
headphones
耳机
I was wearing cans so I didn't hear anything.
我当时戴着耳机,所以什么也没听见。
can noun
(PRISON)
the can [ S ] US
informal for prison
监狱(prison的非正式说法)
He spent ten years in the can for armed robbery.
他因持枪抢劫而蹲了10年大牢。
can noun
(TOILET)
the can US
informal for toilet
厕所(toilet的非正式说法)
习语
can of worms
in the can
canverb [ T ] uk
Your browser doesn't support HTML5 audio
/kæn/ us
Your browser doesn't support HTML5 audio
/kæn/ -nn-
can verb [T]
(FOOD)
to put food and drink into a closed metal container without air
将(食物、饮料)装罐
He works in a factory where they can fruit.
他在一家罐装水果的工厂工作。
can verb [T]
(STOP)
mainly US informal to stop doing something or making noise
停止做;不再吵闹
Hey, can it, would you? I'm trying to sleep.
嗨,别吵了,行吗?我要睡觉呢。
(can在剑桥英语-中文(简体)词典的翻译 © Cambridge University Press)
A1,A1,A1,A2,A1,A2
can的翻译
中文(繁体)
能力, 能,會, 允許…
查看更多内容
西班牙语
poder, saber, lata…
查看更多内容
葡萄牙语
poder, ser capaz de, saber…
查看更多内容
更多语言
in Marathi
日语
土耳其语
法语
加泰罗尼亚语
in Dutch
in Tamil
in Hindi
in Gujarati
丹麦语
in Swedish
马来语
德语
挪威语
in Urdu
in Ukrainian
俄语
in Telugu
阿拉伯语
in Bengali
捷克语
印尼语
泰语
越南语
波兰语
韩语
意大利语
करू शकणे, परवानगी देणे, मागणे…
查看更多内容
~できる, (Can I ~?で)~してもいいですか, (Can you ~?で)~してくれませんか…
查看更多内容
yetenek, ...ebilmek, ...abilmek…
查看更多内容
peux/peut/pouvons/pouvez/peuvent, sais/sait/savons/savez/savent, (utilisé avec les verbes “see…
查看更多内容
poder, saber, llauna…
查看更多内容
kunnen, mogen, blik…
查看更多内容
செய்ய கூடிய ஒன்று, அனுமதிக்கப்பட வேண்டும், எதையாவது கோரப் பயன்படுகிறது…
查看更多内容
सकना, अनुमति लेने के लिए प्रयुक्त, अनुरोध करने के लिए प्रयुक्त…
查看更多内容
કંઈ કરી શકવા સમર્થ હોવું., મંજૂરી, વિનંતી કરવી.…
查看更多内容
kunne, få lov, gide vide…
查看更多内容
kan, kan få, får…
查看更多内容
boleh, dibenarkan, tin…
查看更多内容
können, dürfen, die Kanne…
查看更多内容
kan, boks [masculine], hermetikkboks [masculine]…
查看更多内容
سکنا, اجازت مانگنا, درخواست کے استعمال کیا جاتا ہے…
查看更多内容
могти, уміти, мати право…
查看更多内容
мочь, уметь, иметь разрешение…
查看更多内容
చేయగలగడం, అనుమతించడం, ఏమైనా మర్యాదగా అడగడానికి ఉపయోగిస్తారు…
查看更多内容
يَستَطيع, يُمكِن, هَل يُمكِن؟…
查看更多内容
(কোনো কাজ) করতে সক্ষম হওয়া, অনুমতি দেওয়া বা অনুমতি পাওয়া, কোনো কাজের জন্য অনুরোধ করা হয় এমন…
查看更多内容
moci, umět, smět…
查看更多内容
mampu, bisa, boleh…
查看更多内容
สามารถ, สามารถที่จะ, ได้รับอนุญาต…
查看更多内容
khả năng, chỉ khả năng, chỉ sự cho phép…
查看更多内容
umieć, potrafić, móc…
查看更多内容
(능력)-할 수 있다, (부탁)-해도 괜찮습니까?, (공손하게 도움을 요청할때)-해 줄 수 있으십니까?…
查看更多内容
potere, sapere, saper fare…
查看更多内容
需要一个翻译器吗?
获得快速、免费的翻译!
翻译器工具
can的发音是什么?
在英语词典中查看 can 的释义
浏览
campus
campy
campylobacter
camshaft
can
can afford phrase
can do phrase
can of worms idiom
can opener
can更多的中文(简体)翻译
全部
can't
can-do
tin can
trash can
can opener
deposit can
garbage can
查看全部意思»
惯用语
can't (even) begin idiom
in the can idiom
who can say? idiom
can take it, at I take it idiom
can't wait idiom
can of worms idiom
carry the can idiom
查看全部惯用语意思»
“每日一词”
flexitarian
A flexitarian way of eating consists mainly of vegetarian food but with some meat.
关于这个
博客
Forget doing it or forget to do it? Avoiding common mistakes with verb patterns (2)
March 06, 2024
查看更多
新词
stochastic parrot
March 04, 2024
查看更多
已添加至 list
回到页面顶端
内容
英语-中文(简体)翻译
©剑桥大学出版社与评估2024
学习
学习
学习
新词
帮助
纸质书出版
Word of the Year 2021
Word of the Year 2022
Word of the Year 2023
开发
开发
开发
词典API
双击查看
搜索Widgets
执照数据
关于
关于
关于
无障碍阅读
剑桥英语教学
剑桥大学出版社与评估
授权管理
Cookies与隐私保护
语料库
使用条款
京ICP备14002226号-2
©剑桥大学出版社与评估2024
剑桥词典+Plus
我的主页
+Plus 帮助
退出
词典
定义
清晰解释自然的书面和口头英语
英语
学习词典
基础英式英语
基础美式英语
翻译
点击箭头改变翻译方向。
双语词典
英语-中文(简体)
Chinese (Simplified)–English
英语-中文(繁体)
Chinese (Traditional)–English
英语-荷兰语
荷兰语-英语
英语-法语
法语-英语
英语-德语
德语-英语
英语-印尼语
印尼语-英语
英语-意大利语
意大利语-英语
英语-日语
日语-英语
英语-挪威语
挪威语-英语
英语-波兰语
波兰语-英语
英语-葡萄牙语
葡萄牙语-英语
英语-西班牙语
西班牙语-英语
English–Swedish
Swedish–English
半双语词典
英语-阿拉伯语
英语-孟加拉语
英语-加泰罗尼亚语
英语-捷克语
英语-丹麦语
English–Gujarati
英语-印地语
英语-韩语
英语-马来语
英语-马拉地语
英语-俄语
English–Tamil
English–Telugu
英语-泰语
英语-土耳其语
英语-乌克兰语
English–Urdu
英语-越南语
翻译
语法
同义词词典
Pronunciation
剑桥词典+Plus
Shop
剑桥词典+Plus
我的主页
+Plus 帮助
退出
登录 /
注册
中文 (简体)
Change
English (UK)
English (US)
Español
Русский
Português
Deutsch
Français
Italiano
中文 (简体)
正體中文 (繁體)
Polski
한국어
Türkçe
日本語
Tiếng Việt
हिंदी
தமிழ்
తెలుగు
关注我们
选择一本词典
最近的词和建议
定义
清晰解释自然的书面和口头英语
英语
学习词典
基础英式英语
基础美式英语
语法与同义词词典
对自然书面和口头英语用法的解释
英语语法
同义词词典
Pronunciation
British and American pronunciations with audio
English Pronunciation
翻译
点击箭头改变翻译方向。
双语词典
英语-中文(简体)
Chinese (Simplified)–English
英语-中文(繁体)
Chinese (Traditional)–English
英语-荷兰语
荷兰语-英语
英语-法语
法语-英语
英语-德语
德语-英语
英语-印尼语
印尼语-英语
英语-意大利语
意大利语-英语
英语-日语
日语-英语
英语-挪威语
挪威语-英语
英语-波兰语
波兰语-英语
英语-葡萄牙语
葡萄牙语-英语
英语-西班牙语
西班牙语-英语
English–Swedish
Swedish–English
半双语词典
英语-阿拉伯语
英语-孟加拉语
英语-加泰罗尼亚语
英语-捷克语
英语-丹麦语
English–Gujarati
英语-印地语
英语-韩语
英语-马来语
英语-马拉地语
英语-俄语
English–Tamil
English–Telugu
英语-泰语
英语-土耳其语
英语-乌克兰语
English–Urdu
英语-越南语
词典+Plus
词汇表
选择语言
中文 (简体)
English (UK)
English (US)
Español
Русский
Português
Deutsch
Français
Italiano
正體中文 (繁體)
Polski
한국어
Türkçe
日本語
Tiếng Việt
हिंदी
தமிழ்
తెలుగు
内容
英语-中文(简体)
Modal verb
can (ABILITY)
can do
can (PERMISSION)
can (REQUEST)
can (POSSIBILITY)
can (OFFER)
Noun
can (CONTAINER)
can (HEADPHONES)
cans
can (PRISON)
the can
can (TOILET)
the can
Verb
can (FOOD)
can (STOP)
Translations
语法
所有翻译
我的词汇表
把can添加到下面的一个词汇表中,或者创建一个新词汇表。
更多词汇表
前往词汇表
对该例句有想法吗?
例句中的单词与输入词条不匹配。
该例句含有令人反感的内容。
取消
提交
例句中的单词与输入词条不匹配。
该例句含有令人反感的内容。
取消
提交
can(英文单词)_百度百科
英文单词)_百度百科 网页新闻贴吧知道网盘图片视频地图文库资讯采购百科百度首页登录注册进入词条全站搜索帮助首页秒懂百科特色百科知识专题加入百科百科团队权威合作下载百科APP个人中心can是一个多义词,请在下列义项上选择浏览(共6个义项)展开添加义项can播报讨论上传视频英文单词收藏查看我的收藏0有用+10can,英语单词,情态动词、名词、动词,作情态动词时意为“. 能;能够 [1];有机会;可能;被允许”,作名词时意为“圆柱形金属容器;罐头;一听所装的(食物或饮料)量;酒瓶;喷罐;监狱;卫生间;臀部;驱逐舰;破坏者;(美)卡恩(人名)”;作动词时意为“把(食物)装罐保存;(非正式)解雇;拒绝接受”。外文名can词 性情态动词、名词、动词用 法can后加动词原形目录1单词发音2短语搭配3双语例句单词发音播报编辑英[kæn]美[kæn] [2]短语搭配播报编辑tin can 罐头 ; 马口铁罐头 ; 锡罐 ; 锡杯aluminum can 铝罐 ; 铝包壳 ; 铝能图片beverage can 易拉罐 ; 饮料罐头 ; 饮料罐Trinh Can 郑根Huy Can 辉瑾Can think 能想Can get 能拿到Money can 钱能 ; 储钱罐 ; 千金难买can buoy [水运] 罐形浮标 ; 罐形浮筒 ; 罐状浮标 [2]双语例句播报编辑What can I do for you?我可以为你做些什么?What can it do for me?它可以为我做什么?If you can do it , so can I.如果你能做到,我也可以。 [2]新手上路成长任务编辑入门编辑规则本人编辑我有疑问内容质疑在线客服官方贴吧意见反馈投诉建议举报不良信息未通过词条申诉投诉侵权信息封禁查询与解封©2024 Baidu 使用百度前必读 | 百科协议 | 隐私政策 | 百度百科合作平台 | 京ICP证030173号 京公网安备110000020000CAN通信详解(全)_can通信的详细讲解-CSDN博客
>CAN通信详解(全)_can通信的详细讲解-CSDN博客
CAN通信详解(全)
最新推荐文章于 2024-01-13 17:54:41 发布
adazone
最新推荐文章于 2024-01-13 17:54:41 发布
阅读量10w+
收藏
1.2k
点赞数
178
分类专栏:
can总线
文章标签:
can
协议
can总线
专栏收录该内容
2 篇文章
21 订阅
订阅专栏
本章我们将向大家介绍如何使用STM32自带的CAN控制器来实现两个开发板之间的CAN通讯,并将结果显示在TFTLCD模块上。本章分为如下几个部分:
30.1 CAN简介
30.2 硬件设计
30.3 软件设计
30.4 下载验证 30.1 CAN简介
CAN 是Controller Area Network 的缩写(以下称为CAN),是ISO国际标准化的串行通信协议。在当前的汽车产业中,出于对安全性、舒适性、方便性、低公害、低成本的要求,各种各样的电子控制系统被开发了出来。由于这些系统之间通信所用的数据类型及对可靠性的要求不尽相同,由多条总线构成的情况很多,线束的数量也随之增加。为适应“减少线束的数量”、“通过多个LAN,进行大量数据的高速通信”的需要,1986 年德国电气商博世公司开发出面向汽车的CAN 通信协议。此后,CAN 通过ISO11898 及ISO11519 进行了标准化,现在在欧洲已是汽车网络的标准协议。
现在,CAN 的高性能和可靠性已被认同,并被广泛地应用于工业自动化、船舶、医疗设备、工业设备等方面。现场总线是当今自动化领域技术发展的热点之一,被誉为自动化领域的计算机局域网。它的出现为分布式控制系统实现各节点之间实时、可靠的数据通信提供了强有力的技术支持。
CAN 控制器根据两根线上的电位差来判断总线电平。总线电平分为显性电平和隐性电平,二者必居其一。发送方通过使总线电平发生变化,将消息发送给接收方。
CAN协议具有一下特点:
1) 多主控制。在总线空闲时,所有单元都可以发送消息(多主控制),而两个以上的单元同时开始发送消息时,根据标识符(Identifier 以下称为 ID)决定优先级。ID 并不是表示发送的目的地址,而是表示访问总线的消息的优先级。两个以上的单元同时开始发送消息时,对各消息ID 的每个位进行逐个仲裁比较。仲裁获胜(被判定为优先级最高)的单元可继续发送消息,仲裁失利的单元则立刻停止发送而进行接收工作。
2) 系统的若软性。与总线相连的单元没有类似于“地址”的信息。因此在总线上增加单元时,连接在总线上的其它单元的软硬件及应用层都不需要改变。
3) 通信速度较快,通信距离远。最高1Mbps(距离小于40M),最远可达10KM(速率低于5Kbps)。
4) 具有错误检测、错误通知和错误恢复功能。所有单元都可以检测错误(错误检测功能),检测出错误的单元会立即同时通知其他所有单元(错误通知功能),正在发送消息的单元一旦检测出错误,会强制结束当前的发送。强制结束发送的单元会不断反复地重新发送此消息直到成功发送为止(错误恢复功能)。
5) 故障封闭功能。CAN 可以判断出错误的类型是总线上暂时的数据错误(如外部噪声等)还是持续的数据错误(如单元内部故障、驱动器故障、断线等)。由此功能,当总线上发生持续数据错误时,可将引起此故障的单元从总线上隔离出去。
6) 连接节点多。CAN 总线是可同时连接多个单元的总线。可连接的单元总数理论上是没有限制的。但实际上可连接的单元数受总线上的时间延迟及电气负载的限制。降低通信速度,可连接的单元数增加;提高通信速度,则可连接的单元数减少。
正是因为CAN协议的这些特点,使得CAN特别适合工业过程监控设备的互连,因此,越来越受到工业界的重视,并已公认为最有前途的现场总线之一。
CAN协议经过ISO标准化后有两个标准:ISO11898标准和ISO11519-2标准。其中ISO11898是针对通信速率为125Kbps~1Mbps的高速通信标准,而ISO11519-2是针对通信速率为125Kbps以下的低速通信标准。
本章,我们使用的是450Kbps的通信速率,使用的是ISO11898标准,该标准的物理层特征如图30.1.1所示: 图30.1.1 ISO11898物理层特性
从该特性可以看出,显性电平对应逻辑0,CAN_H和CAN_L之差为2.5V左右。而隐性电平对应逻辑1,CAN_H和CAN_L之差为0V。在总线上显性电平具有优先权,只要有一个单元输出显性电平,总线上即为显性电平。而隐形电平则具有包容的意味,只有所有的单元都输出隐性电平,总线上才为隐性电平(显性电平比隐性电平更强)。另外,在CAN总线的起止端都有一个120Ω的终端电阻,来做阻抗匹配,以减少回波反射。
注:ISO11898标准和ISO11519-2标准下,显性电平和隐形电平定义是有区别的。只不过都是隐形电平为1,显性电平为0.
CAN协议是通过以下5种类型的帧进行的:
l 数据帧
l 要控帧
l 错误帧
l 过载帧
l 帧间隔
另外,数据帧和遥控帧有标准格式和扩展格式两种格式。标准格式有11 个位的标识符(ID),扩展格式有29 个位的ID。各种帧的用途如表30.1.1所示:
帧类型
帧用途
数据帧
用于发送单元向接收单元传送数据的帧
遥控帧
用于接收单元向具有相同 ID 的发送单元请求数据的帧
错误帧
用于当检测出错误时向其它单元通知错误的帧
过载帧
用于接收单元通知其尚未做好接收准备的帧
间隔帧
用于将数据帧及遥控帧与前面的帧分离开来的帧
表30.1.1 CAN协议各种帧及其用途
由于篇幅所限,我们这里仅对数据帧进行详细介绍,数据帧一般由7个段构成,即:
(1) 帧起始。表示数据帧开始的段。
(2) 仲裁段。表示该帧优先级的段。
(3) 控制段。表示数据的字节数及保留位的段。
(4) 数据段。数据的内容,一帧可发送0~8个字节的数据。
(5) CRC段。检查帧的传输错误的段。
(6) ACK段。表示确认正常接收的段。
(7) 帧结束。表示数据帧结束的段。
数据帧的构成如图30.1.2所示:
图30.1.2 数据帧的构成
图中D表示显性电平,R表示隐形电平(下同)。
帧起始,这个比较简单,标准帧和扩展帧都是由1个位的显性电平表示帧起始。
仲裁段,表示数据优先级的段,标准帧和扩展帧格式在本段有所区别,如图30.1.3所示: 图30.1.3 数据帧仲裁段构成
标准格式的ID 有11 个位。从ID28 到ID18 被依次发送。禁止高7 位都为隐性(禁止设定:ID=1111111XXXX)。扩展格式的 ID 有29 个位。基本ID 从ID28 到ID18,扩展ID 由ID17 到ID0 表示。基本ID和标准格式的ID 相同。禁止高7 位都为隐性(禁止设定:基本ID=1111111XXXX)。
其中RTR位用于标识是否是远程帧(0,数据帧;1,远程帧),IDE位为标识符选择位(0,使用标准标识符;1,使用扩展标识符),SRR位为代替远程请求位,为隐性位,它代替了标准帧中的RTR位。
控制段,由6个位构成,表示数据段的字节数。标准帧和扩展帧的控制段稍有不同,如图30.1.4所示: 图30.1.4 数据帧控制段构成
上图中,r0和r1为保留位,必须全部以显性电平发送,但是接收端可以接收显性、隐性及任意组合的电平。DLC段为数据长度表示段,高位在前,DLC段有效值为0~8,但是接收方接收到9~15的时候并不认为是错误。
数据段,该段可包含0~8个字节的数据。从最高位(MSB)开始输出,标准帧和扩展帧在这个段的定义都是一样的。如图30.1.5所示: 图30.1.5 数据帧数据段构成
CRC段,该段用于检查帧传输错误。由15个位的CRC顺序和1个位的CRC界定符(用于分隔的位)组成,标准帧和扩展帧在这个段的格式也是相同的。如图30.1.6所示:
图30.1.6 数据帧CRC段构成
此段CRC的值计算范围包括:帧起始、仲裁段、控制段、数据段。接收方以同样的算法计算 CRC 值并进行比较,不一致时会通报错误。
ACK段,此段用来确认是否正常接收。由ACK槽(ACK Slot)和ACK界定符2个位组成。标准帧和扩展帧在这个段的格式也是相同的。如图30.1.7所示:
图30.1.7 数据帧CRC段构成
发送单元的ACK,发送2个位的隐性位,而接收到正确消息的单元在ACK槽(ACK Slot)发送显性位,通知发送单元正常接收结束,这个过程叫发送ACK/返回ACK。发送 ACK 的是在既不处于总线关闭态也不处于休眠态的所有接收单元中,接收到正常消息的单元(发送单元不发送ACK)。所谓正常消息是指不含填充错误、格式错误、CRC 错误的消息。
帧结束,这个段也比较简单,标准帧和扩展帧在这个段格式一样,由7个位的隐性位组成。
至此,数据帧的7个段就介绍完了,其他帧的介绍,请大家参考光盘的CAN入门书.pdf相关章节。接下来,我们再来看看CAN的位时序。
由发送单元在非同步的情况下发送的每秒钟的位数称为位速率。一个位可分为 4 段。
l 同步段(SS)
l 传播时间段(PTS)
l 相位缓冲段1(PBS1)
l 相位缓冲段2(PBS2)
这些段又由可称为 Time Quantum(以下称为Tq)的最小时间单位构成。
1 位分为4 个段,每个段又由若干个Tq 构成,这称为位时序。
1 位由多少个Tq 构成、每个段又由多少个Tq 构成等,可以任意设定位时序。通过设定位时序,多个单元可同时采样,也可任意设定采样点。各段的作用和 Tq 数如表30.1.2所示:
表30.1.2 一个位各段及其作用
1个位的构成如图30.1.8所示:
图30.1.8 一个位的构成
上图的采样点,是指读取总线电平,并将读到的电平作为位值的点。位置在 PBS1 结束处。根据这个位时序,我们就可以计算CAN通信的波特率了。具体计算方法,我们等下再介绍,前面提到的CAN协议具有仲裁功能,下面我们来看看是如何实现的。
在总线空闲态,最先开始发送消息的单元获得发送权。
当多个单元同时开始发送时,各发送单元从仲裁段的第一位开始进行仲裁。连续输出显性电平最多的单元可继续发送。实现过程,如图30.1.9所示: 图30.1.9 CAN总线仲裁过程
上图中,单元1和单元2同时开始向总线发送数据,开始部分他们的数据格式是一样的,故无法区分优先级,直到T时刻,单元1输出隐性电平,而单元2输出显性电平,此时单元1仲裁失利,立刻转入接收状态工作,不再与单元2竞争,而单元2则顺利获得总线使用权,继续发送自己的数据。这就实现了仲裁,让连续发送显性电平多的单元获得总线使用权。
通过以上介绍,我们对CAN总线有了个大概了解(详细介绍参考光盘的:《CAN入门书.pdf》),接下来我们介绍下STM32的CAN控制器。
STM32自带的是bxCAN,即基本扩展CAN。它支持CAN协议2.0A和2.0B。它的设计目标是,以最小的CPU负荷来高效处理大量收到的报文。它也支持报文发送的优先级要求(优先级特性可软件配置)。对于安全紧要的应用,bxCAN提供所有支持时间触发通信模式所需的硬件功能。
STM32的bxCAN的主要特点有:
l 支持CAN协议2.0A和2.0B主动模式
l 波特率最高达1Mbps
l 支持时间触发通信
l 具有3个发送邮箱
l 具有3级深度的2个接收FIFO
l 可变的过滤器组(最多28个)
在STM32互联型产品中,带有2个CAN控制器,而我们使用的STM32F103ZET6属于增强型,不是互联型,只有1个CAN控制器。双CAN的框图如图30.1.10所示: 图30.1.10 双CAN框图
从图中可以看出两个CAN都分别拥有自己的发送邮箱和接收FIFO,但是他们共用28个滤波器。通过CAN_FMR寄存器的设置,可以设置滤波器的分配方式。
STM32的标识符过滤是一个比较复杂的东东,它的存在减少了CPU处理CAN通信的开销。STM32的过滤器组最多有28个(互联型),但是STM32F103ZET6只有14个(增强型),每个滤波器组x由2个32为寄存器,CAN_FxR1和CAN_FxR2组成。
STM32每个过滤器组的位宽都可以独立配置,以满足应用程序的不同需求。根据位宽的不同,每个过滤器组可提供:
● 1个32位过滤器,包括:STDID[10:0]、EXTID[17:0]、IDE和RTR位
● 2个16位过滤器,包括:STDID[10:0]、IDE、RTR和EXTID[17:15]位
此外过滤器可配置为,屏蔽位模式和标识符列表模式。
在屏蔽位模式下,标识符寄存器和屏蔽寄存器一起,指定报文标识符的任何一位,应该按照“必须匹配”或“不用关心”处理。
而在标识符列表模式下,屏蔽寄存器也被当作标识符寄存器用。因此,不是采用一个标识符加一个屏蔽位的方式,而是使用2个标识符寄存器。接收报文标识符的每一位都必须跟过滤器标识符相同。
通过CAN_FMR寄存器,可以配置过滤器组的位宽和工作模式,如图30.1.11所示: 图30.1.11 过滤器组位宽模式设置
为了过滤出一组标识符,应该设置过滤器组工作在屏蔽位模式。
为了过滤出一个标识符,应该设置过滤器组工作在标识符列表模式。
应用程序不用的过滤器组,应该保持在禁用状态。
过滤器组中的每个过滤器,都被编号为(叫做过滤器号,图30.1.11中的n)从0开始,到某个最大数值-取决于过滤器组的模式和位宽的设置。
举个简单的例子,我们设置过滤器组0工作在:1个32为位过滤器-标识符屏蔽模式,然后设置CAN_F0R1=0XFFFF0000,CAN_F0R2=0XFF00FF00。其中存放到CAN_F0R1的值就是期望收到的ID,即我们希望收到的映像(STID+EXTID+IDE+RTR)最好是:0XFFFF0000。而0XFF00FF00就是设置我们需要必须关心的ID,表示收到的映像,其位[31:24]和位[15:8]这16个位的必须和CAN_F0R1中对应的位一模一样,而另外的16个位则不关心,可以一样,也可以不一样,都认为是正确的ID,即收到的映像必须是0XFFxx00xx,才算是正确的(x表示不关心)。
关于标识符过滤的详细介绍,请参考《STM32参考手册》的22.7.4节(431页)。接下来,我们看看STM32的CAN发送和接收的流程。
CAN发送流程
CAN发送流程为:程序选择1个空置的邮箱(TME=1)à设置标识符(ID),数据长度和发送数据à设置CAN_TIxR的TXRQ位为1,请求发送à邮箱挂号(等待成为最高优先级)à预定发送(等待总线空闲)à发送à邮箱空置。整个流程如图30.1.12所示:
图30.1.12 发送邮箱
上图中,还包含了很多其他处理,不强制退出发送(ABRQ=1)和发送失败处理等。通过这个流程图,我们大致了解了CAN的发送流程,后面的数据发送,我们基本就是按照此流程来走。接下来再看看CAN的接收流程。
CAN接收流程
CAN接收到的有效报文,被存储在3级邮箱深度的FIFO中。FIFO完全由硬件来管理,从而节省了CPU的处理负荷,简化了软件并保证了数据的一致性。应用程序只能通过读取FIFO输出邮箱,来读取FIFO中最先收到的报文。这里的有效报文是指那些正确被接收的(直到EOF都没有错误)且通过了标识符过滤的报文。前面我们知道CAN的接收有2个FIFO,我们每个滤波器组都可以设置其关联的FIFO,通过CAN_FFA1R的设置,可以将滤波器组关联到FIFO0/FIFO1。
CAN接收流程为:FIFO空à收到有效报文à挂号_1(存入FIFO的一个邮箱,这个由硬件控制,我们不需要理会)à收到有效报文à挂号_2à收到有效报文à挂号_3à收到有效报文à溢出。
这个流程里面,我们没有考虑从FIFO读出报文的情况,实际情况是:我们必须在FIFO溢出之前,读出至少1个报文,否则下个报文到来,将导致FIFO溢出,从而出现报文丢失。每读出1个报文,相应的挂号就减1,直到FIFO空。CAN接收流程如图30.1.13所示:
图30.1.13 FIFO接收报文
FIFO接收到的报文数,我们可以通过查询CAN_RFxR的FMP寄存器来得到,只要FMP不为0,我们就可以从FIFO读出收到的报文。
接下来,我们简单看看STM32的CAN位时间特性,STM32的CAN位时间特性和之前我们介绍的,稍有点区别。STM32把传播时间段和相位缓冲段1(STM32称之为时间段1)合并了,所以STM32的CAN一个位只有3段:同步段(SYNC_SEG)、时间段1(BS1)和时间段2(BS2)。STM32的BS1段可以设置为1~16个时间单元,刚好等于我们上面介绍的传播时间段和相位缓冲段1之和。STM32的CAN位时序如图30.1.14所示:
图30.1.14 STM32 CAN位时序
图中还给出了CAN波特率的计算公式,我们只需要知道BS1和BS2的设置,以及APB1的时钟频率(一般为36Mhz),就可以方便的计算出波特率。比如设置TS1=6、TS2=7和BRP=4,在APB1频率为36Mhz的条件下,即可得到CAN通信的波特率=36000/[(7+8+1)*5]=450Kbps。
接下来,我们介绍一下本章需要用到的一些比较重要的寄存器。首先,来看CAN的主控制寄存器(CAN_MCR),该寄存器各位描述如图30.1.15:
图30.1.15 寄存器CAN_MCR各位描述
该寄存器的详细描述,请参考《STM32参考手册》22.9.2节(439页),这里我们仅介绍下INRQ位,该位用来控制初始化请求。
软件对该位清0,可使CAN从初始化模式进入正常工作模式:当CAN在接收引脚检测到连续的11个隐性位后,CAN就达到同步,并为接收和发送数据作好准备了。为此,硬件相应地对CAN_MSR寄存器的INAK位清’0’。
软件对该位置1可使CAN从正常工作模式进入初始化模式:一旦当前的CAN活动(发送或接收)结束,CAN就进入初始化模式。相应地,硬件对CAN_MSR寄存器的INAK位置’1’。
所以我们在CAN初始化的时候,先要设置该位为1,然后进行初始化(尤其是CAN_BTR的设置,该寄存器,必须在CAN正常工作之前设置),之后再设置该位为0,让CAN进入正常工作模式。
第二个,我们介绍CAN位时序寄存器(CAN_BTR),该寄存器用于设置分频、Tbs1、Tbs2以及Tsjw等非常重要的参数,直接决定了CAN的波特率。另外该寄存器还可以设置CAN的工作模式,该寄存器各位描述如图30.1.16所示:
图30.1.16 寄存器CAN_BTR各位描述
STM32提供了两种测试模式,环回模式和静默模式,当然他们组合还可以组合成环回静默模式。这里我们简单介绍下环回模式。
在环回模式下,bxCAN把发送的报文当作接收的报文并保存(如果可以通过接收过滤)在接收邮箱里。也就是环回模式是一个自发自收的模式,如图30.1.17所示: 图30.1.17 CAN环回模式
环回模式可用于自测试。为了避免外部的影响,在环回模式下CAN内核忽略确认错误(在数据/远程帧的确认位时刻,不检测是否有显性位)。在环回模式下,bxCAN在内部把Tx输出回馈到Rx输入上,而完全忽略CANRX引脚的实际状态。发送的报文可以在CANTX引脚上检测到。
第三个,我们介绍CAN发送邮箱标识符寄存器(CAN_TIxR)(x=0~3),该寄存器各位描述如图30.1.18所示:
图30.1.18 寄存器CAN_TIxR各位描述
该寄存器主要用来设置标识符(包括扩展标识符),另外还可以设置帧类型,通过TXRQ值1,来请求邮箱发送。因为有3个发送邮箱,所以寄存器CAN_TIxR有3个。
第四个,我们介绍CAN发送邮箱数据长度和时间戳寄存器 (CAN_TDTxR) (x=0~2),该寄存器我们本章仅用来设置数据长度,即最低4个位。比较简单,这里就不详细介绍了。
第五个,我介绍的是CAN发送邮箱低字节数据寄存器 (CAN_TDLxR) (x=0~2),该寄存器各位描述如图30.1.19所示:
图30.1.19 寄存器CAN_TDLxR各位描述
该寄存器用来存储将要发送的数据,这里只能存储低4个字节,另外还有一个寄存器CAN_TDHxR,该寄存器用来存储高4个字节,这样总共就可以存储8个字节。CAN_TDHxR的各位描述同CAN_TDLxR类似,我们就不单独介绍了。
第六个,我们介绍CAN接收FIFO邮箱标识符寄存器 (CAN_RIxR) (x=0/1),该寄存器各位描述同CAN_TIxR寄存器几乎一模一样,只是最低位为保留位,该寄存器用于保存接收到的报文标识符等信息,我们可以通过读该寄存器获取相关信息。
同样的,CAN接收FIFO邮箱数据长度和时间戳寄存器 (CAN_RDTxR) 、CAN接收FIFO邮箱低字节数据寄存器 (CAN_RDLxR)和CAN接收FIFO邮箱高字节数据寄存器 (CAN_RDHxR) 分别和发送邮箱的:CAN_TDTxR、CAN_TDLxR以及CAN_TDHxR类似,这里我们就不单独一一介绍了。详细介绍,请参考《STM32参考手册 》22.9.3节(447页)。
第七个,我们介绍CAN过滤器模式寄存器(CAN_FM1R),该寄存器各位描述如图30.1.20所示: 图30.1.20 寄存器CAN_FM1R各位描述
该寄存器用于设置各滤波器组的工作模式,对28个滤波器组的工作模式,都可以通过该寄存器设置,不过该寄存器必须在过滤器处于初始化模式下(CAN_FMR的FINIT位=1),才可以进行设置。对STM32F103ZET6来说,只有[13:0]这14个位有效。
第八个,我们介绍CAN过滤器位宽寄存器(CAN_FS1R),该寄存器各位描述如图30.1.21所示:
图30.1.21 寄存器CAN_FS1R各位描述
该寄存器用于设置各滤波器组的位宽,对28个滤波器组的位宽设置,都可以通过该寄存器实现。该寄存器也只能在过滤器处于初始化模式下进行设置。对STM32F103ZET6来说,同样只有[13:0]这14个位有效。
第九个,我们介绍CAN过滤器FIFO关联寄存器(CAN_FFA1R),该寄存器各位描述如图30.1.22所示:
图30.1.22 寄存器CAN_FFA1R各位描述
该寄存器设置报文通过滤波器组之后,被存入的FIFO,如果对应位为0,则存放到FIFO0;如果为1,则存放到FIFO1。该寄存器也只能在过滤器处于初始化模式下配置。
第十个,我们介绍CAN过滤器激活寄存器(CAN_FA1R),该寄存器各位对应滤波器组和前面的几个寄存器类似,这里就不列出了,对对应位置1,即开启对应的滤波器组;置0则关闭该滤波器组。
最后,我们介绍CAN的过滤器组i的寄存器x(CAN_FiRx)(互联产品中i=0~27,其它产品中i=0~13;x=1/2)。该寄存器各位描述如图30.1.23所示:
图30.1.23 寄存器CAN_FiRx各位描述
每个滤波器组的CAN_FiRx都由2个32位寄存器构成,即:CAN_FiR1和CAN_FiR2。根据过滤器位宽和模式的不同设置,这两个寄存器的功能也不尽相同。关于过滤器的映射,功能描述和屏蔽寄存器的关联,请参见图30.1.11。
关于CAN的介绍,就到此结束了。接下来,我们看看本章我们将实现的功能,及CAN的配置步骤。
本章,我们通过WK_UP按键选择CAN的工作模式(正常模式/环回模式),然后通过KEY0控制数据发送,并通过查询的办法,将接收到的数据显示在LCD模块上。如果是环回模式,我们不需要2个开发板。如果是正常模式,我们就需要2个战舰开发板,并且将他们的CAN接口对接起来,然后一个开发板发送数据,另外一个开发板将接收到的数据显示在LCD模块上。
最后,我们来看看本章的CAN的初始化配置步骤:
1)配置相关引脚的复用功能,使能CAN时钟。
我们要用CAN,第一步就要使能CAN的时钟,CAN的时钟通过APB1ENR的第25位来设置。其次要设置CAN的相关引脚为复用输出,这里我们需要设置PA11为上拉输入(CAN_RX引脚)PA12为复用输出(CAN_TX引脚),并使能PA口的时钟
2)设置CAN工作模式及波特率等。
这一步通过先设置CAN_MCR寄存器的INRQ位,让CAN进入初始化模式,然后设置CAN_MCR的其他相关控制位。再通过CAN_BTR设置波特率和工作模式(正常模式/环回模式)等信息。 最后设置INRQ为0,退出初始化模式。
3)设置滤波器。
本章,我们将使用滤波器组0,并工作在32位标识符屏蔽位模式下。先设置CAN_FMR的FINIT位,让过滤器组工作在初始化模式下,然后设置滤波器组0的工作模式以及标识符ID和屏蔽位。最后激活滤波器,并退出滤波器初始化模式。
至此,CAN就可以开始正常工作了。如果用到中断,就还需要进行中断相关的配置,本章因为没用到中断,所以就不作介绍了。
30.2 硬件设计
本章要用到的硬件资源如下:
1) 指示灯DS0
2) KEY0和WK_UP按键
3) TFTLCD模块
4) CAN
5) CAN收发芯片JTA1050
前面3个之前都已经详细介绍过了,这里我们介绍STM32与TJA1050连接关系,如图30.2.1所示: 图30.2.1 STM32与TJA1050连接电路图
从上图可以看出:STM32的CAN通过P13的设置,连接到TJA1050收发芯片,然后通过接线端子(CAN)同外部的CAN总线连接。图中可以看出,在战舰STM32开发板上面是带有120Ω的终端电阻的,如果我们的开发板不是作为CAN的终端的话,需要把这个电阻去掉,以免影响通信。
这里还要注意,我们要设置好开发板上P13排针的连接,通过跳线帽将PA11和PA12分别连接到CRX(CAN_RX)和CTX(CAN_TX)上面,如图30.2.2所示: 图30.2.2 硬件连接示意图
最后,我们用2根导线将两个开发板CAN端子的CAN_L和CAN_L,CAN_H和CAN_H连接起来。这里注意不要接反了(CAN_L接CAN_H),接反了会导致通讯异常!!