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