基于uclinux 的CAN總線嵌入式驅動編程
1 引言
早期應用于八位單片機軟件設計的嵌入式系統(tǒng)主要為前后臺系統(tǒng)(或超循環(huán)系統(tǒng)),程序大約在幾千行以內,由兩部分組成,即其應用程序是一個無限的循環(huán),循環(huán)中調用函數完成相應的操作,屬于后臺行為;其中斷服務程序處理異步事件,屬于前臺行為.隨著嵌入式系統(tǒng)功能越來越龐雜,如友好的人機界面、網絡化、遠程監(jiān)控等.各種任務的優(yōu)先級不同,傳統(tǒng)的設計方法無法完成,程序長達數萬行,程序員必須同繁瑣的底層硬件打交道,這樣效率低下.現代電子技術的發(fā)展為嵌入式微處理器提供了更多的外設,通用的如串口、并口、以太網口、現場總線、USB口等.基于免費自由軟件Linux發(fā)展而來的嵌入式系統(tǒng)uclinux,是一種免費的嵌入式操作系統(tǒng).uclinux系統(tǒng)具有內核小、效率高、源碼開放、性能穩(wěn)定、大量的開發(fā)工具、良好的開發(fā)環(huán)境等特點,并且各種應用程序豐富,是進行嵌入式系統(tǒng)開發(fā)的最優(yōu)秀工具之一.
2 uclinux操作系統(tǒng)簡介
uclinux 系統(tǒng)主要由用戶進程、系統(tǒng)調用接口、uclinux 內核、硬件控制器等四部分組成.用戶進程是用戶根據自己的設計和功能要求開發(fā)的應用程序,通過調用系統(tǒng)的功能函數來實現系統(tǒng)功能;系統(tǒng)調用接口通過系統(tǒng)調用實現用戶與系統(tǒng)內核的接口,這些調用和服務也可以看成是系統(tǒng)內核的一部分;uclinux 內核是操作系統(tǒng)的靈魂,它抽象了許多硬件細節(jié),將所有的硬件抽象成統(tǒng)一的虛擬接口,使程序可以以一種統(tǒng)一的方式進行數據處理,它主要包括基于優(yōu)先級的進程調度、內存管理、文件系統(tǒng)、網絡接口、進程間通訊等五部分;硬件控制器則包含了系統(tǒng)需要的所有可能的物理設備.以上四個部分之間的每個子系統(tǒng)都只能跟鄰近的系統(tǒng)進行通信。
uclinux 的設備管理系統(tǒng)是嵌入式操作系統(tǒng)的重要組成部分,它可以分為:下層、與設備相關的,即所謂的設備驅動程序,直接與相應的設備打交道,并向上提供一組訪問接口;以及上層、與設備無關,根據輸入輸出請求,通過特定設備驅動提供的接口,與設備進行通信.如通用的串口、網卡等驅動程序在uclinux 中都可以找到.
3 uclinux驅動編程原理
uclinux嵌入式系統(tǒng)不能象Linux一樣動態(tài)加載驅動程序模塊,而只能同內核一起編譯,與應用程序、其他驅動程序一起固化到可擦寫的Flash上,驅動程序長駐內存,是靜態(tài)驅動程序.uclinux系統(tǒng)根據設備性質的不同,將設備分為四種類型:字符設備(char)、塊設備(block)、網絡接口( net )和其他設備驅動程序模塊.在下載的uclinux源代碼包中,可以在uclinux/linux/drivers目錄下面看到通用設備如char,block, net, cdrom, scsi, sound等.系統(tǒng)對于每個設備都對應一個主設備號和一個次設備號,不同的設備可以對應相同的主設備號,應用程序訪問設備通過不同的次設備號來識別和區(qū)別設備.在Linux系統(tǒng)/dev目錄下通過輸入ls -l命令可以查到系統(tǒng)已注冊的設備,因此編寫新的驅動程序時必須向系統(tǒng)注冊
該設備.在uclinux系統(tǒng)中,通過register_chrdev函數實現注冊.
uclinux系統(tǒng)將所有硬件抽象成虛擬的文件系統(tǒng),所有的字符設備、塊設備都支持文件操作接口,因此可以對這種虛擬的設備文件系統(tǒng)進行文件操作.通常對設備文件進行的操作有open、read、write、release等,即打開、讀、寫、釋放文件.每一個設備驅動程序實質上是用來完成特定任務的一組函數集. 驅動程序擁有一個稱為fileoperation 的數據結構,其中包含指向驅動程序內部大多數函數的指針.引導系統(tǒng)時,內核調用每一個驅動程序的初始化函數,將驅動程序的主設備號以及程序內部的函數地址結構的指針傳輸給內核.這樣,內核就能通過設備驅動程序的主設備號索引訪問驅動程序內部的子程序,完成打開、讀、寫等操作.程序員經常面臨的一項工作就是為系統(tǒng)的新設備編寫驅動程序.
在現代控制系統(tǒng)中,為了便于數據通訊,在底層常采用現場總線,目前CAN總線廣泛應用于過程工業(yè)、機械工業(yè)、紡織機械、農用機械、機器人、數控機床、醫(yī)療器械及傳感器等領域,下面介紹CAN總線應用于嵌入式系統(tǒng)的驅動編程.
4 CAN 總線的性能特點
CAN(Controller Area Network)即控制器局域網絡.CAN 總線目前已形成國際標準 version2.0.該技術規(guī)范包括A 和B 兩部分.2.0A 給出了CAN 報文標準格式,而2.0B 給了出廠標準和擴展兩種格式.CAN 總線是應用最廣泛的現場總線之一,CAN為多主方式工作,網絡上任一節(jié)點均可在任意時刻主動地向網絡上其他節(jié)點發(fā)送信息,而不分主從,通信方式靈活,且無需站地址等節(jié)點信息;CAN 網絡上的節(jié)點信息分成不同的優(yōu)先級,可滿足不同的實時要求;CAN 采用非破壞性總線仲裁技術,當多個節(jié)點同時向總線發(fā)送信息時,優(yōu)先級較低的節(jié)點會主動地退出發(fā)送,而最高優(yōu)先級的節(jié)點可不受影響地繼續(xù)傳輸數據;CAN 只需通過報文濾波即可實現點對點、一點對多點及全局廣播等幾種方式傳送接收數據,無需專門的“調度”,CAN 的直接通信距離最遠可達10km(速率5kbps 以下);通信速率最高可達1Mbps(此時通信距離最長為40m).CAN 上的節(jié)點數主要取決于總線驅動電路,目前可達110個;采用短幀結構,傳輸時間短,受干擾概率低,具有極好的檢錯效果;CAN 的通信介質可為雙絞線、同軸電纜或光纖等.CAN 總線的數據通信具有突出的可靠性、實時性和靈活性.
評論