|
vsaznvdwyqj6406112336.gif
6 i+ w H/ q. s7 D* v& l
点击上方蓝色字体,关注我们; a2 P' A: ]2 k% y
2 |: w( k, r' z- l
随着总线技术在汽车电子领域越来越广泛和深入的应用,特别是自动驾驶技术的迅速发展,汽车电子对总线宽度和数据传输速率的要求也越来也高,传统CAN(1MBit/s,8Bytes?Payload)已难以满足日益增加的需求。
% V# K* s$ u) ?( i( _3 h. U# S O/ E2 ~$ X) y0 x
因此在2012年,Bosch发布了新的CAN FD标准 (CAN with Flexible Data Rate) ,CAN FD继承了CAN的绝大多数特性,如同样的物理层,双线串行通信协议,基于非破坏性仲裁技术,分布式实时控制,可靠的错误处理和检测机制等,同时CAN FD弥补了CAN在总线带宽和数据长度方面的不足。
: |' N+ T$ t; ^5 E" z
) c# Z! A1 q9 p. {' n+ ~2015年6月30日,国际标准化组织(ISO)已经正式认可CAN?FD,并无反对票通过ISO 11898-1作为国际标准草案。) Z( ?, Q6 E! g5 V1 }
18 F- ^$ z* ^ x5 M& H
什么是CAN FD?
8 d$ Z8 q; M. _8 Q& p6 r9 YCAN FD协议是由Bosch以及行业专家预研开发的,并于2012年发布。通过标准化对其进行了改进,现已纳入ISO 11898-1:2015。一开始的Bosch CAN FD版本(非ISO CAN FD)与ISO CAN FD是不兼容。( K' I6 V3 _3 `' r
; \: ~$ q( y! n9 x" w
CAN FD具有以下4个主要优点:
7 J3 I# a: L8 U2 K. h; z/ c$ q: I9 d7 F9 O, ^- m. J
# S# x! d+ r, E6 ?# g
1、增加了数据的长度
" z% X4 q" I0 @& x% hCAN FD每个数据帧最多支持64个数据字节,而传统CAN最多支持8个数据字节。这减少了协议开销,并提高了协议效率。* t" X( q9 O6 j8 X/ h3 ?: i3 p
; c9 Y0 k& o" O1 M. ?9 s
' W8 b# z( `1 e) Z
2、增加传输的速度
5 t% |$ Q5 n7 S- y1 \CAN FD支持双比特率:与传统CAN一样,标称(仲裁)比特率限制为1 Mbit/s,而数据比特率则取决于网络拓扑/收发器。实际上,可以实现高达5 Mbit/s的数据比特率。
8 {7 D2 E% E& O3 O2 {8 V
2 s4 l% A# S; _5 {0 e+ z) ?& u) ?1 t9 w2 b
3、更好的可靠性8 Q, N, B, d5 j& I. r
CAN FD使用改进的循环冗余校验(CRC)和“受保护的填充位计数器”,从而降低了未被检测到的错误的风险。这在汽车和工业自动化等安全攸关的应用中至关重要。
4 m& D/ t: S! n% X' I9 ] G- x) o/ p% O+ h
( h. ^( D: L% S; P7 u Q
4、平滑过渡( }# c- M# s3 Z0 ]0 G
在一些特定的情况下CAN FD能用在仅使用传统CAN的ECU上,这样就可以逐步引入CAN FD节点,从而为OEM简化程序和降低成本。3 k" {) c7 y8 I8 _6 ]8 w8 k+ G
实际上,与传统CAN相比,CAN FD可以将网络带宽提高3到8倍,从而为数据的增长提供了一种简单的解决方案。/ k0 r, e9 m h; }( s7 ?) X
2
2 P9 Y4 F& l2 e! S% nCAN FD帧结构2 m5 K2 }0 h( ^* M$ k( M/ H- B
CAN FD节点可以正常收、发CAN报文,但CAN节点不能正确收、发CAN FD报文,因为其帧格式不一致。
" S1 B2 H) f6 S
, q' | f9 Y% ^! s3 M3 h! J
vgfl05pp5ki6406112436.png
' e! } s0 g, T) R3 X6 V1 [/ I" F( \# [9 U: I
与CAN一样,CAN FD一共具有:帧起始,仲裁段,控制段,数据段,CRC段,ACK段和帧结束,7部分组成。
s$ d! \; }9 D6 U* C: ~
9 l0 j9 t6 \+ u; k+ z! a2.1、帧起始4 J- P/ n) M4 F# e1 l) O6 _
CAN与CANFD使用相同的SOF标志位来标志报文的起始。帧起始由1个显性位构成,标志着报文的开始,并在总线上起着同步作用。: w. v2 ]/ L( U1 M) E6 e( k( v
1 C8 k/ G% x0 V2 |- N
iazxxsnvlhm6406112536.png
$ k" e$ G. z: `/ o+ W+ q3 J8 @0 Q! y- [+ a2 I* R# j7 c' v
2.2、仲裁段
) a* `7 n! f( _& q与CAN不同,CAN FD取消了对远程帧的支持,用RRS位替换了RTR位,为常显性。IDE用于区分标准帧和扩展帧。1 _/ W( l4 Z3 I* E3 m
+ ~ _2 F0 A" M& P$ M. h, C; C1 V
nsubajxnvjg6406112636.png
/ j9 K- V' r) U5 u7 R) [
9 s* [0 @2 F t* x% q) t' A7 n
标准帧仲裁段由11位ID和r1位(显性)、IDE(显性)组成,总共13位。
|! ]* @% J$ z: j, ~7 H扩展帧仲裁段由29位ID和SRR(隐性)、IDE(隐性)、r1位(显性)组成,总共32位。
7 n& H# P6 ^4 N2 g- D# sSRR:替代CAN标准帧中的RTR位;IDE:扩展帧标志位;r1:保留位,为显性。+ U' W4 @2 j7 L9 Z X0 r. p! U" Z
5 W4 n6 {: w& F& A2.3、控制段$ O" @6 R( R" R2 w! T- u6 g
CAN FD与CAN有着相同的IDE、res和DLC位,同时增加了FDF、BRS、ESI三个bit位。
* c D% O. W& j' ?FDF 位(Flexible Data Rate Format):原 CAN 数据帧中的保留位 r。表示 CAN 报文还是 CAN-FD 报文,FDF 位常为隐性(1),表示 CAN FD 报文;BRS 位( Bit Rate Switch):表示位速率转换,当 BRS 为显性位(0)时数据段的位速率与仲裁段的位速率一致(恒定速率),当 BRS 为隐性位(1)时速率可变(即 BSR 到 CRC 使用转换速率传输);ESI 位(Error State Indicator):发送节点错误状态指示,主动错误时发送显性位(0),被动错误时发送隐性位(1)。
) a; \7 l5 }0 O" L- B
0 p+ R c/ l0 c) K2 u& d
- Z- P1 c+ Y1 Q) _5 q
sluxpmvpnow6406112736.jpg
4 ~0 g A6 `8 r: @. d8 G& Z4 _; l; ?3 e9 [3 |
2.4、数据段
6 D/ i+ E5 U% M: n$ @) V2 S, YCAN FD兼容CAN的数据格式,同时最大还能支持:12、16、 20、 24、 32、 48和64byte。9 S* r) u2 n8 R1 i2 M! Z
9 X& ^9 L$ p* V. O! h# K9 D+ d4 X像在传统CAN中一样,CAN FD DLC是4位,表示帧中数据字节的数量。为了维持4位DLC,CAN FD使用从9到15的其余7个值来表示所使用的数据字节数(12、16、20、24、32、48、64)。
8 r3 l. c+ z& K- ^
9 D0 J7 L. T4 F0 G4 ~2 s$ o
14ncgkusuei6406112836.png
1 [! j5 @# s7 g* K* A. E. \) z
编辑
, J8 W# t P' s" D" H N. Y
tbqwn41wsjd6406112937.png
: v* S" [. u" T* R1 H$ n) n! }
/ D9 T( O3 X c5 T) m* P0 r4 k; s' k7 k2.5、CRC段. ?: m2 D/ R8 }+ N, [
传统CAN中的循环冗余校验(CRC)为15位,而在CAN FD中由固定填充位FSB(6/7位)、填充位计数(4位)、CRC(17/21位)和CRC界定符(1位)组成,总共28或33位组成。在传统CAN中,CRC中可以包含0到3个填充位,而在CAN FD中,总是有4个固定填充位以提高通信可靠性。
- Q, ]% e. P5 Z6 a/ @( L0 m% r& `% z& `5 I/ o0 \/ q
cv2avdi20he6406113037.png
9 s8 T4 Y/ i; l: r* q n9 {& v3 p/ A E, Q- m5 _0 j* w
固定填充位(FSB):CRC段中每4个位固定填充一个与上位相反的位。
) e1 P# ^4 R8 c采用CRC17时,FSB为6个位;采用CRC21时,FSB为7个位。$ M* q- V( s7 L; B& E4 t
# g7 q$ j8 b+ S9 D; M: p2 Z* [& ~
填充位计数:由填充位计数(3位)和奇偶校验位(1位)组成。
& _! g" `6 U: a& G% n: J# s: f3 s
0 i; \6 o, a; uCRC:/ f& Y* y5 M% \! q$ b% i
报文长度小于16时,采用CRC17,17位组成;报文长度大于16时,采用CRC21,21位组成。
8 h! p N Y1 X- W2 h. R$ B
+ G w4 @" j oCRC界定符:固定为隐性位;从该位采样后,切换为仲裁域波特率。
0 I& R& N4 T# Q; p4 ^
9 j/ H: |2 n l" `: y
jvdxbtdd3ci6406113137.png
7 H- G' z, u2 K5 _, g
9 n k' e0 A, P6 M( m+ I8 d5 j2.6、ACK段; v& l2 G0 o6 y+ k2 _
ACK紧跟着CRC结束标识位。不同的是,CAN FD支持2bits的ACK的识别,由ACK位和ACK界定符位组成。
; i6 r5 B( k0 b0 V% E3 \ACK:接收节点应答位,接收节点应应答显性位;ACK界定符,固定为隐性。
7 f) `/ B4 F2 S" ^+ { A" u! ?
% E1 N: x2 m; J% X4 S
8 ]0 i+ @% K' w
2ekjrri0udu6406113237.png
1 d0 j, V, \5 j- b- D, @3 b9 ]; R7 f* c. b: H B+ i
2.7、帧结束( H1 ?7 y% a( S
与CAN一样,CAN FD的帧结尾也为连续7位的隐性位。
7 `5 j7 w) y* `' y5 t3 ~3 U+ X) j# ?5 K
一帧CAN FD报文位数
) o# `/ z0 ?* H8 t* S$ W+ ^根据CAN FD帧结构组成,可以算出一帧CAN FD报文位数:
+ _) ^: A, M6 q' F+ r) u: l" @7 ]' F/ _% R6 b f
CAN FD报文位数 = 帧起始(1位)+ 仲裁段(13/32位)+ 控制段(8位)+ 数据段(0~512位)+ CRC段(28/33位)+ ACK段(2位)+ 帧结束(7位)
% Z: G* o; p4 e' ]. E: |
4 ?/ p& s# s$ S+ \5 V- b% v! a4 w4 X' d% P
影响报文位数主要为仲裁段(帧ID长度)和数据段(CRC段受数据段长度影响)。通过帧类型、帧长度组合出不同情况报文位数:8 h8 s+ @+ f5 s: Y
标准帧,数据0字节
- X* h% ]1 P2 W& b1 E帧起始(1位)+ 仲裁段(13位)+ 控制段(8位)+ 数据段(0位)+ CRC段(28位)+ ACK段(2位)+ 帧结束(7位)= 59位
: x3 j. e! f/ o2 t7 _标准帧,数据64字节. X7 m3 B# Q/ R
帧起始(1位)+ 仲裁段(13位)+ 控制段(8位)+ 数据段(512位)+ CRC段(33位)+ ACK段(2位)+ 帧结束(7位)= 576位$ R. h( e( M+ C
扩展帧,数据0字节
4 m7 s" Z; A! n# A: R3 d帧起始(1位)+ 仲裁段(32位)+ 控制段(8位)+ 数据段(0位)+ CRC段(28位)+ ACK段(2位)+ 帧结束(7位)= 78位
3 E6 G" u0 z8 z8 q% X7 s9 o扩展帧,数据64字节
* G- W+ F. R4 `8 ?8 I帧起始(1位)+ 仲裁段(13位)+ 控制段(8位)+ 数据段(512位)+ CRC段(33位)+ ACK段(2位)+ 帧结束(7位)= 590位# }, g, w5 H# Q1 A4 O8 ]
4$ Z% r) k* A4 }- k0 f! O, Q
精品专栏仲裁域和数据域位数
; M2 Y1 P r K8 M$ u9 B. M由于CANFD采用了双波特率形式:标准波特率(也称仲裁域波特率)和数据域波特率,所以帧结构中不同段采用的波特率也不同。& F5 Q& c) |3 O5 t" c5 A, P: a
仲裁域波特率所占位数帧起始(1位)+ 仲裁段(13位)+ 控制段的EDL、r0、BRS(3位)+ ACK段(2位)+ 帧结束(7位)数据域波特率所占位数控制段的ESI、DLC(5位)+ 数据段(0~512位)+ CRC段(28/33位)2 R2 \9 ^6 z0 m/ Z$ @ N I3 b0 p, L+ V
+ R& e" ?; e- X7 r, |主要说明的是,BRS位和CRC界定符位均同时使用了两个波特率:
( A1 x! Q1 `* zBRS位:由**仲裁域波特率 * 仲裁域采样点 + 数据域波特率 * (1 - 仲裁域采样点)**组成;CRC界定符:由**数据域波特率 * 数据域采样点 + 仲裁域波特率 * (1 - 数据域采样点)**组成。
7 |8 U9 E. \3 D q4 u s/ ?% W* l n
: }4 P. I! K. v" z此处将BRS认定采用仲裁域波特率、CRC界定符采用数据域波特率以方便计算。
- X- l, z+ `8 @5( o, O- c B$ f0 j- {0 w
位填充7 j: u4 e# Y; U2 W/ |7 F
当然,上述报文位数中,还未包含填充位个数。在CAN/CAN FD协议中规定:每5个相同的位就必须填充一个相反位,该位即为填充位。3 O9 d0 s1 H% h
- N, w3 X. h* t, G. x我们知道字节0x55或0xAA,其二进制分别为0101 0101或1010 1010,也就是每个位与上一位均相反,若此时ID和数据均为0x55或0xAA,则可以使填充位个数最少。% G2 X+ v! h3 |) J
( m+ d, `& S/ Y& S2 F% d
同理,字节0xFF或0x00,其二进制位1111 1111或0000 0000,也就是所有位均一致,若此时ID和数据均为0x00或0xFF,此时报文的填充位个数最多。
) P6 y8 f M6 \8 Y% T1 o66 z( G0 D: k' [& f7 y, d
不同类型报文位数/ G4 h; ?6 o2 e8 X8 @
基于以上报文位数的计算,我们可以得出算出不同类型报文所占位数,如下表所示:
: O* N. z" r2 |9 U& M; u: h5 S
fmdj1bho0kl6406113337.png
2 @ t2 K$ R0 X* V; i3 {
0 \% E7 B2 T0 ^% g" N+ P1 X
从上表可知:& M$ X6 m0 j8 f& ?
当报文为CAN FD标准帧ID为0x555,数据长度为0时,报文位数最少,为59位;当报文为CAN FD扩展帧ID为0x0,数据长度为64字节,数据全为0xFF时,报文位数最多,为703位。
& C* E8 t' i, g. |2 r$ Q% _
4 U& j: N4 @; R) a" ?7& \7 d% `' v6 ^( R& z+ s$ P
CAN FD报文时间计算
& E' P0 `9 r. R( B0 c- a最后,可以根据波特率算出不同类型报文时间了,计算公式如下:3 u# K) w. T: Q
( m: S* |4 N- ]6 t$ l5 x. c1 M
报文时间 = 仲裁域位时间 * 仲裁域位数 + 数据域位时间 * 数据域位数9 b. o: z- R b2 h, |7 A3 L
7 B" D9 q0 h" t: V& Q* f) n4 h; v
3 k) o3 S6 V" @/ D6 \8 k( R) q: L* F
以位数最少的CANFD报文为例,在仲裁域波特率为1Mbps(位时间1us),数据域波特率为5Mbps(位时间200ns)时,其报文时间 = 1us * 26 + 33 * 200ns = 32.6us。& w- z/ c4 _6 N) y
1 v, n0 U: S/ ~: \2 [8 f! j6 p那么一秒钟最多可以发送报文呢?由于报文发送成功后,需经过帧间隔(3个位)后才能发送下一帧报文,也就说仲裁段要在原来基础上加3个位,就可以算出每秒发送多少帧了。那么上述位数最少报文的发送时间耗时 = 1us * (26 + 3) + 33 * 200ns = 35.6us,也就是1秒钟最多可以发送1000000us / 35.6us = 28089帧报文。也就是说,1M/5M波特率下,发送CAN FD标准加速帧,最多可以发送28089帧。3 k9 ~# |; S8 o( k8 y
9 R2 C; |" [, n" q m
2 L5 Z( m0 s' {. c. \; ^) ~' k下面我们给出一些常用波特率下,不同类型报文每秒最多可以发送的CANFD报文帧数(下表中报文BRS位为1,ESI位为0),供大家参考。 f8 |2 \1 b2 T/ I0 f& {; H
' y: g5 ~' I0 n2 ], V
rgut5qzr1mj6406113437.png
8 u4 J; G: R" v5 M
7 W+ U* P$ w0 P, @/ n
, |6 B# x, {: `9 X3 p; X
lb3qithzupk6406113538.png
* [+ W8 n: v$ [6 n( F4 Z1 @& O" u4 N+ ^
6 i# A# t6 `2 W$ K* e* k8 @* o T7 ^
xroissy3sdc6406113638.png
. @5 ^& d4 a% i* \7 d, T- x
1 e" X) [$ G, K% E0 Z
+ ?5 x" e8 A# y# `; c2 h. R! v
23sshokgw2e6406113738.png
2 K, [' i$ W! m6 o
往期推荐详解AUTOSAR:AUTOSAR CAN网络管理/CAN NM2 B1 Q+ g9 T) f5 l D( ^: ^
CAN总线网络中为什么需要安装终端电阻?
; q* p k- H" [一文搞懂CAN和CAN FD总线协议: o: B2 T. ?% y. Z) A
CAN与CAN FD通信之间存在的问题/ F5 k; y) q2 L$ M0 w1 H
详解CAN总线:CAN总线通信优先级机制! {4 H9 ]/ Y$ T. w3 `1 k
详解CAN总线:CAN总线故障界定与管理, `! ~ ]9 T. U
5 }6 J) Z% @" X9 Z2 F; \
k5v3l5mn1ir6406113838.jpg
8 I( ^/ v4 {" ^- ^
ac4xnuwzc5k6406113938.gif
& J5 D& B, g; H# f' b
点击阅读原文,更精彩~ |
|