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

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

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

彭國文 陳劍棟 張林

摘 ?要:CAN-FD是由Bosch主導開發的新一代總線技術,它在傳統的CAN2.0的基礎上提高了總線網絡通信帶寬和數據吞吐量,將廣泛用于替代傳統的CAN2.0總線網絡。目前越來越多運行Linux操作系統的ARM處理器配置了CANFD控制器,因此對Linux平臺的CAN-FD技術進行探索至關重要。本文將從CAN-FD技術與傳統CAN2.0的總線的異同出發,介紹Linux平臺下CANFD技術的配置細節,及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 ?引 ?言

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

1 ?CAN-FD技術簡介

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

1.1 ?更高的傳輸波特率

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

1.2 ?更高效的數據段

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

1.3 ?更可靠的CRC校驗

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

2 ?Linux系統CAN-FD操作

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

2.1 ?接口配置

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

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

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

設置后可通過以下命令查看控制器的狀態:

$ ip-details link show can0

輸出狀態中包含了控制器狀態、仲裁段波特率、數據段波特率及各類錯誤計數。

2.2 ?CAN-FD測試工具包

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

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

candump -l can0

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

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

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

cansend can0 00F#R3 ? ? ? ? ? ?# 發送標準遠程幀,數據為3個字節

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

cansend can0 00F##0.00.11.22.33.44.55.66.77.88.99.AA.BB ? #發送CAN-FD數據幀,數據段位12個字節。

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

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

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

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

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

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

3 ?Linux系統CAN-FD編程

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

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

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

4 ?結 ?論

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

參考文獻:

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

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

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

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

主站蜘蛛池模板: 一级看片免费视频| 亚洲自拍另类| 大陆精大陆国产国语精品1024| 亚洲综合激情另类专区| 四虎免费视频网站| 久久久久亚洲Av片无码观看| 国产精品jizz在线观看软件| 青青草一区| 久久亚洲综合伊人| 99精品视频在线观看免费播放| 国产女主播一区| 一级毛片不卡片免费观看| 亚洲综合色婷婷中文字幕| 国产在线视频自拍| 色色中文字幕| 制服丝袜亚洲| 国产精品欧美亚洲韩国日本不卡| 婷婷亚洲综合五月天在线| 97视频精品全国在线观看| 精品人妻系列无码专区久久| 99草精品视频| 亚洲日韩在线满18点击进入| 色视频国产| 精品无码国产一区二区三区AV| 女人18一级毛片免费观看| 久久九九热视频| 99久久精品免费看国产电影| 色综合综合网| 浮力影院国产第一页| 婷婷开心中文字幕| 国产精品久久久精品三级| 国产福利免费在线观看| 久久综合色天堂av| 成年A级毛片| 欧美精品亚洲日韩a| 小13箩利洗澡无码视频免费网站| 日韩国产精品无码一区二区三区 | 国产乱码精品一区二区三区中文 | 中国国产A一级毛片| 国产99久久亚洲综合精品西瓜tv| 国产永久免费视频m3u8| 国产簧片免费在线播放| 久久久精品久久久久三级| 日韩久久精品无码aV| 亚洲色成人www在线观看| 五月天婷婷网亚洲综合在线| 免费啪啪网址| 欧美日韩第二页| 日韩中文无码av超清| 亚洲日韩欧美在线观看| 不卡网亚洲无码| 青青草原国产av福利网站| 日韩第一页在线| 91福利片| 成人久久精品一区二区三区| 91小视频在线| 91亚洲视频下载| 国产成人精品午夜视频'| 69综合网| 国产午夜无码片在线观看网站| 97se亚洲综合在线| 99久久精彩视频| 香蕉精品在线| 伊人激情综合| 国产精品无码AV片在线观看播放| 最新无码专区超级碰碰碰| 国内精自视频品线一二区| 精品无码国产一区二区三区AV| 久久人人爽人人爽人人片aV东京热| 久精品色妇丰满人妻| 欧美a√在线| 伊人成人在线| 第一页亚洲| 亚洲制服丝袜第一页| 国产乱人伦偷精品视频AAA| 精品少妇人妻一区二区| 特级aaaaaaaaa毛片免费视频| 国产一区二区福利| 激情综合网址| 午夜丁香婷婷| 亚洲欧美自拍视频| 国产一区二区免费播放|