ISO 11898里的CAN总线:帧编码

电子说

1.2w人已加入

描述

帧编码

帧中的位采用 NRZ (Non-return-to-zero 非归零)方法编码。相同带宽,NRZ编码信息量更大。

CAN用双绞线的方式传输,两条线压差2V(CAN_H是3.5V左右,CAN_L是1.5V左右)为显性,表示逻辑0;两条线压差0V(都是2.5V左右)为隐性,表示逻辑1。

我很长一段时间把显性和隐性搞混,直到记住“显灵”这个词,显性是0.

为了减少CAN信号错误,专家设计了位填充技术。CAN消息帧中,帧起始、仲裁场、控制场、数据场和CRC序列均用位填充的方法编码。

发送器

发送器

当CAN发送器检测到5个相同的位后,插入一个相反位,产生跳变沿,用来同步,以减少检测错误。

填充位会被当成总线数据位处理,但接收器接收时会自动剔除填充位,这样要传输的信息不会出现错误。

位的传输顺序

数据帧和远程帧里,从SOF开始,一个域接一个域地传输。在一个域内,字节传输顺序是从MSB到LSB。在一个字节内,位传输顺序是从bit 7到bit 0.

发送器

位时间

位时间是一个位的持续时间。我们是看表来确定时间,CAN总线的节点是通过时钟发生器确定,而常用的时钟发生器是石英晶振。石英晶振的频率通常是波特率的整数倍。

上一篇提到波特率的时候,其单位是bit/s,则一位的时间=1/波特率。比如常用的500kbit/s,位时间是2us(通常要求误差在±0.004us内)。

一个位时间可以分成很多段的时间量(Time quantum,简写为TQ)。前面说到CAN的时间是通过石英晶振的频率确定,那晶振也是有很多一小段一小段的时间周期。可以理解为,若干个石英晶振的时间段组成了一个TQ,若干个TQ组成了一个位的时间。就像六十秒组成一分钟,六十分钟组成一小时。

和一分钟固定等于六十秒不同,一个位可以分为1~32个TQ,具体是多少个可以由使用者规定。

一小时我们有时候分为前一刻钟、前半个小时和后半个小时,一个位也可以分为很几段。这个几是固定的,是4,如下图。

发送器

一个位时间可以分为:

同步段(Sync_Seg):1个TQ。同步段内有一个跳变沿,用来使总线上各个ECU同步,就跟港片里飞虎队行动前都要对表一样。

传播段(Prop_Seg):用于补偿各总线上各ECU之间的物理传输延迟时间(信号在总线上的传播延迟和ECU内部延迟)。传播段的长度不同的ECU不完全一致,一般在1~8个TQ。

相位缓冲段1(Phase_Seg 1)、相位缓冲段2(Phase_Seg 2):用于补偿跳变沿的相位误差,就是ECU间的晶振误差。这两段可以被再同步处理延长或缩短。通过再同步,可以延长相位缓冲段1,或缩短相位缓冲段2。

一个位的采样点在相位缓冲段1的终点,通常是位时间的75%左右。

标准原文还详细说明了延时后,如何处理才能使仲裁顺利,感兴趣可以自己看看。

bus off

一个ECU根据错误计数不同,可以处于以下三种状态之一:错误激活(error-active)、错误认可(error-passive)或离线(bus-off)。

发送器

(当ECU进入bus off后,有快恢复和慢恢复两种策略。两种策略都会被ECU执行,先快后慢,具体策略由厂家决定。)

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分