在英創公司嵌入式主板產品中,高端的335x主板系列及低端的ESM9287主板均可支持2路CAN總線標準接口。本文提供CE平臺的EM3352和EM9287的CAN接口的數據接收的性能情況,供客戶在開發應用程序時參考。
測試條件:
1、由一張獨立的Linux平臺的主板發送數據,模擬CAN總線環境。數據發送速率由示波器標定確認。發送的數據幀中包含當前發送數據幀的累積計數值。
2、在CE平臺運行的測試程序采用VC/C++編寫。接收線程以最快速度讀取底層CAN驅動已接收到的數據包,并提供接收數據包統計,并與數據幀的計數值比較。
EM3352(WEC7)測試結果:
CAN Bit Rate | CAN總線幀速 | 丟包情況 | 其他說明 |
1Mbps | 2000幀/s | 無 | 此時CPU負載率為17% |
1Mbps | 2000幀/s | 無 | 遠程桌面進程使CPU負載率至37% |
1Mbps | 5000幀/s | 有 | 此時CPU負載率至90% |
在5000幀/s的測試中,當幀速返回2000幀/s,則丟包則消失,CPU負載率恢復正常。過程中系統不會死機。
EM9287(CE6.0)測試結果:
CAN Bit Rate | CAN總線幀速 | 丟包情況 | 其他說明 |
1Mbps | 1000幀/s | 無 | 連續監測320000幀數據 |
500kbps | 1000幀/s | 無 | 連續監測720000幀數據 |
CE平臺的CAN驅動程序,至少設置了能緩沖256幀數據的buffer,對1Mbps波特率按每幀數據160us(實測值)計算,則內部緩沖區可至少保存40ms的數據。換句話說,上層應用程序需在40ms內把驅動程序已接收的數據全部取出,這樣才能保證不丟包。典型的應用程序讀取數據調用如下:
//一次讀取盡可能多的數據幀
BOOL rc = ReadFile(hCAN, // “CAN#:”Handle
pRxBuffer, // 足夠大的接收buffer
sizeof(CAN_MESSAGE)*MAX_ARRAY, // MAX_ARRAY=256
&dwLen, // 實際讀到的字節數
NULL);
為了盡快讀出所有緩沖在驅動程序中的數據,最好是使用一個盡可能大的Buffer,然后通過返回的dwLen值來判斷本次調用所讀取的數據幀數。有些應用采用每次ReadFile讀取一幀數據,然后循環直至讀完所有數據也是可以的,只是效率要比一次性讀完的方式稍低一些。
-
Linux
+關注
關注
87文章
11342瀏覽量
210147 -
嵌入式主板
+關注
關注
7文章
6086瀏覽量
35529
發布評論請先 登錄
相關推薦
評論