CAN通信卡的Linux設(shè)備驅(qū)動程序設(shè)計實現(xiàn)
發(fā)布時間:2007/8/29 0:00:00 訪問次數(shù):506
摘要:介紹了Linux下設(shè)備驅(qū)動程序的結(jié)構(gòu),描述了CAN通信卡設(shè)備驅(qū)動程序的軟件框架以及如何將CAN設(shè)備驅(qū)動程序加入到Linux系統(tǒng)內(nèi)核中。討論了具體實現(xiàn)中為了提高通信效率和通信能力,改進(jìn)設(shè)備驅(qū)動程序的緩沖區(qū)管理以及利用Linux的特點合理設(shè)計中斷處理程序。
關(guān)鍵詞:Linux操作系統(tǒng) 設(shè)備驅(qū)動程序 CAN通信卡 中斷處理程序
目前,許多工業(yè)現(xiàn)場如電力系統(tǒng)、化工系統(tǒng)等大量使用控制器局部網(wǎng)(CAN-Controller Area Network)現(xiàn)場總線網(wǎng)絡(luò),CAN通信卡作為計算機的外設(shè)將計算機接入CAN網(wǎng)絡(luò)。市場上有不少CAN通信卡,但基本上都不帶Linux驅(qū)動程序,當(dāng)需要在Linux下使用CAN通信卡設(shè)備時,需自己開發(fā)Linux的驅(qū)動程序。開發(fā)Linux驅(qū)動程序不但要求程序員要非常熟悉Linux系統(tǒng),而且要熟悉Linux驅(qū)動程序開發(fā)的規(guī)范。本文將詳細(xì)介紹CAN通信卡的Linux驅(qū)動設(shè)備程序的設(shè)計和實現(xiàn)。
1 CAN通信卡的Linux設(shè)備驅(qū)動程序結(jié)構(gòu)
Linux系統(tǒng)內(nèi)核通過設(shè)備驅(qū)動程序與外圍設(shè)備進(jìn)行交互,設(shè)備驅(qū)動程序是Linux內(nèi)核的一部分,它是一組數(shù)據(jù)結(jié)構(gòu)和函數(shù),這些數(shù)據(jù)結(jié)構(gòu)和函數(shù)通過定義的接口控制一個或多個設(shè)備。對應(yīng)用程序而言,設(shè)備驅(qū)動程序隱藏了設(shè)備的具體細(xì)節(jié),對各種不同設(shè)備提供一致的接口,一般來說是把設(shè)備射為一個特殊的設(shè)備文件,用戶程序可以象對普通文件一樣對此設(shè)備文件進(jìn)行操作。
Linux將每個設(shè)備看作一個文件,即可以像對待文件那樣使用read、write等系統(tǒng)調(diào)用進(jìn)行讀寫。Linux的設(shè)備文件分為兩類:一是字符設(shè)備,只能對該類設(shè)備進(jìn)行順序讀寫,對外提供字節(jié)流方式的操作;二是塊設(shè)備,可以對該類設(shè)備進(jìn)行隨機訪問,一般是磁盤設(shè)備等大容量存儲設(shè)備。CAN通信卡設(shè)備屬于字符型設(shè)備。
對設(shè)備的訪問是由設(shè)備驅(qū)動程序提供的。Linux的設(shè)備驅(qū)動程序可以用模塊的方式加載入內(nèi)核,設(shè)備驅(qū)動程序與Linux系統(tǒng)的關(guān)系如圖1所示。
1.1 CAN通信卡設(shè)備的特點
控制器局部網(wǎng)(CAN)屬于現(xiàn)場總線的范疇,它是一種有效支持分布式控制或?qū)崟r控制的串行通信網(wǎng)絡(luò)。由于其性能優(yōu)異、價格低兼,很快被推廣到工業(yè)測控現(xiàn)場。
CAN通信卡硬件實現(xiàn)CAN定義的物理層和數(shù)據(jù)鏈路層功能,收發(fā)報文中數(shù)據(jù)長度為0~8個字節(jié),有2032個報文標(biāo)識符。工作時通過報文標(biāo)識符確定總線訪問優(yōu)先權(quán),高優(yōu)先級報文具有低延遲時間,數(shù)據(jù)傳送速率可編程(最高為1Mbps)。發(fā)送期間若丟二氧化碳仲裁或由于出錯而破壞的報文可自動重發(fā)。具有成組和廣播報文功能。
當(dāng)CAN通信卡接收到一個報文時,數(shù)據(jù)保存在CAN通信卡上的接收緩存器中,并產(chǎn)生一接收中斷。當(dāng)一個報文被成功發(fā)關(guān)垢,發(fā)送緩沖器可再次被訪問,產(chǎn)生一個發(fā)送中斷信號。CAN通信卡發(fā)送報文,將數(shù)據(jù)送入CAN通信卡上的發(fā)送緩存器中,CAN通信卡將數(shù)據(jù)串行化發(fā)到CAN總線上。
1.2 CAN通信卡設(shè)備驅(qū)動程序的任務(wù)
由于CAN一幀的數(shù)據(jù)長度最大為8個字節(jié),可以用多幀的Hilon A協(xié)議來使CAN傳輸數(shù)據(jù)任意長。CAN通信卡驅(qū)動程序主要完成按照Hilon A協(xié)議解包接收和打包發(fā)送任務(wù),并要對接收的多幀進(jìn)行管理。
CAN通信卡驅(qū)動程序應(yīng)該完成以下任務(wù):
(1)為應(yīng)用程序提供通過CAN卡發(fā)送和接收任意長度數(shù)據(jù)的能力;
(2)為應(yīng)用程序提供設(shè)備CAN卡上CAN控制器運行參數(shù)的能力;
(3)以阻塞或非阻塞方式讀寫CAN設(shè)備文件;
摘要:介紹了Linux下設(shè)備驅(qū)動程序的結(jié)構(gòu),描述了CAN通信卡設(shè)備驅(qū)動程序的軟件框架以及如何將CAN設(shè)備驅(qū)動程序加入到Linux系統(tǒng)內(nèi)核中。討論了具體實現(xiàn)中為了提高通信效率和通信能力,改進(jìn)設(shè)備驅(qū)動程序的緩沖區(qū)管理以及利用Linux的特點合理設(shè)計中斷處理程序。
關(guān)鍵詞:Linux操作系統(tǒng) 設(shè)備驅(qū)動程序 CAN通信卡 中斷處理程序
目前,許多工業(yè)現(xiàn)場如電力系統(tǒng)、化工系統(tǒng)等大量使用控制器局部網(wǎng)(CAN-Controller Area Network)現(xiàn)場總線網(wǎng)絡(luò),CAN通信卡作為計算機的外設(shè)將計算機接入CAN網(wǎng)絡(luò)。市場上有不少CAN通信卡,但基本上都不帶Linux驅(qū)動程序,當(dāng)需要在Linux下使用CAN通信卡設(shè)備時,需自己開發(fā)Linux的驅(qū)動程序。開發(fā)Linux驅(qū)動程序不但要求程序員要非常熟悉Linux系統(tǒng),而且要熟悉Linux驅(qū)動程序開發(fā)的規(guī)范。本文將詳細(xì)介紹CAN通信卡的Linux驅(qū)動設(shè)備程序的設(shè)計和實現(xiàn)。
1 CAN通信卡的Linux設(shè)備驅(qū)動程序結(jié)構(gòu)
Linux系統(tǒng)內(nèi)核通過設(shè)備驅(qū)動程序與外圍設(shè)備進(jìn)行交互,設(shè)備驅(qū)動程序是Linux內(nèi)核的一部分,它是一組數(shù)據(jù)結(jié)構(gòu)和函數(shù),這些數(shù)據(jù)結(jié)構(gòu)和函數(shù)通過定義的接口控制一個或多個設(shè)備。對應(yīng)用程序而言,設(shè)備驅(qū)動程序隱藏了設(shè)備的具體細(xì)節(jié),對各種不同設(shè)備提供一致的接口,一般來說是把設(shè)備射為一個特殊的設(shè)備文件,用戶程序可以象對普通文件一樣對此設(shè)備文件進(jìn)行操作。
Linux將每個設(shè)備看作一個文件,即可以像對待文件那樣使用read、write等系統(tǒng)調(diào)用進(jìn)行讀寫。Linux的設(shè)備文件分為兩類:一是字符設(shè)備,只能對該類設(shè)備進(jìn)行順序讀寫,對外提供字節(jié)流方式的操作;二是塊設(shè)備,可以對該類設(shè)備進(jìn)行隨機訪問,一般是磁盤設(shè)備等大容量存儲設(shè)備。CAN通信卡設(shè)備屬于字符型設(shè)備。
對設(shè)備的訪問是由設(shè)備驅(qū)動程序提供的。Linux的設(shè)備驅(qū)動程序可以用模塊的方式加載入內(nèi)核,設(shè)備驅(qū)動程序與Linux系統(tǒng)的關(guān)系如圖1所示。
1.1 CAN通信卡設(shè)備的特點
控制器局部網(wǎng)(CAN)屬于現(xiàn)場總線的范疇,它是一種有效支持分布式控制或?qū)崟r控制的串行通信網(wǎng)絡(luò)。由于其性能優(yōu)異、價格低兼,很快被推廣到工業(yè)測控現(xiàn)場。
CAN通信卡硬件實現(xiàn)CAN定義的物理層和數(shù)據(jù)鏈路層功能,收發(fā)報文中數(shù)據(jù)長度為0~8個字節(jié),有2032個報文標(biāo)識符。工作時通過報文標(biāo)識符確定總線訪問優(yōu)先權(quán),高優(yōu)先級報文具有低延遲時間,數(shù)據(jù)傳送速率可編程(最高為1Mbps)。發(fā)送期間若丟二氧化碳仲裁或由于出錯而破壞的報文可自動重發(fā)。具有成組和廣播報文功能。
當(dāng)CAN通信卡接收到一個報文時,數(shù)據(jù)保存在CAN通信卡上的接收緩存器中,并產(chǎn)生一接收中斷。當(dāng)一個報文被成功發(fā)關(guān)垢,發(fā)送緩沖器可再次被訪問,產(chǎn)生一個發(fā)送中斷信號。CAN通信卡發(fā)送報文,將數(shù)據(jù)送入CAN通信卡上的發(fā)送緩存器中,CAN通信卡將數(shù)據(jù)串行化發(fā)到CAN總線上。
1.2 CAN通信卡設(shè)備驅(qū)動程序的任務(wù)
由于CAN一幀的數(shù)據(jù)長度最大為8個字節(jié),可以用多幀的Hilon A協(xié)議來使CAN傳輸數(shù)據(jù)任意長。CAN通信卡驅(qū)動程序主要完成按照Hilon A協(xié)議解包接收和打包發(fā)送任務(wù),并要對接收的多幀進(jìn)行管理。
CAN通信卡驅(qū)動程序應(yīng)該完成以下任務(wù):
(1)為應(yīng)用程序提供通過CAN卡發(fā)送和接收任意長度數(shù)據(jù)的能力;
(2)為應(yīng)用程序提供設(shè)備CAN卡上CAN控制器運行參數(shù)的能力;
(3)以阻塞或非阻塞方式讀寫CAN設(shè)備文件;
熱門點擊
- 嵌入式系統(tǒng)以太網(wǎng)接口的設(shè)計
- 基于Xtensa LX處理器實現(xiàn)RRC濾波器
- VB環(huán)境下實現(xiàn)PCI設(shè)備底層訪問的兩種方法
- 基于S7600A的嵌入式系統(tǒng)Internet
- 在應(yīng)用系統(tǒng)中嵌入WWW服務(wù)功能的實現(xiàn)方法
- 把網(wǎng)絡(luò)引進(jìn)嵌入式控制系統(tǒng)
- CAN通信卡的Linux設(shè)備驅(qū)動程序設(shè)計實現(xiàn)
推薦技術(shù)資料
- AMOLED顯示驅(qū)動芯片關(guān)鍵技
- CMOS圖像傳感器技術(shù)參數(shù)設(shè)計
- GB300 超級芯片應(yīng)用需求分
- 4NP 工藝NVIDIA Bl
- GB300 芯片、NVL72
- 首個最新高端芯片人工智能服務(wù)器
- 多媒體協(xié)處理器SM501在嵌入式系統(tǒng)中的應(yīng)用
- 基于IEEE802.11b的EPA溫度變送器
- QUICCEngine新引擎推動IP網(wǎng)絡(luò)革新
- SoC面世八年后的產(chǎn)業(yè)機遇
- MPC8xx系列處理器的嵌入式系統(tǒng)電源設(shè)計
- dsPIC及其在交流變頻調(diào)速中的應(yīng)用研究