|

dgbh1hqondt64015966134.gif
# c! q- {) n6 s% s
点击上方蓝色字体,关注我们: V8 L0 G2 e( E; f# }+ @
; C, o% V/ _5 T. U, p% ~+ c9 J G随着总线技术在汽车电子领域越来越广泛和深入的应用,特别是自动驾驶技术的迅速发展,汽车电子对总线宽度和数据传输速率的要求也越来也高,传统CAN(1MBit/s,8Bytes?Payload)已难以满足日益增加的需求。' H- A* ]5 Y( G# S
* q/ c' v& k" i' _6 v+ q M因此在2012年,Bosch发布了新的CAN FD标准 (CAN with Flexible Data Rate) ,CAN FD继承了CAN的绝大多数特性,如同样的物理层,双线串行通信协议,基于非破坏性仲裁技术,分布式实时控制,可靠的错误处理和检测机制等,同时CAN FD弥补了CAN在总线带宽和数据长度方面的不足。! f' ~/ b/ X/ k+ d* n! J
. s8 }$ _) i' T$ i! @: g
2015年6月30日,国际标准化组织(ISO)已经正式认可CAN?FD,并无反对票通过ISO 11898-1作为国际标准草案。 }9 Z0 |$ Z& E$ C
1
3 e, @) z$ ?/ [; k2 Z7 T! f什么是CAN FD?1 j6 C9 i! F* S
CAN FD协议是由Bosch以及行业专家预研开发的,并于2012年发布。通过标准化对其进行了改进,现已纳入ISO 11898-1:2015。一开始的Bosch CAN FD版本(非ISO CAN FD)与ISO CAN FD是不兼容。
. A7 l+ A$ Y- S1 W7 u! z+ g G) ~
CAN FD具有以下4个主要优点:
$ a/ e& J7 f! J; j6 n
7 x" X$ K/ w2 m, z/ W. R! M4 x8 p
1、增加了数据的长度7 Y" A1 a8 k' W8 J" R3 C
CAN FD每个数据帧最多支持64个数据字节,而传统CAN最多支持8个数据字节。这减少了协议开销,并提高了协议效率。
8 v3 S6 |7 p+ O% N: l2 ]3 K. {$ n; d6 t9 Q w. O' ^
) D5 Z* D( k2 T& {* A! W, R2 s0 J
2、增加传输的速度' M/ H9 y/ I7 I
CAN FD支持双比特率:与传统CAN一样,标称(仲裁)比特率限制为1 Mbit/s,而数据比特率则取决于网络拓扑/收发器。实际上,可以实现高达5 Mbit/s的数据比特率。
5 O. J8 g' t$ E) q0 x& S4 w- }& n; q% u5 r& `
1 }8 p8 M$ Q/ ^6 W$ b* w0 n
3、更好的可靠性8 W. B, x8 z9 F) E, u- }
CAN FD使用改进的循环冗余校验(CRC)和“受保护的填充位计数器”,从而降低了未被检测到的错误的风险。这在汽车和工业自动化等安全攸关的应用中至关重要。
% m9 A# q, [! o; N0 F7 T" M5 k0 ^( K
% [, d6 F! ]# g, n( ~% W ^1 V3 ]
M; i. Q' t7 |( t/ S1 C, Z! r4、平滑过渡
3 E4 q0 B. W5 ^* D在一些特定的情况下CAN FD能用在仅使用传统CAN的ECU上,这样就可以逐步引入CAN FD节点,从而为OEM简化程序和降低成本。3 {7 L- [ ^3 }7 B1 ]
实际上,与传统CAN相比,CAN FD可以将网络带宽提高3到8倍,从而为数据的增长提供了一种简单的解决方案。1 k5 A3 P8 o5 @
2, \# p) k! H7 V5 G5 `: ]
CAN FD帧结构
* J; Z" u6 }% `1 U4 \6 {" U5 DCAN FD节点可以正常收、发CAN报文,但CAN节点不能正确收、发CAN FD报文,因为其帧格式不一致。( B9 ~* h% p6 @! o! n* U) v3 d; S
" }3 s0 Q$ l4 t) f: y7 u
uhrqn5nk5nb64015966234.png
3 j2 f0 B0 q; \7 @! V* a
0 d8 u8 {+ l, J' D与CAN一样,CAN FD一共具有:帧起始,仲裁段,控制段,数据段,CRC段,ACK段和帧结束,7部分组成。# o2 \* ~4 c( e0 B
6 K8 P" ? @ Z7 D2.1、帧起始( Y- \" ]+ |3 z5 ?) U) J4 P
CAN与CANFD使用相同的SOF标志位来标志报文的起始。帧起始由1个显性位构成,标志着报文的开始,并在总线上起着同步作用。! l6 `, s, a" L( E+ S# }- e
# a g( }7 G) s3 }2 ]
zdm303polzo64015966334.png
* @* Q) m9 d$ p8 a1 S
# L# f/ i+ W0 l2.2、仲裁段
' [. P2 q5 b) N; c与CAN不同,CAN FD取消了对远程帧的支持,用RRS位替换了RTR位,为常显性。IDE用于区分标准帧和扩展帧。
2 ~2 O% `$ B: W9 y% e
. B1 y+ i s# n
g3jb15xxwee64015966434.png
; w# S b: o; ] E& b1 M
; A+ v2 F8 |% S
标准帧仲裁段由11位ID和r1位(显性)、IDE(显性)组成,总共13位。
0 m" S1 p5 u1 y5 M8 j2 \扩展帧仲裁段由29位ID和SRR(隐性)、IDE(隐性)、r1位(显性)组成,总共32位。# a5 F; e' R: R7 K
SRR:替代CAN标准帧中的RTR位;IDE:扩展帧标志位;r1:保留位,为显性。' @& O7 p4 V7 y [
+ Z4 M' @" i1 N6 M( _2.3、控制段
/ c3 M4 Y% d4 {# ^" U" S: o* Y( yCAN FD与CAN有着相同的IDE、res和DLC位,同时增加了FDF、BRS、ESI三个bit位。6 y$ t H+ L1 `6 v* 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)。
4 E, p5 y9 c" ]! F7 X. I
/ d& C+ g9 D4 |& Z$ ]" g8 C+ @: A1 z& u$ y/ T
n4vj0bysa2t64015966534.jpg
2 _& U0 W* o; l3 L. t8 w+ O; c4 n( p x
2.4、数据段 $ d( e3 `# M, D
CAN FD兼容CAN的数据格式,同时最大还能支持:12、16、 20、 24、 32、 48和64byte。
' t) X4 Q' ~/ \: k6 g0 b3 j% Y4 a" u; s- Y/ A" I
像在传统CAN中一样,CAN FD DLC是4位,表示帧中数据字节的数量。为了维持4位DLC,CAN FD使用从9到15的其余7个值来表示所使用的数据字节数(12、16、20、24、32、48、64)。
0 A. Y5 \# K- T! u) t. ]) o* }1 r" O5 |' e
zscg0ks41pr64015966634.png
* c5 n- L6 H* Y& G" u3 D @8 ?- s$ [编辑& b9 y# m; c6 s# I
zld33e3svdm64015966735.png
. G( G' }: O6 D$ [4 Z+ a; e
( X& K! B0 A$ C4 c2.5、CRC段, F2 Q& q- A& M6 `) k# G& E0 d
传统CAN中的循环冗余校验(CRC)为15位,而在CAN FD中由固定填充位FSB(6/7位)、填充位计数(4位)、CRC(17/21位)和CRC界定符(1位)组成,总共28或33位组成。在传统CAN中,CRC中可以包含0到3个填充位,而在CAN FD中,总是有4个固定填充位以提高通信可靠性。6 L% [9 Y t" ~
1 H c, }& Y5 e) N
3qdvqztrj3164015966835.png
2 K2 P) c* H- e
" j. W$ M8 U2 p* n
固定填充位(FSB):CRC段中每4个位固定填充一个与上位相反的位。4 L' o+ T/ u% R9 I+ }$ v4 F
采用CRC17时,FSB为6个位;采用CRC21时,FSB为7个位。
6 @& X( A X8 ~7 Y
# A# ^) [4 `& r0 u k# q$ q( e. u# |填充位计数:由填充位计数(3位)和奇偶校验位(1位)组成。
e1 l0 X# W. C9 c* v! u; S+ J- @# s' }3 D
CRC:
) j( p! u x8 S" V- L& @报文长度小于16时,采用CRC17,17位组成;报文长度大于16时,采用CRC21,21位组成。7 [4 \2 j! e: V/ [1 o( m f0 x
& }# z# Q& a8 B7 BCRC界定符:固定为隐性位;从该位采样后,切换为仲裁域波特率。: v% g* W$ r! g' I9 l8 `) R- e* u
- H; K0 H& T, N/ z
bzzkv3bx4ap64015966935.png
C) L' X4 o# G9 I
$ h* g! \: C* I# f. Z8 q# M2.6、ACK段
6 S8 [; J& g& E2 c6 Z) ?* gACK紧跟着CRC结束标识位。不同的是,CAN FD支持2bits的ACK的识别,由ACK位和ACK界定符位组成。, ]& ^8 j, q6 C- ]( {
ACK:接收节点应答位,接收节点应应答显性位;ACK界定符,固定为隐性。* ?% W- X) }: ~/ V$ B$ l
0 K8 G& Z0 c$ T2 ?8 y
- \# H0 d9 Y; R+ q8 ]
gxcpst4evnf64015967035.png
: e& G6 j& m' y
" b* |- L8 O* u6 T& B
2.7、帧结束
1 B( V& x$ |; x$ y; P与CAN一样,CAN FD的帧结尾也为连续7位的隐性位。" ~* r) z3 t" b
39 M9 R" k" A0 d
一帧CAN FD报文位数9 C A3 S) ^) \; D
根据CAN FD帧结构组成,可以算出一帧CAN FD报文位数:
1 p2 ^1 z& ] G( v( Z# Z
( y. ^, O% u/ I, x" {8 j# c) q) ~CAN FD报文位数 = 帧起始(1位)+ 仲裁段(13/32位)+ 控制段(8位)+ 数据段(0~512位)+ CRC段(28/33位)+ ACK段(2位)+ 帧结束(7位)
- e5 s% ]& j+ b( d( `" m+ I' E% [5 f( m) B5 W# y* G
! S4 e7 N: E% J- o+ s; G* M' z8 N: ~% P7 \
影响报文位数主要为仲裁段(帧ID长度)和数据段(CRC段受数据段长度影响)。通过帧类型、帧长度组合出不同情况报文位数:( M% Q- A/ V$ W+ X% k
标准帧,数据0字节+ G* Q4 N( V4 C1 f
帧起始(1位)+ 仲裁段(13位)+ 控制段(8位)+ 数据段(0位)+ CRC段(28位)+ ACK段(2位)+ 帧结束(7位)= 59位
# S) |5 P+ }: J' i7 |标准帧,数据64字节
; X/ N" }5 G2 ^" f2 U6 k2 k帧起始(1位)+ 仲裁段(13位)+ 控制段(8位)+ 数据段(512位)+ CRC段(33位)+ ACK段(2位)+ 帧结束(7位)= 576位2 `: H, |. R _
扩展帧,数据0字节
, |2 E9 G! f' h! w. _ ~! J帧起始(1位)+ 仲裁段(32位)+ 控制段(8位)+ 数据段(0位)+ CRC段(28位)+ ACK段(2位)+ 帧结束(7位)= 78位( a( r8 b* L6 X& z
扩展帧,数据64字节
: c* A/ v0 V. o; N* R帧起始(1位)+ 仲裁段(13位)+ 控制段(8位)+ 数据段(512位)+ CRC段(33位)+ ACK段(2位)+ 帧结束(7位)= 590位 E% |# u; ^8 z+ W5 @9 V6 c
4! F" l' t J8 g
精品专栏仲裁域和数据域位数
3 W6 X6 a- ]) z/ j9 S* N: q由于CANFD采用了双波特率形式:标准波特率(也称仲裁域波特率)和数据域波特率,所以帧结构中不同段采用的波特率也不同。
4 i l9 x. e: m; ^仲裁域波特率所占位数帧起始(1位)+ 仲裁段(13位)+ 控制段的EDL、r0、BRS(3位)+ ACK段(2位)+ 帧结束(7位)数据域波特率所占位数控制段的ESI、DLC(5位)+ 数据段(0~512位)+ CRC段(28/33位)8 r1 ^& F9 _1 z6 s
& t! l) S. k3 [主要说明的是,BRS位和CRC界定符位均同时使用了两个波特率:, |- o6 _& f Q4 D' i1 _
BRS位:由**仲裁域波特率 * 仲裁域采样点 + 数据域波特率 * (1 - 仲裁域采样点)**组成;CRC界定符:由**数据域波特率 * 数据域采样点 + 仲裁域波特率 * (1 - 数据域采样点)**组成。4 M0 N9 e: E: F% B) l7 K. v3 x5 x8 ^
) S4 s: M1 a6 B: g7 B* ]此处将BRS认定采用仲裁域波特率、CRC界定符采用数据域波特率以方便计算。
8 Q' [& i4 _7 E# [) T5
7 j( y; c( w$ c: y+ C3 k( R位填充' i$ q2 x q# f- \! ~# \4 b
当然,上述报文位数中,还未包含填充位个数。在CAN/CAN FD协议中规定:每5个相同的位就必须填充一个相反位,该位即为填充位。
@, i- m j% j- D" x+ j- _! X
我们知道字节0x55或0xAA,其二进制分别为0101 0101或1010 1010,也就是每个位与上一位均相反,若此时ID和数据均为0x55或0xAA,则可以使填充位个数最少。
9 f: F. Z- r4 k+ U! G8 h5 \( t, S7 o/ d' O
同理,字节0xFF或0x00,其二进制位1111 1111或0000 0000,也就是所有位均一致,若此时ID和数据均为0x00或0xFF,此时报文的填充位个数最多。
; J1 [- p& V, h3 y. g6
9 i5 X; I3 \ B- s& o. r0 n3 V不同类型报文位数9 `# T$ {( {! T: x9 Z
基于以上报文位数的计算,我们可以得出算出不同类型报文所占位数,如下表所示:1 U( ?- _+ q0 @6 H2 t; o' I2 b
- ^2 C3 `# s8 M
ybhvtx5n4d364015967135.png
3 Y) {, H; i6 u% Y4 M) L" c
: z3 k A$ }- M从上表可知:
* l1 Z4 E( W, ~8 Z. a当报文为CAN FD标准帧ID为0x555,数据长度为0时,报文位数最少,为59位;当报文为CAN FD扩展帧ID为0x0,数据长度为64字节,数据全为0xFF时,报文位数最多,为703位。- t1 m! h/ e0 K' e$ H1 R
2 d& L; T3 S4 i6 ]7 r' M
7
# Q2 r+ U1 I( i& ^! hCAN FD报文时间计算
; B$ _% o0 G) }& d最后,可以根据波特率算出不同类型报文时间了,计算公式如下:7 E# c9 x; q& Y" A( ^
5 z* [% u$ @% b! ~4 e9 f报文时间 = 仲裁域位时间 * 仲裁域位数 + 数据域位时间 * 数据域位数
o; d. V1 N' p/ Q4 {+ [6 r2 d: k3 y, r8 v" Y1 K/ e: w
. z6 |+ S& w' V# g/ ^/ n+ d0 ~以位数最少的CANFD报文为例,在仲裁域波特率为1Mbps(位时间1us),数据域波特率为5Mbps(位时间200ns)时,其报文时间 = 1us * 26 + 33 * 200ns = 32.6us。
$ o+ @: x/ u/ P: o; ?+ a
$ B7 _; e% K7 Z2 a那么一秒钟最多可以发送报文呢?由于报文发送成功后,需经过帧间隔(3个位)后才能发送下一帧报文,也就说仲裁段要在原来基础上加3个位,就可以算出每秒发送多少帧了。那么上述位数最少报文的发送时间耗时 = 1us * (26 + 3) + 33 * 200ns = 35.6us,也就是1秒钟最多可以发送1000000us / 35.6us = 28089帧报文。也就是说,1M/5M波特率下,发送CAN FD标准加速帧,最多可以发送28089帧。 ?6 i( R0 h7 Z8 y2 {- c& {
. s* ]5 _4 c, a9 k8 b& \
! i g% _; z+ @下面我们给出一些常用波特率下,不同类型报文每秒最多可以发送的CANFD报文帧数(下表中报文BRS位为1,ESI位为0),供大家参考。+ l2 V2 {5 o) m# f0 _+ s+ m
# h0 x8 g4 S6 V) ?
sm3btnqvbvu64015967235.png
' |6 k" t, m3 ^# v
& s, ?, ]& ?2 ]! O P( F# P3 }# J2 q Y4 M* x3 v0 y! X
fgijceomwio64015967335.png
" Y/ i" o: J5 ^5 {% a% ^7 Z5 j6 m* U5 ~
6 x T: I+ ?9 W: {$ e
ofnpmsztn5264015967435.png
( Z# q2 ?' J8 {" M" H. W K0 _; {. U4 m: Q ?
* H& e% G9 K- M7 d
5e04vw2s2sy64015967535.png
8 _8 P9 [7 @: M% j往期推荐详解AUTOSAR:AUTOSAR CAN网络管理/CAN NM
; S4 B9 \* g" b, ^ ZCAN总线网络中为什么需要安装终端电阻?
, s& [# \9 S! m! W一文搞懂CAN和CAN FD总线协议
1 N3 G+ N$ ^: hCAN与CAN FD通信之间存在的问题2 r. F/ [( k% l9 M% C4 u9 q
详解CAN总线:CAN总线通信优先级机制1 S" u& s& n7 _4 p" z, M) N
详解CAN总线:CAN总线故障界定与管理2 b" E" \( {" e+ j, I) p0 W. [
5 f* M" h! ]! i; d& G9 g
x2xk1vxuhra64015967635.jpg
) e+ q4 C# D! p6 o2 }5 b
ab21bgkunbd64015967735.gif
* L3 d$ a: o* G5 E& B' A7 K点击阅读原文,更精彩~ |
|