您現在的位置是:首頁 > 動漫首頁動漫

「ZLG開發者社群」CANFD每秒最多可以傳送多少幀報文?

由 ZLG致遠電子 發表于 動漫2023-02-03
簡介一幀CANFD報文位數知道CANFD幀結構組成後,我們可以算出:CANFD報文位數 = 幀起始(1位)+ 仲裁段(1332位)+ 控制段(8位)+ 資料段(0~512位)+ CRC段(2833位)+ ACK段(2位)+ 幀結束(7位)從

1幀是多少位元組

我們知道CANFD比CAN擁有更長的資料長度(最長64位元組),更高的波特率(8Mbps甚至更高)。那麼波特率更高,資料更長的CANFD,一秒鐘最高可以傳送多少幀CANFD報文呢?

我們知道CANFD比CAN擁有更長的資料長度(最長64位元組),更高的波特率(8Mbps甚至更高)。那麼波特率更高,資料更長的CANFD,一秒鐘最高可以傳送多少幀CANFD報文呢?

要想知道問題的答案,那麼我們就要知道一幀CANFD報文由多少個位組成,再由具體波特率算出報文時間,最後就可以得出每秒能傳送的幀數了。接下來,我們就一步步來算出答案。

要想知道CANFD報文由多少個位組成,那麼我們就要了解CANFD幀結構,知道每個段佔用位數從而得出CANFD報文位數。

幀結構

「ZLG開發者社群」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位組成。

「ZLG開發者社群」CANFD每秒最多可以傳送多少幀報文?

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或0000 0000,也就是所有位均一致,若此時ID和資料均為0x00或0xFF,此時報文的填充位個數最多。

不同型別報文所佔位數

基於以上報文位數的計算,我們可以得出算出不同型別報文所佔位數,如下表所示。

「ZLG開發者社群」CANFD每秒最多可以傳送多少幀報文?

從上表可知:

當報文為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波特率

「ZLG開發者社群」CANFD每秒最多可以傳送多少幀報文?

1M/5M波特率

「ZLG開發者社群」CANFD每秒最多可以傳送多少幀報文?

1M/8M波特率

「ZLG開發者社群」CANFD每秒最多可以傳送多少幀報文?

高效能CANFD介面卡

既然CANFD每秒最多可以傳送28000幀報文(1M/5Mbps),那麼什麼樣的裝置可以能擁有如此高效能的收發能力呢?答案就是,致遠電子最新發布八通道CANFD卡——USBCANFD-800U。

USBCANFD-800U採用創新型的ARM+FPGA架構,使得多路CANFD同時實現高效能收發。即使在1M/5M波特率下,也能夠輕鬆實現滿載收發不丟幀。

此外,其還具有硬體採集CAN匯流排負載、微秒級別的收發報文時間戳、微秒級別的定時傳送精度等一系列特性,以滿足使用者的高階需求。

「ZLG開發者社群」CANFD每秒最多可以傳送多少幀報文?

ZLG官方商城:https://sale。zlg。cn/

ZLG開發者社群:https://developer。zlg。cn/

更多詳細產品資訊、技術乾貨,請關注微信公眾號“ZLG致遠電子”。