LX800在車載監(jiān)控系統(tǒng)中的應(yīng)用
掃描二維碼
隨時隨地手機看文章
摘要:隨著嵌入式Linux操作系統(tǒng)的迅速發(fā)展,嵌入式Linux已逐漸成為嵌入式操作系統(tǒng)的一個重要分支。介紹了LX800在車載監(jiān)控系統(tǒng)中的應(yīng)用,實現(xiàn)了CAN總線實時數(shù)據(jù)和視頻的顯示和控制。主要闡述了x86系統(tǒng)平臺的硬件總體設(shè)計、PCI9054驅(qū)動的實現(xiàn)及應(yīng)用主程序相關(guān)流程。
關(guān)鍵詞:嵌入式Linux;LX800;PCI9054
引言
嵌入式系統(tǒng)由于體積小、功耗低、可靠性高、可裁減性強、軟硬件集成度高等特點的被廣泛地應(yīng)用于工業(yè)制造、過程控制、通信、儀器、儀表、汽車、船舶、航空、航天、消費類產(chǎn)品等眾多領(lǐng)域。一個完整的嵌入式Linux解決方案應(yīng)包括嵌入式Linux操作系統(tǒng)內(nèi)核、運行環(huán)境、圖形化界面和應(yīng)用軟件等。由于嵌入式設(shè)備的特殊要求,嵌入式Linux解決方案中的內(nèi)核、環(huán)境、GUI等都與標準Linux有很大不同,其主要挑戰(zhàn)是如何在狹小的Flash、ROM和內(nèi)存中,實現(xiàn)高質(zhì)量的任務(wù)實時調(diào)度、圖形化顯示、網(wǎng)絡(luò)通信等功能。本文基于AMD LX800微處理器和Linux操作系統(tǒng)進行車載監(jiān)控系統(tǒng)的設(shè)計。車載監(jiān)控系統(tǒng)是對車輛工作狀態(tài)、運行情況進行顯示、控制并完成人機交互的系統(tǒng),實現(xiàn)系統(tǒng)實時響應(yīng)操作、顯示相關(guān)的機車信息。
1 系統(tǒng)硬件設(shè)計
GeodeLX處理器是AMD公司推出的基于x86體系結(jié)構(gòu)的嵌入式處理器,主要用于工業(yè)控制、移動設(shè)備等領(lǐng)域。GeodeLX處理器支持i586指令集,并且?guī)в蠱MX和AMD“3DNow!”指令集擴展;其CPU頻率在400~500MHz,帶有8級單發(fā)射的指令流水線,64 KB指令L1Cache和64 KB數(shù)據(jù)L1 Cache,128 KB的可配置為指令或數(shù)據(jù)的L2 Cache。處理器內(nèi)部集成了圖形和視頻處理單元,提高了二維圖形和視頻的應(yīng)用加速。
PCI總線即外圍部件互連總線,是一種先進的高性能32/64位地址/數(shù)據(jù)復(fù)用局部總線,可同時支持多組外圍設(shè)備,并且不受制于處理器,為處理器與高速外圍設(shè)備提供了一座溝通的橋梁,提高了數(shù)據(jù)吞吐量(32位最大可達132 MB/s),因此是現(xiàn)在PC領(lǐng)域中很流行的總線。P CI總線具有嚴格的總線規(guī)范,保證了良好的兼容性,符合PCI總線規(guī)范的擴展卡可以插入任何PCI系統(tǒng)可靠地工作。因此,和GeodeLX處理器一起使用的CS5536芯片通過PCI總線組提供南橋的功能,如IDE、USB2.0、Flash、AC97和x86的外圍設(shè)備接口。
為了擴展一些用戶接口,如高速串口、CAN總線接口等,需要將復(fù)雜的PCI總線接口轉(zhuǎn)換為相對簡單的用戶接口。本系統(tǒng)采用PLX公司生產(chǎn)的PCI總線通用接口芯片PLC9054,處理器可以通過PCI總線訪問擴展資源,如CAN總線、液晶屏數(shù)據(jù)線、按鍵高速串口等其他擴展設(shè)備。此款芯片采用先進的PLX數(shù)據(jù)管道結(jié)構(gòu)技術(shù),符合PCIV2.1和V2.2規(guī)范;提供了兩個獨立的可編程DMA控制器;每個通道均支持塊和分散/集中的DMA方式;在PCI總線端支持32位數(shù)據(jù)總線,33 MHz時鐘信號;本地端可以編程實現(xiàn)8/16/32位的數(shù)據(jù)寬度;傳輸速率最高可達132 MB/s;本地總線端時鐘最高可達50 MHz,支持復(fù)用/非復(fù)用的32位地址數(shù)據(jù)。PCI9054提供了PCI、LOCAL、EEPROM總線3個接口,作為一種橋接芯片在PCI總線和LOCAL總線之間提供傳遞消息。
W83627DHG通過LPC接口與CS5536通信,此款LPC接口的I/O芯片除了可以支持傳統(tǒng)的輸入/輸出接口,如鍵盤和鼠標、并口、軟盤口、UART、SPI口等,硬件監(jiān)控針對新一代的CPU,提供符合VRD11.0規(guī)格的CPU電壓偵測功能,并且可經(jīng)由鍵盤任一按鍵或是鼠標將系統(tǒng)由休眠狀態(tài)喚醒。
BIOS實際是一組被固化到電腦中,為電腦提供最基本的硬件控制的程序,它是連通軟件程序和硬件設(shè)備之間的樞紐,負責(zé)響應(yīng)硬件的即時要求,并按軟件對硬件的操作要求執(zhí)行。本設(shè)計BIOS芯片采用LPC Flash可擦寫芯片。
系統(tǒng)的整體硬件結(jié)構(gòu)如圖1所示,系統(tǒng)由處理器、外圍電路及外圍接口設(shè)備組成。外圍電路包括晶振、電源、復(fù)位電路、串口、網(wǎng)口、PCI總線、USB接口、Flash等。
[!--empirenews.page--]
2 系統(tǒng)軟件設(shè)計
Linux采用統(tǒng)一的框架對硬件進行管理,從一個硬件平臺到另一個硬件平臺的改動與上層應(yīng)用無關(guān)。Linux可以隨意地配置,不需要任何許可證或與商家的合作關(guān)系,源代碼可以免費得到,這使得采用Linux作為操作系統(tǒng)不會遇到任何關(guān)于版權(quán)的糾紛。Linux本身內(nèi)置網(wǎng)絡(luò)支持,而目前嵌入式系統(tǒng)對網(wǎng)絡(luò)支持要求越來越高,Linux的高度模塊化使添加部件非常容易。Linux是一個和Unix相似、以內(nèi)核為基礎(chǔ)的、具有完全的內(nèi)存訪問控制、支持大量硬件(包括x86、Alpha、ARM等現(xiàn)有的大部分芯片)等特性的一種通用操作系統(tǒng)。其程序源碼全部公開,任何人可以修改,并在GNU通用公共許可證下發(fā)行。這樣,開發(fā)人員可以對操作系統(tǒng)進行定制裁減,適應(yīng)其特殊需要。其強大的語言編譯器GCC、G++等不但成熟完善,而且使用方便。本論文中基于V2.6.27內(nèi)核通過make menuconfig對內(nèi)核進行部分功能裁減。
軟硬件綜合開發(fā)是嵌入式系統(tǒng)的一大特色,軟件設(shè)計是在緊密聯(lián)系硬件的基礎(chǔ)上來完成的。本文的車載監(jiān)控系統(tǒng)設(shè)計遵循嵌入式軟件的體系結(jié)構(gòu)設(shè)計方法,分為兩個部分:①相關(guān)驅(qū)動的開發(fā),如底層包括擴展的PCI9054驅(qū)動、串口驅(qū)動、CAN驅(qū)動及內(nèi)核自帶的網(wǎng)絡(luò)驅(qū)動、USB、CS5536等設(shè)備驅(qū)動;②應(yīng)用程序的開發(fā),包括顯示監(jiān)控任務(wù)的實現(xiàn)、配置文件讀寫實現(xiàn)等。
2.1 設(shè)備驅(qū)動開發(fā)
底層接口層封裝監(jiān)控顯示軟件與底層通信硬件接口、操作系統(tǒng)交互等部分的代碼,通過定義統(tǒng)一的接口規(guī)范,實現(xiàn)上層軟件不依賴具體的硬件平臺,從而實現(xiàn)軟件易于移植。
作為底層驅(qū)動模塊的基本結(jié)構(gòu)至少必須包含兩個函數(shù):module_init()和module_exit()。第一個函數(shù)是在把模塊加載入內(nèi)核時調(diào)用的;第二個函數(shù)則在刪除該模塊時調(diào)用。module_init()向內(nèi)核注冊模塊所能提供的所有新功能,即可以由應(yīng)用程序使用的新功能。函數(shù)module_ exit()的任務(wù)是清除掉module_init()所做的一切,保證這個模塊被安全地卸載。模塊的調(diào)用情況如圖2所示。下面以PCI9054為代表,描述硬件驅(qū)動設(shè)計過程。
PCI9054驅(qū)動程序主要實現(xiàn)PCI9054設(shè)備的中斷使能屏蔽,PCI9054設(shè)備的中斷處理,PCI9054設(shè)備的掛載、卸載、初始化。
2.1.1 定義和注冊PCI9054設(shè)備
[!--empirenews.page--]
2.1.2 PCI9054_probe()函數(shù)任務(wù)
對于probe驅(qū)動函數(shù),驅(qū)動程序的許多任務(wù)及硬件初始化工作都將在此函數(shù)中完成。它主要完成注冊PCI9054時調(diào)用的函數(shù),完成PCI9054配置信息讀取,取得外設(shè)地址,申請中斷,配置PCI9054的雜項寄存器。探測流程如圖3所示。
2.1.3 pci9054_init_module初始化函數(shù)
主要完成PCI的初始化、注冊PCI設(shè)備、使能PCI中斷等。流程圖如圖4所示。
[!--empirenews.page--]
2.1.4 pci9054_cleanup_module注銷函數(shù)
用于注銷PCI9054設(shè)備及相關(guān)擴展設(shè)備。流程圖如圖5所示。
2.2 應(yīng)用程序的開發(fā)
車載監(jiān)控系統(tǒng)應(yīng)用程序的實現(xiàn)過程主要包括:窗體和各個信息控件的初始化并顯示窗體實現(xiàn)人機交互、對按鍵的響應(yīng)、參數(shù)的存儲、發(fā)送語音消息、圖5 PCI9054設(shè)備的卸載CAN事件數(shù)據(jù)的處理并實時刷新屏上信息顯示當(dāng)前設(shè)備的工作狀態(tài)。其程序流程如圖6所示。
2.3 應(yīng)用程序與設(shè)備驅(qū)動的關(guān)聯(lián)
在Linux系統(tǒng)中,對于一個硬件設(shè)備對應(yīng)的是/dev目錄下的邏輯設(shè)備節(jié)點,這個節(jié)點以文件的形式存在,但它不是普通意義上的文件,是設(shè)備文件,更確切地說,它是設(shè)備節(jié)點。這個節(jié)點是通過mknod命令建立的,其中指定了主設(shè)備號和次設(shè)備號。通常而言,主設(shè)備號表明了對應(yīng)著確定的驅(qū)動程序;次設(shè)備號由內(nèi)核使用,用于正確確定設(shè)備文件所指的設(shè)備。
insmod加載驅(qū)動程序,設(shè)備號是從/proc/devices文件中獲得的,所以通常是有驅(qū)動程序在內(nèi)核中,才有設(shè)備節(jié)點在目錄中。這個設(shè)備號(這里特指主設(shè)備號)的主要作用,就是聲明設(shè)備所使用的驅(qū)動程序。驅(qū)動程序和設(shè)備號是一一對應(yīng)的,當(dāng)你打開一個設(shè)備文件時,操作系統(tǒng)能知道這個設(shè)備所對應(yīng)的驅(qū)動程序的加載。
設(shè)備節(jié)點文件中的file屬性中指明了驅(qū)動程序中fops方法實現(xiàn)的函數(shù)指針。應(yīng)用程序通過使用open、write、read、ioetl等函數(shù)來訪問設(shè)備節(jié)點,進行相應(yīng)的工作。
結(jié)語
LX800微處理器以其豐富的接口、較快的處理速度、穩(wěn)定性及易擴展性而受到嵌入式開發(fā)者的青睞。基于LX800的車載監(jiān)控系統(tǒng)采用Lin ux操作系統(tǒng),使其具備了實時多任務(wù)處理的能力。經(jīng)過測試,系統(tǒng)運行穩(wěn)定可靠,有較好應(yīng)用前景。