|

5fd0jsic4us64011353735.gif
) R K- Q" W8 \& D
点击上方蓝色字体,关注我们
+ d" b" [; E9 V0 I0 i
& j9 Q" V9 U; M( @随着总线技术在汽车电子领域越来越广泛和深入的应用,特别是自动驾驶技术的迅速发展,汽车电子对总线宽度和数据传输速率的要求也越来也高,传统CAN(1MBit/s,8Bytes?Payload)已难以满足日益增加的需求。
0 E9 G7 w0 o. a: P/ m3 a1 C1 K: t- w+ ^: l3 \+ O4 V
因此在2012年,Bosch发布了新的CAN FD标准 (CAN with Flexible Data Rate) ,CAN FD继承了CAN的绝大多数特性,如同样的物理层,双线串行通信协议,基于非破坏性仲裁技术,分布式实时控制,可靠的错误处理和检测机制等,同时CAN FD弥补了CAN在总线带宽和数据长度方面的不足。
1 D7 z$ R% j. n+ l! J0 h) A
9 H' T5 \8 a# x0 Z& H- m' o8 x& S, a2015年6月30日,国际标准化组织(ISO)已经正式认可CAN?FD,并无反对票通过ISO 11898-1作为国际标准草案。
1 _' T) v g0 i3 G, O" _6 z1! [9 \1 t" N" z1 T8 a2 B- v
什么是CAN FD?! |, B0 _* j' l; \1 n3 T6 z
CAN FD协议是由Bosch以及行业专家预研开发的,并于2012年发布。通过标准化对其进行了改进,现已纳入ISO 11898-1:2015。一开始的Bosch CAN FD版本(非ISO CAN FD)与ISO CAN FD是不兼容。
) ]3 w# Q( x$ @: H/ J( b* S* D7 v% H. N r
CAN FD具有以下4个主要优点:
5 f* @! ]# q* E& \/ X' R; x( V' |. d2 F6 S% `# `* L: Q+ B
% a6 v3 Y! D: Y; w! y4 s1、增加了数据的长度
& b: Q; h. {/ W" A2 zCAN FD每个数据帧最多支持64个数据字节,而传统CAN最多支持8个数据字节。这减少了协议开销,并提高了协议效率。
% y4 P" Z7 c7 o+ o) W) Y* ^# b! s) J* m% C
. M$ D1 D! d6 w* ^( n2、增加传输的速度
% {$ ` ?4 A6 A) ~/ pCAN FD支持双比特率:与传统CAN一样,标称(仲裁)比特率限制为1 Mbit/s,而数据比特率则取决于网络拓扑/收发器。实际上,可以实现高达5 Mbit/s的数据比特率。
6 b* C I: C' Q8 E+ r- [& D( ~6 f& s* p
3 |! v* d+ a) F- Q! J1 R5 r
3、更好的可靠性
8 \* x9 ?# p6 KCAN FD使用改进的循环冗余校验(CRC)和“受保护的填充位计数器”,从而降低了未被检测到的错误的风险。这在汽车和工业自动化等安全攸关的应用中至关重要。& P2 U/ W9 F& j3 R! {
# r0 _9 D7 c' [5 L% u& E( V" J' [1 ?% \& g: |" d. o
4、平滑过渡5 P$ b0 ]$ _9 b' K
在一些特定的情况下CAN FD能用在仅使用传统CAN的ECU上,这样就可以逐步引入CAN FD节点,从而为OEM简化程序和降低成本。 k! z% ?5 B+ x: I2 K4 ?/ H, X1 R
实际上,与传统CAN相比,CAN FD可以将网络带宽提高3到8倍,从而为数据的增长提供了一种简单的解决方案。1 d, G$ s3 g3 q# R3 v
2) E. b: {+ A) ^& Z8 d! E/ y; F- D
CAN FD帧结构
8 ^ a$ R% ~' f0 YCAN FD节点可以正常收、发CAN报文,但CAN节点不能正确收、发CAN FD报文,因为其帧格式不一致。
& I5 d1 X9 A# `6 _* J$ c I7 u5 s
ytxc4r1tlsc64011353835.png
* a& s( }* w" B
0 T- ?( \- C& G/ W9 P& _$ _ F与CAN一样,CAN FD一共具有:帧起始,仲裁段,控制段,数据段,CRC段,ACK段和帧结束,7部分组成。 D7 v, d t+ }, w2 @" c! F$ W
' h0 q! M& _* v$ Z
2.1、帧起始$ H& L( ^: v- X. H
CAN与CANFD使用相同的SOF标志位来标志报文的起始。帧起始由1个显性位构成,标志着报文的开始,并在总线上起着同步作用。
4 P, j3 N$ b7 }4 k% f0 {- z/ b: W. ~9 W- U- R
udcfcfuakrv64011353935.png
% L1 b Z6 V0 P/ M6 g! H- D( F
, j6 V8 |/ \$ t! r4 _5 p2.2、仲裁段
+ C6 m: J; j* L与CAN不同,CAN FD取消了对远程帧的支持,用RRS位替换了RTR位,为常显性。IDE用于区分标准帧和扩展帧。
. R" \: W' I4 U" z- ]4 O |$ f( ~
% C- T: N6 S% R$ i. \! k9 ^
om3ewlcorey64011354035.png
* w0 A0 E0 E, O+ }* H
$ Q8 v5 n3 i3 _1 S4 K5 C( X. P
标准帧仲裁段由11位ID和r1位(显性)、IDE(显性)组成,总共13位。
, F3 Y6 C1 @9 x- @9 a扩展帧仲裁段由29位ID和SRR(隐性)、IDE(隐性)、r1位(显性)组成,总共32位。
6 {8 J, u& J& @3 A Y$ E2 \* [SRR:替代CAN标准帧中的RTR位;IDE:扩展帧标志位;r1:保留位,为显性。% Q4 f% @3 ]# t0 u+ x6 o6 h
' r, f' q+ [8 n ~1 L9 g2.3、控制段" ~( p& J& L- ^" u5 E4 ]7 v7 p
CAN FD与CAN有着相同的IDE、res和DLC位,同时增加了FDF、BRS、ESI三个bit位。/ K1 q) W" Q1 i0 s2 ~
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)。! M" f+ U9 O% v
' _( ~/ z7 [( _) `* x* P5 [$ l
' q. J1 \- ]6 `! H! t
qyrslpftqjd64011354135.jpg
/ b' l2 B$ B( N1 T
! q" J& V% E7 p: A2.4、数据段 1 s$ c0 E. B! _3 Z1 m- Q* K$ U
CAN FD兼容CAN的数据格式,同时最大还能支持:12、16、 20、 24、 32、 48和64byte。
% w/ J1 W. C" _8 s1 ?& e5 J% } s
+ d4 J1 K5 R$ m) R; H( B3 c像在传统CAN中一样,CAN FD DLC是4位,表示帧中数据字节的数量。为了维持4位DLC,CAN FD使用从9到15的其余7个值来表示所使用的数据字节数(12、16、20、24、32、48、64)。
6 l' n' o+ e8 \& A2 @! y W$ G, ~
irrukj1yut564011354236.png
$ U h# m$ W" b3 w1 ?( f
编辑
* ~1 M1 u8 b5 X- ~/ x
tk1iqvivays64011354336.png
* H5 y3 }' ?( u( F* p2 k
$ d( _8 F) m! b; g' v2 z: t$ W% W2.5、CRC段
; R T6 J: R6 p8 j. L& V传统CAN中的循环冗余校验(CRC)为15位,而在CAN FD中由固定填充位FSB(6/7位)、填充位计数(4位)、CRC(17/21位)和CRC界定符(1位)组成,总共28或33位组成。在传统CAN中,CRC中可以包含0到3个填充位,而在CAN FD中,总是有4个固定填充位以提高通信可靠性。2 T4 ^6 `1 R* u# E
; w. ^' K0 E+ L" H
m54wpdbnjps64011354436.png
6 ^. u% j, D( P, w; x7 L
- g9 J% v& }! f' ^8 a: g固定填充位(FSB):CRC段中每4个位固定填充一个与上位相反的位。
) i0 d/ R: {& q" |$ e采用CRC17时,FSB为6个位;采用CRC21时,FSB为7个位。
6 N$ D& b" e3 B2 c5 t% I1 I, E( x0 E) P
$ G, g, F& g# b填充位计数:由填充位计数(3位)和奇偶校验位(1位)组成。' @* H1 Z- l' J7 b
4 v, l7 [9 X: l0 t
CRC:+ l# R- Z3 x+ C' ~
报文长度小于16时,采用CRC17,17位组成;报文长度大于16时,采用CRC21,21位组成。
0 r9 \* Y4 ?# J6 K) J
( Z( N; U6 x) I7 ?& ^CRC界定符:固定为隐性位;从该位采样后,切换为仲裁域波特率。! H- u0 x! f4 V9 F4 U& E, b2 g$ M
$ t/ U2 g; }" C, b
4gunxkk2u2i64011354536.png
% ^ P9 y2 `6 h7 |0 j8 l& n, C* |$ o
2.6、ACK段) U0 Q& M# B0 M3 r, Y8 o( e
ACK紧跟着CRC结束标识位。不同的是,CAN FD支持2bits的ACK的识别,由ACK位和ACK界定符位组成。# V/ J: L8 [& | a$ ^) V
ACK:接收节点应答位,接收节点应应答显性位;ACK界定符,固定为隐性。5 z2 Q" H5 O0 J# ?3 @
0 M x5 Q! Z4 _4 w5 F4 F0 Z% r2 W8 w3 c1 \) H9 ~
o35aqmor4k164011354636.png
7 ~' M" }& s! W" S1 y6 f; G: Y/ ^" Y+ N3 T- l
2.7、帧结束. C# G5 O" F* a
与CAN一样,CAN FD的帧结尾也为连续7位的隐性位。9 @! L+ g$ x3 c* |+ |% @( u- V
3
0 a, m, N7 q" z% ]一帧CAN FD报文位数
) i# @" o2 w0 I! E: u- d8 M根据CAN FD帧结构组成,可以算出一帧CAN FD报文位数:' {/ \5 s. l3 `; b: o: N8 E1 ]
6 H4 E5 C8 K- `* R W
CAN FD报文位数 = 帧起始(1位)+ 仲裁段(13/32位)+ 控制段(8位)+ 数据段(0~512位)+ CRC段(28/33位)+ ACK段(2位)+ 帧结束(7位)
4 t T$ D6 E2 F0 ?# i0 X; b. m, F/ ^8 X; R" j7 l% O7 q: Y
# C k+ B: [9 C6 [影响报文位数主要为仲裁段(帧ID长度)和数据段(CRC段受数据段长度影响)。通过帧类型、帧长度组合出不同情况报文位数:
8 u" W* Q. E9 C& K ~标准帧,数据0字节 Z" X8 `9 A2 ^6 K; k% n8 c
帧起始(1位)+ 仲裁段(13位)+ 控制段(8位)+ 数据段(0位)+ CRC段(28位)+ ACK段(2位)+ 帧结束(7位)= 59位
b7 j2 b6 G" G7 d: h* [标准帧,数据64字节; ?- `# M; A V$ y. _
帧起始(1位)+ 仲裁段(13位)+ 控制段(8位)+ 数据段(512位)+ CRC段(33位)+ ACK段(2位)+ 帧结束(7位)= 576位8 P' Q/ C' g- g, y5 D
扩展帧,数据0字节
% Q5 [2 s/ {5 F) Q' N) y帧起始(1位)+ 仲裁段(32位)+ 控制段(8位)+ 数据段(0位)+ CRC段(28位)+ ACK段(2位)+ 帧结束(7位)= 78位
0 y) p/ w& x0 i" l' ~/ u, J扩展帧,数据64字节
1 Q: M/ B- Z$ `6 Z! ^, g) t帧起始(1位)+ 仲裁段(13位)+ 控制段(8位)+ 数据段(512位)+ CRC段(33位)+ ACK段(2位)+ 帧结束(7位)= 590位
0 r( K* U# b$ h, T" E4
' R* {& L W+ h' g+ |精品专栏仲裁域和数据域位数. P7 O1 j/ p! H4 I
由于CANFD采用了双波特率形式:标准波特率(也称仲裁域波特率)和数据域波特率,所以帧结构中不同段采用的波特率也不同。
4 _: _, o! n/ e8 @' `仲裁域波特率所占位数帧起始(1位)+ 仲裁段(13位)+ 控制段的EDL、r0、BRS(3位)+ ACK段(2位)+ 帧结束(7位)数据域波特率所占位数控制段的ESI、DLC(5位)+ 数据段(0~512位)+ CRC段(28/33位)
' y% L. i J V0 g1 R# ~7 r
) h, t! u! x$ C$ M3 Q% F' R主要说明的是,BRS位和CRC界定符位均同时使用了两个波特率:- W1 d( S$ ~' _% a0 t# j: A
BRS位:由**仲裁域波特率 * 仲裁域采样点 + 数据域波特率 * (1 - 仲裁域采样点)**组成;CRC界定符:由**数据域波特率 * 数据域采样点 + 仲裁域波特率 * (1 - 数据域采样点)**组成。- W" h) c4 H! A# {
0 k4 {7 V5 |3 D. a
此处将BRS认定采用仲裁域波特率、CRC界定符采用数据域波特率以方便计算。5 p- {/ t2 V* f+ W/ e
5
6 M& \5 ?% A: M/ C R7 s位填充
. N5 |9 W5 ~- J7 y7 z当然,上述报文位数中,还未包含填充位个数。在CAN/CAN FD协议中规定:每5个相同的位就必须填充一个相反位,该位即为填充位。
4 }4 _! }7 T' H9 E# t
2 F, G% H2 k" r* o' u: k( X我们知道字节0x55或0xAA,其二进制分别为0101 0101或1010 1010,也就是每个位与上一位均相反,若此时ID和数据均为0x55或0xAA,则可以使填充位个数最少。
" o0 @4 B' o% S9 `; F8 S7 Y/ J5 u7 f) U A8 i" N1 W4 g
同理,字节0xFF或0x00,其二进制位1111 1111或0000 0000,也就是所有位均一致,若此时ID和数据均为0x00或0xFF,此时报文的填充位个数最多。
2 C4 |6 i( g; R0 B6' N! g. k; x! Q5 a
不同类型报文位数! L2 I- L8 W | O
基于以上报文位数的计算,我们可以得出算出不同类型报文所占位数,如下表所示:
: R( x+ v/ _* f* z# |4 e/ l. Q& x% [/ V0 N9 C, a
p015nc233mz64011354736.png
. ~- }6 Z* U: b" o
* r8 e- l, `0 z' q- x6 {从上表可知:+ y# J; s5 u& E$ {- A
当报文为CAN FD标准帧ID为0x555,数据长度为0时,报文位数最少,为59位;当报文为CAN FD扩展帧ID为0x0,数据长度为64字节,数据全为0xFF时,报文位数最多,为703位。+ t$ J; A) W9 l+ V& w8 u" L+ Q7 v$ P1 ?
; ?4 p+ R& l' Y2 z4 l* ~( f' m7
& g8 S( t9 h% d/ D( ECAN FD报文时间计算
d% C! I/ L& b( p& h3 W最后,可以根据波特率算出不同类型报文时间了,计算公式如下:& U+ }/ \* C# K: E
1 R) i( z8 D3 C% f5 O! g9 c
报文时间 = 仲裁域位时间 * 仲裁域位数 + 数据域位时间 * 数据域位数7 J5 Z3 }! v. I9 _/ p* ~' d/ G
5 N! Q% p; Y( v9 C0 k7 D b8 z( N
3 ^( Q) ~& ]! _1 ]3 z以位数最少的CANFD报文为例,在仲裁域波特率为1Mbps(位时间1us),数据域波特率为5Mbps(位时间200ns)时,其报文时间 = 1us * 26 + 33 * 200ns = 32.6us。( C3 F3 g9 G1 N2 {; p) @
$ \% d( q& e W% ~5 u那么一秒钟最多可以发送报文呢?由于报文发送成功后,需经过帧间隔(3个位)后才能发送下一帧报文,也就说仲裁段要在原来基础上加3个位,就可以算出每秒发送多少帧了。那么上述位数最少报文的发送时间耗时 = 1us * (26 + 3) + 33 * 200ns = 35.6us,也就是1秒钟最多可以发送1000000us / 35.6us = 28089帧报文。也就是说,1M/5M波特率下,发送CAN FD标准加速帧,最多可以发送28089帧。* }" h6 h" {8 ~" o& y% d+ W" p, P% D8 i
6 d* U' A0 s% T/ e+ t2 q! K {
+ r8 }5 q6 X% }下面我们给出一些常用波特率下,不同类型报文每秒最多可以发送的CANFD报文帧数(下表中报文BRS位为1,ESI位为0),供大家参考。. Z1 Y: O/ R9 o9 X; t" f
; |7 g# O2 f3 ]; D6 @, {
uc1spznfeez64011354836.png
, @2 a1 {% p, k9 f0 U2 _/ X) w, L: Z, Q
: e c/ ?/ H! E5 T1 {/ D3 _6 p$ P
xvqfpvpqxjf64011354937.png
, `- u0 Z$ I1 L. t2 S
( P9 g0 m; M$ q+ K9 }, h7 ^: X& z
+ T0 p: b6 T W# W" y$ K) s- t
5j1wbtytli064011355037.png
3 ]- y7 F" L! O. |5 _& }' p: i
9 x/ {, f0 `; e& C/ G
1 v, T$ f2 q3 h8 b ]) T
doo21s5ag4h64011355137.png
( h& q+ U% Z* B往期推荐详解AUTOSAR:AUTOSAR CAN网络管理/CAN NM
$ }) U" ]( j0 ?% @* lCAN总线网络中为什么需要安装终端电阻?8 c5 d$ I0 o( F7 F
一文搞懂CAN和CAN FD总线协议; x: v" r2 M; ^' A4 [% Z$ @* ?
CAN与CAN FD通信之间存在的问题
2 G* @4 \, s9 `' \( x详解CAN总线:CAN总线通信优先级机制
* w* w7 }% I. z3 N4 F, p1 j详解CAN总线:CAN总线故障界定与管理
# V- e' S6 Q {3 f. l7 e: Y; b& ]& ~& U7 j, }! p
4oexc5b4qg064011355237.jpg
9 x0 n9 }+ ^# z* Y
v3nbtnpfyyg64011355337.gif
1 N) J! \! L7 E0 o
点击阅读原文,更精彩~ |
|