CAN总线教程,超适合新手! 2024-07-28 18:13:31 工作原理当 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) 过载帧:过载帧用以在先行的后续的数据帧(或远程帧)之间提供一附加的延时。我们先研究数据帧一,数据帧由 7 个不同位场组成(帧起始、仲裁场、控制场、数据场、CRC场、应答场、帧结尾)。这里的位场,就是不同位的组合,这名字起的很烂,让人看了感觉很抽象。我们来看看这些个不同的位场吧。一开始是一位帧起始,也叫SOF。它用显性位表示,也就是0;它告诉我们,两个线上有电压差了,也就是有数据了。这个帧起始看起来只有一位,其实不简单了。为了让所有的分站都同步于发送报文的发送站,好接收数据,有很多要考虑的地方。然后下一个场是仲裁场。这个仲裁很抽象,其实在这里就是为了解决一个问题。如果2个或2个以上的单元同时开始传送报文,那么就会有总线访问冲突,那么仲裁机制就是用来根据标识符优先级来一个一个的去掉低级别的数据。我们可以详细的描述这场生动的争抢总线的战斗。当总线处于空闲状态时呈隐性电平,此时任何节点都可以向总线发送显性电平作为帧的开始。2个或2个以上的节点同时发送开始争抢总线,但是总线只能被一个人抢走。这时候到底怎么决定谁留下,谁滚蛋呢。我们开始思索,我们以前定义了标识符,标识符有优先级,它越小,它优先级越高。那么怎么实现的呢。看下面图:首先搞明白两点:一、下图中, 低波形代表0(显性),高波形代表1(隐性);二、当隐性碰到显性,就变为显性。如图所示,节点 A 和节点B 的标识符的第10、9、8 位电平相同,因此两个节点侦听到的信息和它们发出的信息相同。第7位节点B发出一个“1”,但从节点上接收到的消息却是“0”。为什么呢,因为A 节点同时发出显性位,让总线也变成显性了,也就是0。节点B 会退出发送处于单纯监听方式而不发送数据;节点A 成功发送仲裁位从而获得总线的控制权,继而发送全部消息。总线中的信号持续跟踪最后获得总线控制权发出的报文,本例中节点A的报文将被跟踪。这种非破坏性位仲裁方法的优点在于,在网络最终确定哪个节点被传送前,报文的起始部分已经在网络中传输了,因此具有高优先级的节点的数据传输没有任何延时。在获得总线控制权的节点发送数据过程中,其他节点成为报文的接收节点,并且不会在总线再次空闲之前发送报文,在这逐位的比较中,最终节点B 因为第七位的偏差丢掉了总线。从此单纯监听,江山就拱手让给了节点A 了。这就是仲裁机制。上面我们说过,报文有两种格式,标准和扩展。这里,不同的格式仲裁场是不一样的。标准格式下,仲裁场由11 位识别符和RTR 位组成。但在扩展格式里,包括29 位识别符、SRR 位、IDE 位、RTR 位。RTR 位,Remote Tranmission Request BIT 全称为远程发送请求位。它在数据帧里必须为显性0 ,但在远程帧里为隐性1。SRR 位,替代远程请求位,SRR 是一隐性位,也就是1,它在扩展格式的标准帧RTR 位位置,那么标准帧怪不得优先于扩展帧了,因为在传输完11 位标识符之后(扩展帧的后18 位在最后发送,先发送11 位标识符),轮到标准帧的RTR 位和扩展帧的SRR 位了。这时候,标准帧的RTR 为显性,而扩展帧SRR 为隐性,这样,总线自然就被标准帧占据。同时上面那个问题,也一目了然了,CAN 总线协议设计者,肯定是设计了数据帧优先于远程帧。所以IDE(Identifier Extension Bit),全称识别符扩展位,它属于扩展格式的仲裁场。对于扩展格式,IDE位属于仲裁场;对于标准格式,IDE位属于控制场。标准格式的IDE位为“显性”,而扩展格式的IDE位为“隐性”。▲标准格式中的数据帧▲拓展格式中的数据帧控制场控制场由6个位组成,标准格式和扩展格式的控制场格式不同。标准格式里的帧包括数据长度代码、IDE位(为显性位)及保留位r0。扩展格式里的帧包括数据长度代码和两个保留位:r1和r0。其保留位必须发送为显性,但是接收器认可“显性”和“隐性”位的任何组合。其结构如图所示:▲控制场结构数据长度代码(标准格式以及扩展格式)DLC,如下表所示:▲数据帧长度代码DLC数据长度代码指示了数据场里的字节数量。其中:d—“显性”, r—“隐性”,数据帧允许的数据字节数为{0,1,...,7,8}。其他的数值不允许使用。数据场数据场由数据帧里的发送数据组成。它可以为0~8个字节,每字节包含了8个位,首先发送最高有效位(MSB)。循环冗余码CRC场是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。CRC场包括CRC序列(CRC Sequence),其后是CRC界定符(CRC Delimiter),结构如图:生成 CRC 码的基本原理:任意一个由二进制位串组成的代码都可以和一个系数仅为‘0’和‘1’取值的多项式一一对应。例如:代码1010111 对应的多项式为x6+x4+x2+x+1,而多项式为x5+x3+x2+x+1 对应的代码101111。参考一下下面的例题,自已再领悟一下吧!已知信息位为1101,生成多项式G(x)= x3+x+1,求CRC 码。要传输的信息序列为1101,在末尾添加所给多项式的最高次阶个0,如本题为x^3,则添加3个0,变为:1101000;由多项式G(X)=X3+X+1,得其阶数为1的二进制编码为:1011;1101000对1011进行模二除法,所得到的余数即为校验码,把校验码添加在原数据尾部即为所求的编码,则实际发送的数据序列为1101001。校验码计算过程如图所示:应答场(ACK Field)应答场长度为2个位,包含应答间隙(ACK Slot)和应答界定符(ACK Delimiter),如图所示。在ACK场(应答场)里,发送节点发送两个“隐性”位。当接收器正确地接收到有效的报文,接收器就会在应答间隙(ACK Slot)期间向发送器发送一“显性”位以示应答。帧结尾每一个数据帧和远程帧均由一标志序列界定。这个标志序列由7个“隐性”位组成。二、远程帧通过发送远程帧,总线的节点发出远程帧,请求以前发送给它数据帧的节点再发送一遍。具体发送哪个数据帧,由远程帧的标识符决定。与数据帧类似,远程帧也有标准格式和扩展格式,而且都由6个不同的位场组成:帧起始、仲裁场、控制场、CRC场、应答场、帧结尾。与数据帧相反,远程帧的RTR位是“隐性”的。它没有数据场,数据长度代码DLC的数值是不受制约的(可以标注为容许范围0~8里的任何数值),此数值是相应于数据帧的数据长度代码。远程帧结构如图所示:三、错误帧错误帧由两个不同的场组成,第一个场是不同节点提供的错误标志(Error Flag)的叠加,第二个场是错误界定符。为了能正确地终止错误帧,“错误认可”的节点要求总线至少有长度为3个位时间的总线空闲。因此,总线的载荷不应为100%。错误帧结构如图:(图中统一起见出错帧改为错误帧)(1) 错误标志,有两种形式的错误标志:激活错误标志 和 认可错误标志“激活错误”标志由6个连续的“显性”位组成;“认可错误”标志由6个连续的“隐性”的位组成,除非被其他节点的“显性”位重写。(2) 错误界定符,错误界定符包括8个“隐性”的位。错误标志传送了以后,每一个节点就发送一个“隐性”的位,并一直监视总线直到检测出一个“隐性”的位为止,然后就开始发送其余7个“隐性”位。四、过载帧过载帧(Overload Frame)包括两个位场:过载标志 和 过载界定符,其结构如图:▲过载帧结构图有三种过载的情况会引发过载标志的传送:接收器的内部情况,需要延迟下一个数据帧和远程帧。在间歇(Intermission)的第1和第2字节检测到一个“显性”位。这里有个间歇的概念。我们可以讲讲。间歇属于帧间空间的一部分。它包含三个隐性位。间歇期间,所有的站不允许传送数据帧或远程帧。它唯一要做的就是标示一个过载条件。如果CAN节点在错误界定符或过载界定符的第8位(最后一位)采样到一个显性位,节点会发送一个过载帧。该帧不是错误帧,错误计数器不会增加。(1)过载标志(Overload Flag)过载标志由6个“显性”的位组成。过载标志的所有形式和“激活错误”标志的一样。(2)过载界定符(Overload Delimiter)过载界定符包括8个“隐性”的位。五、帧间空间数据帧(或远程帧)与先行帧的隔离是通过帧间空间实现的,无论此先行帧类型如何(数据帧、远程帧、错误帧、过载帧)。帧间空间包括间歇、总线空闲的位场。如果“错误认可”的节点已作为前一报文的发送器,则其帧间空间除了间歇、总线空闲外,还包括称作“挂起传送”(暂停发送)(Suspend Transmission)的位场。对于不是“错误认可”的节点,或作为前一报文的接收器的节点,其帧间空间如图:▲非 “错误认可”帧间空间对于作为前一报文发送器的“错误认可”的节点,其帧间空间如图:(1)总线空闲(Bus Idle)总线空闲的时间是任意的。只要总线被认定为空闲,任何等待发送报文的节点就会访问总线。在发送其他报文期间,有报文被挂起,对于这样的报文,其传送起始于间歇之后的第一个位。总线上检测到的“显性”的位可被解释为帧的起始。(2)挂起传送(Suspend Transmission)“错误认可”的节点发送报文后,节点就在下一报文开始传送之前或总线空闲之前发出8个“隐性”的位跟随在间歇的后面。如果与此同时另一节点开始发送报文(由另一节点引起),则此节点就作为这个报文的接收器。最后用脑图总结:再来几张实物图: 赞 (0) 相关推荐 CAN总线的显性电平为什么能覆盖隐性电平? 大家都知道,CAN总线的差分电平分为显性电平和隐性电平,显性电平的逻辑为0,隐性电平的逻辑为1,在同一个位时间,一个节点发显性电平,另一个节点发隐性电平,则总线电平为显性电平,这是CAN总线仲裁的基础 ... 一文搞懂CAN FD总线 上一篇对CAN总线(一文搞懂CAN总线)进行了整理,今天我们来看看它的升级版-CAN FD. 有了CAN,为什么还要CAN FD呢? 随着汽车功能越来越多,CAN总线的局限性也逐渐暴露: 1.CAN总 ... can总线的ID是指标识符 can总线的ID是指标识符.也就是一个can节点的地址或者说名字.站.网络中识别某一节点的信息.can总线的节点id,分成标准帧和扩展帧两种.标准帧的ID是11位,扩展帧的ID是29位. can总线i ... CAN总线学习笔记(2)- CAN协议数据帧、遥控帧、错误帧 本专辑是依照瑞萨公司<CAN入门书>的组织思路来学习CAN通信的相关知识,并结合网上相关资料以及学习过程中的领悟整理成的笔记.希望对初学者有所帮助. 01 CAN 协议中的帧 在了解CAN ... 一文读懂CAN 一文读懂CAN 【视频】 超详细男西裤的裁剪教程,适合新手学习! 来源 | 本文授权转载自微信公众号 ▪ 千里帆(ID:qlf20190618) 男西裤前片裁剪教程 男西裤前片裁剪教程 锐捷核心三层交换机配置入门教程,适合新手小白 笔者上一篇文章写了关于锐捷网关路由配置教程,但是这只是出口的配置,还不能搭建一个完整的企业网络.那么这一篇就来讲一下锐捷的三层交换机配置,如果将上一篇文章中的锐捷网关路由配置结合这篇的交换机配置,就可 ... 特殊形状的包包总是很引人注目,六边形手提包教程,适合新手学习 新手学习钩包,可以从一些简单的款式入手,在以前的教程里曾说过,用简单的针法一样能钩出好看又大方的包包,一是从色彩搭配入手,用时尚或高级感的配色,能大大提高一款包的颜值:二是从包的形状入手,一些比较特殊 ... 超适合新手练习的钢笔淡彩素材!赶紧收好 插画师 Mateu 对于很多喜欢水彩 但又不知道如何控水的朋友们 钢笔淡彩会比较容易入门哦~ 关键是把线稿会好一点就事倍功半啦 绘画步骤教程 以及绘画线稿 喜欢的小伙伴可以抓紧练习起来了 简单的衣服也能织得很好看,简式三色背心编织教程,适合新手学习 如果新手朋友想学习编织衣服,哪一类型的衣服编织起来最简单,原理最容易弄懂呢?那首推肯定是背心.因为背心就单单由前后片拼接而成,不需要我们去挑袖口织袖子,对于新手来说,先把背心的型织好,学习把各种花样通 ... 超适合新手的一款钩针花型,交叉长卷针,钩出立体几何效果! 今天我们一起来学习一款非常简单的钩针花型(咱们就爱简单好钩的花型),一起来学习一下吧~ 我示范的花型是8针一组,也可以是6针一组或10针一组等等,只要是双数针能两两平分就行.我还加了两针边针,所以我以 ... 简单好织的宝宝毛线裤教程,适合新手,熟手不要笑哦 现在用手编制毛线裤的人已经不多了.80后,90后的宝妈们会编织的人少之又少.现在我们就来学习手工编织毛线裤的方法和步骤. 首先,准备好编织毛裤的毛线和毛线针.起针90针. 织2厘米长就开始挖穿皮筋的洞 ... 手把手教你画线描画,超详细步骤图讲解,适合新手学习的教程 新手小白也可以画的很好看~一张白纸,一支铅笔.一支0.5黑色中性笔,跟着小云一起来画吧~ 过程图解析: 001.铅笔先画出大概的草图,主要是花加上一直犹抱琵琶半遮面的小牛,画之前一定要多找找素材哦~ ... 抹茶酱教程,无需烤箱超适合烘焙新手~ 身边有超多妹子一看到抹茶就尖叫.既然喜欢抹茶的小仙女这么多,这个抹茶酱的配方还不赶紧get!无需烤箱,连电饭煲都不用,超适合烘焙新手~ 为什么是抹茶酱?因为你可以用她来diy很多甜品.最简单的,你可以 ...