|

xk5zwy3weyh64015950903.gif
& y+ h3 _. z( I9 K. G
点击上方蓝色字体,关注我们
" l8 I# ^3 o$ q- n. O1 R1 M
) {/ a& K3 e7 l3 N随着总线技术在汽车电子领域越来越广泛和深入的应用,特别是自动驾驶技术的迅速发展,汽车电子对总线宽度和数据传输速率的要求也越来也高,传统CAN(1MBit/s,8Bytes?Payload)已难以满足日益增加的需求。
4 }- T3 F/ o1 o
3 m0 ?& c, t+ w! F因此在2012年,Bosch发布了新的CAN FD标准 (CAN with Flexible Data Rate) ,CAN FD继承了CAN的绝大多数特性,如同样的物理层,双线串行通信协议,基于非破坏性仲裁技术,分布式实时控制,可靠的错误处理和检测机制等,同时CAN FD弥补了CAN在总线带宽和数据长度方面的不足。
0 s* w1 I5 q0 d, O
1 P% H* k5 G ~4 B2015年6月30日,国际标准化组织(ISO)已经正式认可CAN?FD,并无反对票通过ISO 11898-1作为国际标准草案。 U& m1 D6 u5 {/ k! D
1
! t7 i$ f4 z; B, V% c; H9 H, n5 W什么是CAN FD?
. R" j E0 A4 ?1 c/ a" yCAN FD协议是由Bosch以及行业专家预研开发的,并于2012年发布。通过标准化对其进行了改进,现已纳入ISO 11898-1:2015。一开始的Bosch CAN FD版本(非ISO CAN FD)与ISO CAN FD是不兼容。
1 F% m( u" ^% q3 q& H
4 w& P% Q. @: ^0 O, mCAN FD具有以下4个主要优点:# L& Q: l# F4 S* i/ Y
5 @* C9 `( _( w3 q7 K6 L) @1 w& k& o9 P4 m2 z; d
1、增加了数据的长度1 w1 |& D7 N+ w9 q1 \' x, I/ B- z J7 d
CAN FD每个数据帧最多支持64个数据字节,而传统CAN最多支持8个数据字节。这减少了协议开销,并提高了协议效率。2 W6 X) O' _7 {9 s' w1 D
l5 ^4 D( `3 I" x" k w O' r) s
8 j# B1 l, W% V, _7 q" K3 D2、增加传输的速度
" [5 j+ e5 H- }- M- ^5 M6 H/ \CAN FD支持双比特率:与传统CAN一样,标称(仲裁)比特率限制为1 Mbit/s,而数据比特率则取决于网络拓扑/收发器。实际上,可以实现高达5 Mbit/s的数据比特率。
6 w, W& |' `' i6 O. N( p7 \* H. h
2 ]: D2 D3 J4 L: ?7 s8 M! r$ K2 O* r3 D% e
3、更好的可靠性
$ i$ x% v, U- t; r+ UCAN FD使用改进的循环冗余校验(CRC)和“受保护的填充位计数器”,从而降低了未被检测到的错误的风险。这在汽车和工业自动化等安全攸关的应用中至关重要。
% y7 I% _9 e# \& X1 U( u |. p) B5 B$ J+ `
" I1 M4 q" U5 Y' y0 R" K
4、平滑过渡! d( ~/ }' A- l/ I, G" {, `! a
在一些特定的情况下CAN FD能用在仅使用传统CAN的ECU上,这样就可以逐步引入CAN FD节点,从而为OEM简化程序和降低成本。
+ K0 H6 x' A% d, |/ m/ G! A实际上,与传统CAN相比,CAN FD可以将网络带宽提高3到8倍,从而为数据的增长提供了一种简单的解决方案。: G8 n0 D8 M7 H' s( x6 l+ \1 r
2& L6 d$ e" T. U7 Q
CAN FD帧结构
: R; K( A8 x* c, x, n0 K+ ACAN FD节点可以正常收、发CAN报文,但CAN节点不能正确收、发CAN FD报文,因为其帧格式不一致。' ]. V& O; i/ X5 y
1 x0 f" y. l2 H) }/ D
qmxwy0vo2x564015951003.png
8 g0 w# w# n4 j7 S, g* E3 k
2 J5 O+ y9 C3 {+ {与CAN一样,CAN FD一共具有:帧起始,仲裁段,控制段,数据段,CRC段,ACK段和帧结束,7部分组成。* e& L. d1 j" h8 O8 d+ _
# R. [7 z# \4 ~4 B- I6 O2.1、帧起始
+ P5 W: a: d8 F+ C9 FCAN与CANFD使用相同的SOF标志位来标志报文的起始。帧起始由1个显性位构成,标志着报文的开始,并在总线上起着同步作用。
+ x0 S3 ]' Z+ B% b3 U) ?. E4 q# n" ]9 {* b
m3bkhlkljkv64015951103.png
4 v3 \ g) L' C$ I* o B
, c' Z2 t- K# ~/ a2.2、仲裁段
4 i2 G- n( T1 h) F- F. m6 Z) j6 Z* X与CAN不同,CAN FD取消了对远程帧的支持,用RRS位替换了RTR位,为常显性。IDE用于区分标准帧和扩展帧。
9 n& N& N: h! {% ?# j' W- j/ \, Z0 u: H8 h+ |' U
ixfdn0pzjvp64015951204.png
. j I0 _ Z, p) T. Q+ s4 B3 ~) }
: t U5 i! j0 H- ]2 u4 ?) w4 x" `
标准帧仲裁段由11位ID和r1位(显性)、IDE(显性)组成,总共13位。 S) k3 e( `* R3 M5 Y7 O
扩展帧仲裁段由29位ID和SRR(隐性)、IDE(隐性)、r1位(显性)组成,总共32位。
( F8 |. X+ H/ a) B/ hSRR:替代CAN标准帧中的RTR位;IDE:扩展帧标志位;r1:保留位,为显性。
" d- Y+ X# q" V. W
) \7 ?" V6 z' ?* E& i7 n5 \$ f2.3、控制段
/ A) A. y! M0 \! v2 j6 Z4 I( y0 qCAN FD与CAN有着相同的IDE、res和DLC位,同时增加了FDF、BRS、ESI三个bit位。
4 K& I% G; C7 m6 j' fFDF 位(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)。
- k0 ^- ^9 r) R- l2 x2 Y9 w
- z, m* o+ o/ D3 s$ Z6 Q; n( ^4 r" G, C& p6 f
xp0svatf12264015951304.jpg
& r' h4 n9 ~) P3 Y! T
: V5 U- I, o* t5 v0 U2.4、数据段 ( Y" V6 |: q6 Y% v
CAN FD兼容CAN的数据格式,同时最大还能支持:12、16、 20、 24、 32、 48和64byte。
H% t* ^& F: s" K9 C# O& q% L% U, u5 }0 A
像在传统CAN中一样,CAN FD DLC是4位,表示帧中数据字节的数量。为了维持4位DLC,CAN FD使用从9到15的其余7个值来表示所使用的数据字节数(12、16、20、24、32、48、64)。
+ e, z6 h) S! @5 Z# j
+ x! f! m' B9 v. q) E! g, Q
se5z1b2slfd64015951404.png
/ |0 P% ^1 ]) i" l- ?编辑- F/ _% e, W# M: H" K$ p
xoavynovmn564015951504.png
9 U3 P5 A$ w# A
6 B" N; f; Q. d# u P5 M1 q6 p
2.5、CRC段
( T* S% s) _, z+ n$ ~# k" l传统CAN中的循环冗余校验(CRC)为15位,而在CAN FD中由固定填充位FSB(6/7位)、填充位计数(4位)、CRC(17/21位)和CRC界定符(1位)组成,总共28或33位组成。在传统CAN中,CRC中可以包含0到3个填充位,而在CAN FD中,总是有4个固定填充位以提高通信可靠性。
& a; S9 r% e" Z2 r. S' d, N# ~8 Q+ p7 d. ^1 C. D' V+ [
ueb3o3ddkac64015951604.png
4 m; v/ {+ E4 B7 {, }! n% d7 z5 n+ R8 q
固定填充位(FSB):CRC段中每4个位固定填充一个与上位相反的位。
7 I9 {) V* _# w' E. A$ p' Z$ C; S' @采用CRC17时,FSB为6个位;采用CRC21时,FSB为7个位。" m) V" {/ R2 h) y
! [2 ]& g+ D k; y5 \3 p1 R+ q) d填充位计数:由填充位计数(3位)和奇偶校验位(1位)组成。
* O7 V& L) @1 t
' L0 V4 |9 b: u) f ]9 gCRC:# ^8 d3 I' D$ j3 J Z }( S+ v
报文长度小于16时,采用CRC17,17位组成;报文长度大于16时,采用CRC21,21位组成。
( a) [; V# p9 F
3 Z. n3 q# n# G6 \: ~0 e! cCRC界定符:固定为隐性位;从该位采样后,切换为仲裁域波特率。$ ^" s, u) f+ ?$ E5 T6 I
$ V9 u8 n# g) ~$ {- U8 [
xjsun1kqran64015951704.png
* p6 b! t! T2 ]( ]9 V1 y' d! x! W% b$ G7 [, @, b
2.6、ACK段5 |, Y& A" t) a& L1 o
ACK紧跟着CRC结束标识位。不同的是,CAN FD支持2bits的ACK的识别,由ACK位和ACK界定符位组成。3 O; x5 Y9 j/ {2 ~. v
ACK:接收节点应答位,接收节点应应答显性位;ACK界定符,固定为隐性。" \5 l! a+ `( z! U$ `0 b& K! p0 R
' w$ H0 t) I$ G B% P% {
1 L" o" y7 {) [9 P' Q% x
d5mhfl1gwzn64015951805.png
- H8 L' S, g" q5 p
- L; m7 c. H0 f; r: h& o, S7 X2.7、帧结束9 Z! I4 t5 p: m7 |8 H3 [* s
与CAN一样,CAN FD的帧结尾也为连续7位的隐性位。: s3 S$ Z. p/ h- k) J
3 ~! W2 |. {' Q
一帧CAN FD报文位数# Q* c5 K5 E' |- y. z$ S
根据CAN FD帧结构组成,可以算出一帧CAN FD报文位数:
* T# n. S0 v, Y% c, u4 O; G4 v' m& |; K, k% A' N* S& O; J
CAN FD报文位数 = 帧起始(1位)+ 仲裁段(13/32位)+ 控制段(8位)+ 数据段(0~512位)+ CRC段(28/33位)+ ACK段(2位)+ 帧结束(7位)1 B- y z' |% T( k u% ]
1 u6 |% x% @! O8 J4 L! k) c
. A/ O$ T, T7 x; ~2 u: T( f影响报文位数主要为仲裁段(帧ID长度)和数据段(CRC段受数据段长度影响)。通过帧类型、帧长度组合出不同情况报文位数:* c* V8 @/ W! s0 @6 H5 i9 q
标准帧,数据0字节 _9 X6 Z# f) N; p1 C7 s
帧起始(1位)+ 仲裁段(13位)+ 控制段(8位)+ 数据段(0位)+ CRC段(28位)+ ACK段(2位)+ 帧结束(7位)= 59位
) x' e% Q* [; p6 T标准帧,数据64字节
; D S [5 e' o3 Z/ m% }帧起始(1位)+ 仲裁段(13位)+ 控制段(8位)+ 数据段(512位)+ CRC段(33位)+ ACK段(2位)+ 帧结束(7位)= 576位( `( p& R3 X# R+ R
扩展帧,数据0字节
* k5 O' L2 F$ j1 x3 D6 g帧起始(1位)+ 仲裁段(32位)+ 控制段(8位)+ 数据段(0位)+ CRC段(28位)+ ACK段(2位)+ 帧结束(7位)= 78位
8 [; F. a. ~" [/ X扩展帧,数据64字节
/ J$ }- k9 [# q0 V5 S/ w帧起始(1位)+ 仲裁段(13位)+ 控制段(8位)+ 数据段(512位)+ CRC段(33位)+ ACK段(2位)+ 帧结束(7位)= 590位9 e* O5 }- r1 H& R8 N
4) m- v) R5 I8 M/ r9 m( O" O
精品专栏仲裁域和数据域位数8 w$ Q) z4 e6 t1 p7 Y
由于CANFD采用了双波特率形式:标准波特率(也称仲裁域波特率)和数据域波特率,所以帧结构中不同段采用的波特率也不同。
) R7 O# j0 f! r; D3 Y仲裁域波特率所占位数帧起始(1位)+ 仲裁段(13位)+ 控制段的EDL、r0、BRS(3位)+ ACK段(2位)+ 帧结束(7位)数据域波特率所占位数控制段的ESI、DLC(5位)+ 数据段(0~512位)+ CRC段(28/33位)+ g4 F/ M/ Q% b$ s
O2 N0 F8 z1 P主要说明的是,BRS位和CRC界定符位均同时使用了两个波特率:
( p% Q4 d* \# _4 VBRS位:由**仲裁域波特率 * 仲裁域采样点 + 数据域波特率 * (1 - 仲裁域采样点)**组成;CRC界定符:由**数据域波特率 * 数据域采样点 + 仲裁域波特率 * (1 - 数据域采样点)**组成。! r2 o- G( @; y6 G2 [6 O( u% w6 q
) b4 d$ n6 C" g/ s9 }( H
此处将BRS认定采用仲裁域波特率、CRC界定符采用数据域波特率以方便计算。 R$ l5 ~6 |; B& q; H
59 j( M( J5 A" h. I) c
位填充& w: C7 u) S1 E! ^$ b. t
当然,上述报文位数中,还未包含填充位个数。在CAN/CAN FD协议中规定:每5个相同的位就必须填充一个相反位,该位即为填充位。
5 u# H8 c/ d/ ]: S) {
[6 m& z; ^/ Z( M0 T f我们知道字节0x55或0xAA,其二进制分别为0101 0101或1010 1010,也就是每个位与上一位均相反,若此时ID和数据均为0x55或0xAA,则可以使填充位个数最少。8 S, l& m1 S" e& L) y$ Q0 t! L; r
' s8 ~" U6 B8 ] y1 Y+ W
同理,字节0xFF或0x00,其二进制位1111 1111或0000 0000,也就是所有位均一致,若此时ID和数据均为0x00或0xFF,此时报文的填充位个数最多。6 J l; k) s9 q4 P$ o. G
6
o5 B# G# T2 S, c: n" G不同类型报文位数 q; r8 V0 c: b) a
基于以上报文位数的计算,我们可以得出算出不同类型报文所占位数,如下表所示:
9 y* e1 C1 _7 T3 I0 i6 X' Y3 V' m7 Q0 S4 S# R
sgea0hmjxnn64015951905.png
* P' w4 m8 R' m' Y0 A1 i, l
2 U1 a A* U8 C7 V* s& L从上表可知:5 r4 V/ X( C, f8 W0 t' p
当报文为CAN FD标准帧ID为0x555,数据长度为0时,报文位数最少,为59位;当报文为CAN FD扩展帧ID为0x0,数据长度为64字节,数据全为0xFF时,报文位数最多,为703位。
9 O4 q& |9 F, k* d
: ^4 n- l" D$ b7
l) U# `4 a% g, H3 K. iCAN FD报文时间计算
+ \- q! t ]6 M b% _/ O# v( @最后,可以根据波特率算出不同类型报文时间了,计算公式如下:+ F/ s6 y; W6 u: N
* o. f0 g" S2 ?报文时间 = 仲裁域位时间 * 仲裁域位数 + 数据域位时间 * 数据域位数
3 w8 g- M. }3 Q( t$ p% |, B8 A" S
1 d6 X& _# e( G
% h+ A* f, H6 R$ M3 V1 P以位数最少的CANFD报文为例,在仲裁域波特率为1Mbps(位时间1us),数据域波特率为5Mbps(位时间200ns)时,其报文时间 = 1us * 26 + 33 * 200ns = 32.6us。' _. ?9 d5 g, A
2 D* g' Z0 V. T, R% X4 L7 k' @那么一秒钟最多可以发送报文呢?由于报文发送成功后,需经过帧间隔(3个位)后才能发送下一帧报文,也就说仲裁段要在原来基础上加3个位,就可以算出每秒发送多少帧了。那么上述位数最少报文的发送时间耗时 = 1us * (26 + 3) + 33 * 200ns = 35.6us,也就是1秒钟最多可以发送1000000us / 35.6us = 28089帧报文。也就是说,1M/5M波特率下,发送CAN FD标准加速帧,最多可以发送28089帧。2 I: g( x7 r$ y+ h& ?& O
0 W" F" N/ B) Q2 S/ ?; b: Z' V r
8 R4 x, m% y- }5 `! E
下面我们给出一些常用波特率下,不同类型报文每秒最多可以发送的CANFD报文帧数(下表中报文BRS位为1,ESI位为0),供大家参考。/ w. u' K/ e0 s( O
1 H; N, l8 a& S
4qvfevh5dso64015952005.png
# z4 ^ F: b% ^* v
; f$ m" G1 p& f: w# `, F2 d' E5 n
. [5 |( R: J. l. Z/ ~( u# F; t
hjslvshcpok64015952105.png
8 t5 E& g. e, s& i6 ^& t% z
! t/ |% k$ G" f) J$ R5 c
# V, ]& `& l* o1 O5 V
pnqtvnrwtxz64015952206.png
. T8 a+ j1 M$ i( n3 p+ B
$ L- T" w, @4 `* l: F" }- Y. g5 T" x& }6 E0 }" ^
bkvnydpd1tk64015952306.png
; L. u( C( x8 i1 j5 r往期推荐详解AUTOSAR:AUTOSAR CAN网络管理/CAN NM; z) D3 ]! D. H9 ~, k
CAN总线网络中为什么需要安装终端电阻?+ Z& v+ f0 L& [. z2 F4 m" e& W
一文搞懂CAN和CAN FD总线协议
1 }' F$ V; d& G) v0 n3 K5 d! CCAN与CAN FD通信之间存在的问题
- n, K& N6 ?! y, @! G+ q% O详解CAN总线:CAN总线通信优先级机制
+ W. S* l6 A) p详解CAN总线:CAN总线故障界定与管理, Z! D7 u8 v. a* c- q
# P/ V- Z X; l: g" ~
hogg5imrok364015952406.jpg
+ t9 `: A8 r7 |3 n+ @
b44ynvlbiem64015952506.gif
4 `! \! I2 r/ h+ F8 t
点击阅读原文,更精彩~ |
|