您現在的位置是:首頁 > 動漫首頁動漫
「ZLG開發者社群」CANFD每秒最多可以傳送多少幀報文?
1幀是多少位元組
我們知道CANFD比CAN擁有更長的資料長度(最長64位元組),更高的波特率(8Mbps甚至更高)。那麼波特率更高,資料更長的CANFD,一秒鐘最高可以傳送多少幀CANFD報文呢?
我們知道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或0000 0000,也就是所有位均一致,若此時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匯流排負載、微秒級別的收發報文時間戳、微秒級別的定時傳送精度等一系列特性,以滿足使用者的高階需求。
ZLG官方商城:https://sale。zlg。cn/
ZLG開發者社群:https://developer。zlg。cn/
更多詳細產品資訊、技術乾貨,請關注微信公眾號“ZLG致遠電子”。