999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Linux平臺的CAN-FD技術探索

2019-09-10 07:22:44彭國文陳劍棟張林
現(xiàn)代信息科技 2019年16期

彭國文 陳劍棟 張林

摘 ?要:CAN-FD是由Bosch主導開發(fā)的新一代總線技術,它在傳統(tǒng)的CAN2.0的基礎上提高了總線網(wǎng)絡通信帶寬和數(shù)據(jù)吞吐量,將廣泛用于替代傳統(tǒng)的CAN2.0總線網(wǎng)絡。目前越來越多運行Linux操作系統(tǒng)的ARM處理器配置了CANFD控制器,因此對Linux平臺的CAN-FD技術進行探索至關重要。本文將從CAN-FD技術與傳統(tǒng)CAN2.0的總線的異同出發(fā),介紹Linux平臺下CANFD技術的配置細節(jié),及SocketCAN編程接口。

關鍵詞:總線;CAN-FD;Linux;SocketCAN

中圖分類號:TP393;TP273 ? ? ?文獻標識碼:A 文章編號:2096-4706(2019)16-0059-03

Abstract:CAN-FD is a new generation bus technology led by Bosch,which improves the communication bandwidth and data throughput of the bus network on the basis of the traditional CAN2.0,and will be widely used to replace the traditional CAN2.0 bus network. At present,more and more ARM processors running Linux operating system are equipped with CAN-FD controller,so it is very important to explore the CANFD technology of Linux platform. This paper will start from the similarities and differences between CAN-FD technology and traditional CAN2.0 bus,introduce the configuration details of CAN-FD technology under Linux platform,and SocketCAN programming interface.

Keywords:bus;CAN-FD;Linux;SocketCAN

0 ?引 ?言

隨著當今工業(yè)的發(fā)展,尤其是在CAN總線運用較多的汽車領域,總線通訊的數(shù)據(jù)量越來越大,但由于傳統(tǒng)CAN總線最高傳輸速度為1Mbit/s,這就使得CAN總線在傳輸速率和帶寬方面越來越力不從心。為了滿足日益增長的高帶寬需求,CAN-FD應運而生。CAN-FD(CAN with Flexible Data-Rate)繼承了CAN總線的主要特征,提高了CAN總線得到網(wǎng)絡通信帶寬,改善了錯誤幀漏檢率,同時可以保持網(wǎng)絡系統(tǒng)大部分軟硬件,特別是物理層不變。目前越來越多高端處理器攜帶CAN-FD控制器,Linux作為廣泛使用的操作系統(tǒng),對新出現(xiàn)的高端處理器有很好的平臺支持。Linux自3.6版本內(nèi)核起引入了對CAN-FD的支持,這為擁有CAN-FD接口的新設備研發(fā)帶來很大的便利。本文將先介紹CAN-FD技術,通過與傳統(tǒng)的CAN2.0進行對比,可以清晰地了解CAN-FD的技術優(yōu)勢,接著介紹Linux平臺的CAN-FD總線配置細節(jié)、測試工具及應用程序開發(fā)流程。

1 ?CAN-FD技術簡介

CAN-FD是由Bosch公司于2012年發(fā)布的新一代總線技術,CAN-FD繼承了傳統(tǒng)CAN總線的絕大多數(shù)特性,如同樣的物理層、雙線串行通訊協(xié)議、分布式實時控制、可靠的錯誤處理和檢測機制等。2015年6月30日,國際標準化組織(ISO)已經(jīng)正式認可CAN-FD技術,并通過了ISO 11898-1作為CAN-FD的國際標準草案。與傳統(tǒng)的CAN相比,CAN-FD主要升級了以下幾方面。

1.1 ?更高的傳輸波特率

CAN-FD支持數(shù)據(jù)段選擇高波特率進行傳輸。它可將原CAN總線控制場中的BRS位(位速率轉(zhuǎn)換開關)到ACK場(總線確認場)之前(含CRC,即循環(huán)冗余校驗分界符,主要包含數(shù)據(jù)段部分)的位采用最高達5M的可變速率傳輸,其余的仲裁段部分保留為原CAN總線速率。這兩種速率各有一套位時間定義寄存器,使用時須配置仲裁段波特率及數(shù)據(jù)段波特率。

1.2 ?更高效的數(shù)據(jù)段

傳統(tǒng)CAN2.0總線僅支持DLC(數(shù)據(jù)場長度)最大為8個字節(jié)的數(shù)據(jù)場,而CAN-FD對數(shù)據(jù)場的長度做了很大的擴充,DLC最大支持64個字節(jié),在DLC小于等于8字節(jié)時與原CAN2.0總線是一樣的,大于8字節(jié)時則有一個非線性的增長。CAN-FD可支持的DLC有:0~8、12、16、24、32、48、64。

1.3 ?更可靠的CRC校驗

在傳統(tǒng)的CAN2.0總線中,由于填充規(guī)則對CRC產(chǎn)生干擾,造成錯幀漏檢率未達到設計意圖。CAN-FD對CRC算法做了升級,將填充位加入多項式的運算,主要作為格式檢查??紤]數(shù)據(jù)長度變化區(qū)間很大,CRC也會根據(jù)區(qū)間生成兩種校驗算法,當幀長小于210位時,使用CRC_17位算法,當幀長大于210位、小于1023位時,使用CRC_21位算法。

2 ?Linux系統(tǒng)CAN-FD操作

Linux系統(tǒng)自3.6版本后引入CAN-FD的支持,用戶可以通過uname -r命令查看當前內(nèi)核版本以確定是否已支持CAN-FD。

2.1 ?接口配置

與傳統(tǒng)CAN接口配置類似,Linux系統(tǒng)中CAN-FD同樣采用ip命令對接口進行配置,ip命令在傳統(tǒng)CAN接口的基礎上為CAN-FD接口增加了多個選項,常見選項及含義說明如表1所示。

以下示例用于設置CAN-FD控制器采用500K仲裁波特率和4M的數(shù)據(jù)波特率:

$ ip link set can0 up type can bitrate 500000 sample-point 0.75dbitrate4000000 dsample-point 0.8 fd on

設置后可通過以下命令查看控制器的狀態(tài):

$ ip-details link show can0

輸出狀態(tài)中包含了控制器狀態(tài)、仲裁段波特率、數(shù)據(jù)段波特率及各類錯誤計數(shù)。

2.2 ?CAN-FD測試工具包

can-utils是Linux Socket CAN子系統(tǒng)提供的一個用戶層工具包,它由多個實用程序組成,為CAN/CAN-FD網(wǎng)絡的測試提供便利,can-utils常用測試程序如表2所示。

candump命令可以用來接收、過濾CAN、CAN-FD報文,輸出方式可以選擇輸出到標準輸出或文件。candump的默認方式為輸出到標準輸出,如果candump啟動時攜帶-l參數(shù),數(shù)據(jù)將以文件方式保存至當前目錄,文件名格式為candump-YYYY-MM-DD_HHMMSS.log。以下命令演示了接收can0的數(shù)據(jù)并保存至文件的使用方法:

candump -l can0

cansend命令用于發(fā)送單幀CAN/CAN-FD報文,該命令對發(fā)送CAN幀、CAN-FD幀、遠程幀有不同的格式要求,以下命令演示發(fā)送各種類型數(shù)據(jù)幀。

cansend can0 00F#00.11.22.33 ? ? ? # 發(fā)送標準幀,幀ID為3個16進制字符

cansend can0 001234EF#00.11.22.33.44.55.66.77 ? ? ? # 發(fā)送擴展幀,幀ID為8個16進制字符

cansend can0 00F#R3 ? ? ? ? ? ?# 發(fā)送標準遠程幀,數(shù)據(jù)為3個字節(jié)

cansend can0 00F##0.00.11.22.33.44.55.66 ? ?# 發(fā)送CAN-FD標準幀,#后0為CAN-FD標識位

cansend can0 00F##0.00.11.22.33.44.55.66.77.88.99.AA.BB ? #發(fā)送CAN-FD數(shù)據(jù)幀,數(shù)據(jù)段位12個字節(jié)。

canplayer用于回放一個數(shù)據(jù)文件,數(shù)據(jù)文件一般由candump生成,canplayer程序運行時會根據(jù)數(shù)據(jù)文件的接口設備、幀數(shù)據(jù)、間隔進行數(shù)據(jù)發(fā)送,通過以下命令演示canplayer的使用方法:

canplayer -I candump-2018-12-16_034811.log

cangen命令是CAN/CAN-FD總線流量測試工具,它可以設置發(fā)送間隔、數(shù)據(jù)幀ID增長規(guī)則、數(shù)據(jù)增長等參數(shù),實現(xiàn)對總線流量多維測試的目的。以下命令演示cangen各種參數(shù)的用法:

cangen can0 -v -v ? ? ? #默認間隔,發(fā)送隨機標準幀

cangen can0 -g 4 -I 42A -L 1 -D i -v -v ? ?#間隔為4ms,發(fā)送幀42A,長度為1,數(shù)據(jù)遞增

cangen can0 -g 0 -i -x ? ? ? #總線滿載,并忽略寫-ENOBUFS錯誤。

3 ?Linux系統(tǒng)CAN-FD編程

Linux內(nèi)核在2.6.xx版本引入SocketCAN子系統(tǒng),由于當時CAN-FD還未正式發(fā)布,初期版本的SocketCAN子系統(tǒng)只支持傳統(tǒng)CAN控制器,在后續(xù)的3.6版本內(nèi)核中,SocketCAN子系統(tǒng)在原來的基礎上加入了CAN-FD的支持。初期版本SocketCAN中使用struct can_frame結(jié)構(gòu)體來表示傳統(tǒng)CAN幀,而由于CAN-FD的數(shù)據(jù)段長度最多可支持64個字節(jié),傳統(tǒng)的CAN幀結(jié)構(gòu)體struct can_frame已不再適合CAN-FD的使用。因此在新版本SocketCAN中為CAN-FD幀建立的新的結(jié)構(gòu)體struct canfd_frame。

SocketCAN接口編程跟傳統(tǒng)網(wǎng)絡Socket編程很類似,需要先建立套接字,然后根據(jù)接口名稱構(gòu)建接口地址并進行綁定,完成套接字建立后,應用程序可以通過使用帶SIOCGIFMTU參數(shù)的ioctl的系統(tǒng)調(diào)用查詢該控制器支持的最大MTU值來確定控制器CAN-FD發(fā)送接收能力,如果最大MTU值為CANFD_MTU,表示當前控制器具備CAN-FD功能,否則只為傳統(tǒng)CAN控制器。

套接字完成bind操作后,即可進行讀寫操作。在CAN- FD模式下進行讀操作時,控制器既可以接收傳統(tǒng)CAN幀,也可以接收CAN-FD幀,這需要讀操作在返回數(shù)據(jù)時進行判斷,如果讀出的字節(jié)數(shù)等于CANFD_MTU,表示當前讀取幀為CAN-FD幀,如果讀出的字節(jié)數(shù)不等于CAN_MTU,表示當前讀取的幀為傳統(tǒng)CAN幀。發(fā)送操作則根據(jù)寫入長度來判斷操作幀為傳統(tǒng)CAN幀還是CAN-FD幀,當寫入長度為CANFD_MTU時,表示寫入幀為CAN-FD幀,否則為傳統(tǒng)CAN幀。CAN-FD的SocketCAN編程流程如圖1所示。

4 ?結(jié) ?論

CAN-FD技術是傳統(tǒng)CAN2.0總線的最新升級,它能在保持物理層不變的情況下,極大地提高總線帶寬,保證數(shù)據(jù)的實時性。本文針對CAN-FD新技術在Linux平臺下如何進行配置和測試進行介紹,并著重介紹了CAN-FD應用開發(fā)的流程。

參考文獻:

[1] 周立功.項目驅(qū)動——CAN-bus現(xiàn)場總線基礎教程 [M].北京:北京航空航天大學出版社,2012.

[2] 周立功.嵌入式Linux開發(fā)教程(上冊) [M].北京:北京航空航天大學出版社,2016.

[3] 周立功.嵌入式Linux開發(fā)教程(下冊) [M].北京:北京航空航天大學出版社,2016.

作者簡介:彭國文(1986-),男,漢族,廣東興寧人,軟件工程師,工學學士,研究方向:工業(yè)通訊。

主站蜘蛛池模板: 国产欧美日韩va另类在线播放| 五月婷婷欧美| 国产特一级毛片| 国产无人区一区二区三区| 好吊色国产欧美日韩免费观看| 波多野结衣无码视频在线观看| 亚洲v日韩v欧美在线观看| 四虎亚洲国产成人久久精品| 国产成人午夜福利免费无码r| 亚洲丝袜中文字幕| 一级毛片免费观看久| 国产精品成人一区二区| www.狠狠| 免费一级毛片不卡在线播放| 伊人久久久久久久| 欧美日韩亚洲综合在线观看| 国产成人精品免费av| 欧美日韩导航| 九色综合伊人久久富二代| 国内精品小视频福利网址| 亚洲天堂视频在线免费观看| 手机在线免费毛片| 免费一级全黄少妇性色生活片| 久久性视频| 无码高潮喷水在线观看| 99视频在线精品免费观看6| 欧美性猛交xxxx乱大交极品| 91小视频版在线观看www| 欧美一区二区三区香蕉视| 亚国产欧美在线人成| 日韩小视频网站hq| 伊人久久青草青青综合| 精品欧美视频| 伊人久久影视| 毛片在线播放a| 青青草原国产av福利网站| 亚洲精品视频在线观看视频| 久久精品人人做人人综合试看| 一级毛片在线直接观看| 一级香蕉人体视频| 国产一级毛片yw| 国产一线在线| 99在线小视频| 99re66精品视频在线观看| 国产成人无码AV在线播放动漫| 国产精品久久久久无码网站| 成人精品区| 久草视频一区| 久久久亚洲色| 久久精品国产电影| 夜夜操天天摸| 国产亚洲欧美日韩在线一区| 波多野结衣一区二区三区四区视频| 亚洲不卡av中文在线| 国产精品青青| 久久网综合| 香港一级毛片免费看| 青草国产在线视频| 欧美成人免费午夜全| 91最新精品视频发布页| 国国产a国产片免费麻豆| 色悠久久久久久久综合网伊人| 2020精品极品国产色在线观看 | 欧美三级视频在线播放| 国产成人精品一区二区免费看京| 伊人网址在线| 亚州AV秘 一区二区三区| 日本亚洲成高清一区二区三区| 久久精品人人做人人综合试看| 成人免费一级片| 福利片91| 欧美日韩成人在线观看| 永久免费av网站可以直接看的| 欧美中文字幕在线播放| 免费a级毛片视频| 91久久偷偷做嫩草影院电| 亚洲无线国产观看| 亚洲天堂久久新| 国产jizzjizz视频| 欧美国产中文| 亚洲国产成人自拍| 日韩av高清无码一区二区三区|