我們知道CANFD比CAN擁有更長的數據長度(最長64字節),更高的波特率(8Mbps甚至更高)。那么波特率更高,數據更長的CANFD,一秒鐘最高可以發送多少幀CANFD報文呢?
要想知道問題的答案,那么我們就要知道一幀CANFD報文由多少個位組成,再由具體波特率算出報文時間,最后就可以得出每秒能發送的幀數了。接下來,我們就一步步來算出答案。 要想知道CANFD報文由多少個位組成,那么我們就要了解CANFD幀結構,知道每個段占用位數從而得出CANFD報文位數。
??幀結構
如上圖所示,分別為CANFD標準幀和擴展幀,其組成如下:
1. 幀起始:起始信號,由1個顯性位組成。
2. 仲裁段:
標準幀仲裁段由11位ID和r1位(顯性)、IDE(顯性)組成,總共13位;
擴展幀仲裁段由29位ID和SRR(隱性)、IDE(隱性)、r1位(顯性)組成,總共32位。
○SRR:替代CAN標準幀中的RTR位;
○IDE:擴展幀標志位;
○r1:保留位,為顯性;
3. 控制段:由EDL、r0、BRS、ESI、DLC總共8個位組成。
EDL:CANFD幀標識,為隱性;
r0:保留位,為顯性;
BRS:位速率切換,該位顯性則仍采用仲裁域波特率;該位為隱性,則該位發送到采樣點后,采用數據域波特率;
ESI:錯誤狀態指示位,指示發送節點為主動錯誤狀態(顯性),還是被動錯誤狀態(隱性);
DLC:數據段長度指示,4個位組成。
4. 數據段:0~64字節,也就是0~512個位。
5. CRC段:由固定填充位FSB(6/7位)、填充位計數(4位)、CRC(17/21位)CRC界定符(1位)組成,總共28或33位組成。
6. 固定填充位(FSB):CRC段中每4個位固定填充一個與上位相反的位。
采用CRC17時,FSB為6個位;
采用CRC21時,FSB為7個位;
7. 填充位計數:由填充位計數(3位)和奇偶校驗位(1位)組成。
8. CRC:
報文長度小于16時,采用CRC17,17位組成;
報文長度大于16時,采用CRC21,21位組成。
9. CRC界定符:固定為隱性位;從該位采樣后,切換為仲裁域波特率。
10. ACK段:由ACK位和ACK界定符位組成,總共2位。
ACK:接收節點應答位,接收節點應應答顯性位;
ACK界定符,固定為隱性;
11. 幀結束:固定為7個隱性位。
12. 幀間隔:每次發送一幀報文后,需留3位時間作為幀間隔。
??一幀CANFD報文位數
知道CANFD幀結構組成后,我們可以算出: CANFD報文位數=幀起始(1位)+仲裁段(13/32位)+控制段(8位)+數據段(0~512位)+CRC段(28/33位)+ACK段(2位)+幀結束(7位) 從上述公式中可以看出,影響報文位數主要為仲裁段(幀ID長度)和數據段(CRC段受數據段長度影響)。那么我們通過幀類型、幀長度組合出不同情況報文位數:
標準幀,數據0字節:
幀起始(1位)+仲裁段(13位)+控制段(8位)+數據段(0位)+CRC段(28位)+ACK段(2位)+幀結束(7位)=59位
標準幀,數據64字節:
幀起始(1位)+仲裁段(13位)+控制段(8位)+數據段(512位)+CRC段(33位)+ACK段(2位)+幀結束(7位)=576位
擴展幀,數據0字節:
幀起始(1位)+仲裁段(32位)+控制段(8位)+數據段(0位)+CRC段(28位)+ACK段(2位)+幀結束(7位)=78位
擴展幀,數據64字節:
幀起始(1位)+仲裁段(13位)+控制段(8位)+數據段(512位)+CRC段(33位)+ACK段(2位)+幀結束(7位)=590位
??仲裁域和數據域所占報文位數
由于CANFD采用了雙波特率形式:標準波特率(也稱仲裁域波特率)和數據域波特率,所以幀結構中不同段采用的波特率也不同。
仲裁域波特率所占位數:
幀起始(1位)+仲裁段(13位)+控制段的EDL、r0、BRS(3位)+ACK段(2位)+幀結束(7位)
數據域波特率所占位數:
控制段的ESI、DLC(5位)+數據段(0~512位)+CRC段(28/33位)
主要說明的是,BRS位和CRC界定符位均同時使用了兩個波特率:
BRS位:由**仲裁域波特率*仲裁域采樣點+數據域波特率*(1 -仲裁域采樣點)**組成;
CRC界定符:由**數據域波特率*數據域采樣點+仲裁域波特率*(1 -數據域采樣點)**組成;
我們此處將BRS認定采用仲裁域波特率、CRC界定符采用數據域波特率以方便計算。
??位填充
當然,上述報文位數中,還未包含填充位個數。在CAN/CANFD協議中規定:每5個相同的位就必須填充一個相反位,該位即為填充位。 我們知道字節0x55或0xAA,其二進制分別為0101 0101或1010 1010,也就是每個位與上一位均相反,若此時ID和數據均為0x55或0xAA,則可以使填充位個數最少。 同理,字節0xFF或0x00,其二進制位1111 1111或00000000,也就是所有位均一致,若此時ID和數據均為0x00或0xFF,此時報文的填充位個數最多。
??不同類型報文所占位數
基于以上報文位數的計算,我們可以得出算出不同類型報文所占位數,如下表所示。
從上表可知: 當報文為CANFD標準幀ID為0x555,數據長度為0時,報文位數最少,為59位。 當報文為CANFD擴展幀ID為0x0,數據長度為64字節,數據全為0xFF時,報文位數最多,為703位。
??CANFD報文時間計算
最后,我們就可以根據波特率算出不同類型報文時間了,計算公式如下: 報文時間=仲裁域位時間*仲裁域位數+數據域位時間*數據域位數 我們以位數最少的CANFD報文為例,在仲裁域波特率為1Mbps(位時間1us),數據域波特率為5Mbps(位時間200ns)時,其報文時間= 1us * 26 + 33 * 200ns = 32.6us。 那么一秒鐘最多可以發送報文呢?由于報文發送成功后,需經過幀間隔(3個位)后才能發送下一幀報文,也就說仲裁段要在原來基礎上加3個位,就可以算出每秒發送多少幀了。那么上述位數最少報文的發送時間耗時= 1us *(26 + 3)+ 33 * 200ns = 35.6us,也就是1秒鐘最多可以發送1000000us / 35.6us = 28089幀報文。也就是說,1M/5M波特率下,發送CANFD標準加速幀,最多可以發送28089幀。
下面我們給出一些常用波特率下,不同類型報文每秒最多可以發送的CANFD報文幀數(下表中報文BRS位為1,ESI位為0),供大家參考。
500K/2M波特率
1M/5M波特率
1M/8M波特率
??高性能CANFD接口卡
既然CANFD每秒最多可以發送28000幀報文(1M/5Mbps),那么什么樣的設備可以能擁有如此高性能的收發能力呢?答案就是,致遠電子最新發布八通道CANFD卡——USBCANFD-800U。 USBCANFD-800U采用創新型的ARM+FPGA架構,使得多路CANFD同時實現高性能收發。即使在1M/5M波特率下,也能夠輕松實現滿載收發不丟幀。 此外,其還具有硬件采集CAN總線負載、微秒級別的收發報文時間戳、微秒級別的定時發送精度等一系列特性,以滿足用戶的高階需求。
審核編輯:劉清
-
ARM架構
+關注
關注
14文章
177瀏覽量
36290 -
CANFD
+關注
關注
0文章
56瀏覽量
4923 -
BRS
+關注
關注
0文章
7瀏覽量
3938 -
CRC效驗
+關注
關注
0文章
30瀏覽量
1093
原文標題:CANFD每秒最多可以發送多少幀報文?
文章出處:【微信號:智能汽車電子與軟件,微信公眾號:智能汽車電子與軟件】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論