基于S3C44B0的嵌入式系統在電子警察中設計與應用
引言
本文引用地址:http://dyxdggzs.com/article/81686.htm隨著(zhù)城市交通的迅速發(fā)展,機動(dòng)車(chē)流量急劇增加,使得交通管理面臨著(zhù)新的挑戰,由于某些駕駛員交通法律意識淡薄,為達目的闖紅燈行駛,特別是在無(wú)交警值守的區域,問(wèn)題更為嚴重。電子警察系統,就是將在交通路口抓拍到的違章照片傳回控制中心,進(jìn)行分析處理和保存,并作為違章證據處罰違規的司機。電子警察系統在實(shí)現警務(wù)工作網(wǎng)絡(luò )化、現代化、智能化進(jìn)程中有著(zhù)重要作用。電子警察一般由三大部分組成,一是照片拍攝部分;在紅燈信號期間,控制器控制數碼相機拍攝違章車(chē)輛照片,并存儲到相機存儲卡上。二是照片傳輸部分;將數碼相機存儲卡中的相片傳送回監控中心。三是照片處理部分;在控制中心,工作人員將照片進(jìn)行統計處理。照片傳輸部分常用的方法有人工取圖、基于PC的工控機傳送兩種。人工取圖方式耗費大量人力,無(wú)法及時(shí)獲取照片,無(wú)法實(shí)現自動(dòng)化操作;基于PC的工控機傳送方式,成本高,體積大,安裝不方便?;贏(yíng)RM的嵌入式系統的出現解決了以上兩種傳送方式中的存在的缺點(diǎn)。
本文主要研究介紹:(1)嵌入式系統的結構;(2)如何利用嵌入式操作系統和ARM處理器構建電子警察照片傳輸設備;(3)介紹此設備的實(shí)際應用。
嵌入式系統的結構
嵌入式系統是一個(gè)硬件和軟件的集合體,由嵌入式微處理器、嵌入式操作系統以及承載操作系統的硬件平臺組成。嵌入式系統軟硬兼施,互利互惠,融為一體。
嵌入式操作系統
嵌入式操作系統是嵌入式系統的控制中心,主要用于對系統軟硬件調度管理和人機界面加以控制。
·嵌入式系統的引導程序
嵌入式系統中引導程序(Bootloader)的作用與PC的BIOS(Basic Input Output System)相似,通過(guò)引導程序可以完成對ARM板上的主要部件CPU、SDRAM、Flash、串口等進(jìn)行初始化操作,并能完成下載文件,Flash擦寫(xiě)等操作。一個(gè)功能完善的引導程序相當于一個(gè)微型的操作系統。
操作系統內核運行之前,引導程序完成加載內核和一些輔助性的工作,然后跳轉到內核代碼的起始地址并執行。引導程序可以初始化硬件、建立內存空間映射,從而將系統的軟硬件環(huán)境帶到一個(gè)合適的狀態(tài),以便最終調用系統內核。簡(jiǎn)言之,Bootloader為操作系統提供硬件資源信息,并進(jìn)一步加載、引導操作系統。
引導程序通常固化在FLASH或ROM中,基于A(yíng)RM內核的CPU在復位時(shí)通常從地址0x00000000取第一條指令。因此,基于A(yíng)RM的嵌入式系統通常都有某種類(lèi)型的固態(tài)存儲設備被映射到這個(gè)地址上。系統上電后首先執行Bootloader程序。如圖1所示是一個(gè)裝有Bootloader、內核參數、內核映像和根文件系統映像的固態(tài)存儲設備空間分配結構圖。
·嵌入式系統的硬件系統
與PC硬件相比,嵌入式系統的硬件系統具有如下特點(diǎn):
(1) 體積小,成本低,集成度高。嵌入式系統去除冗余,力爭用最少的硬件資源完成目標功能。
(2) 功耗低,電磁兼容性好,能在惡劣的條件下工作,死機后能夠快速重啟。
(3) 面向特定的應用。
嵌入式系統的硬件平臺在價(jià)格、功能、體積、能耗等方面都有嚴格限制。
通常,嵌入式系統硬件平臺主要分為2大部分:一部分為系統主板,為基于A(yíng)RM的最小系統,包括CPU、Flash、SDRAM、串口等最基本部分;另一部分為系統擴展,提供用于完成各種不同功能的硬件模塊。如存儲設備,閃存(Flash Memory);通信設備以太網(wǎng)卡,USB控制器等。
·嵌入式系統中的軟件
嵌入式系統軟件包括與硬件相關(guān)的底層軟件、操作系統、圖形界面、通信協(xié)議、數據庫系統和應用軟件等。嵌入式系統的軟件部分具有以下特點(diǎn):
(1) 軟件代碼要求高質(zhì)量、高效率和高可靠性。在嵌入式系統中,軟件的運行空間有限,內存空間十分寶貴,在程序設計時(shí)需要時(shí)刻考慮軟件的運行效率。由于嵌入式設備的工作環(huán)境多變,因此嵌入式軟件設計需要有質(zhì)量高、可靠性高的代碼作為保障。
(2) 嵌入式軟件開(kāi)發(fā)與硬件緊密聯(lián)系。嵌入式軟件的開(kāi)發(fā)是針對特定的硬件平臺進(jìn)行的,它牽扯到硬件驅動(dòng)方面的一些軟硬件結合部分。
(3) 軟件要求固化。為了提高執行速度和系統的可靠性,大多數嵌入式系統軟件需要固化到系統板的Flash或ROM中。
此外,嵌入式系統軟件還需要具有異常處理,快速復位的特點(diǎn)。在實(shí)時(shí)系統中,軟性必須具有對實(shí)時(shí)多任務(wù)很強的支持能力,快速響應并將執行時(shí)間減少到最低限度。
系統功能與設計
系統功能
本著(zhù)既能滿(mǎn)足電子警察照片采集傳輸的實(shí)際需要,又盡量節約資源的原則,本系統提供如下功能:
(1) 上位機服務(wù)器。向終端發(fā)出數據和命令;接收終端上傳的照片并進(jìn)行保存處理??蓪?shí)現人工操作、自動(dòng)定時(shí)操作、單終端控制、所有終端控制功能。
(2) 采集照片。終端設備從數碼相機中將照片采集到本地存儲器中,以保證在照片傳輸過(guò)程中不影響數碼相機正常工作。
(3) 照片傳送。通過(guò)網(wǎng)絡(luò )將照片傳送至上位機服務(wù)器,實(shí)現傳輸智能化。
(4) 網(wǎng)絡(luò )檢測。終端設備能夠檢測網(wǎng)絡(luò )通斷,保證數據傳輸正確。
(5) 在線(xiàn)更新。通過(guò)上位機可以對終端設備進(jìn)行參數修改,軟件升級。
系統設計
此系統設計主要是為了滿(mǎn)足數碼相機中的照片能夠安全、及時(shí)的傳送到控制中心。因此系統采用C/S(客戶(hù)端/服務(wù)器)模式設計,由控制中心的服務(wù)器發(fā)送命令控制終端設備進(jìn)行取圖傳圖操作。系統設計框圖如圖2所示。
終端設備CPU選用Samsung公司的基于A(yíng)RM7TDMI核的16/32bit、低功耗、高性?xún)r(jià)比RISC控制器S3C44B0;操作系統選用網(wǎng)絡(luò )功能強大、可靠性好、便于移植裁剪、針對無(wú)MMU(內存管理單元)控制器的開(kāi)源操作系統uClinux。
·終端設備硬件設計
終端設備硬件設計本著(zhù)接口標準化、功能模塊化、擴展性好、可靠性高的原則,劃分為CPU模塊和外設模塊。
(1) CPU模塊:包括S3C44B0、SDRAM、NOR Flash等系統運行的基本要素,組成嵌入式系統的最小系統。
(2) 外設模塊:網(wǎng)絡(luò )接口、USB HOST接口、RS232通訊接口、NAND Flash。
S3C44B0芯片本身集成了一些通用的外圍器件,如UART則直接利用控制器的資源。片內2個(gè)UART分別作為操作系統控制臺及與相機控制板的通訊接口。將海量存儲器NAND Flash、USB控制器SL811、網(wǎng)絡(luò )芯片RTL8019分別映射于處理器的Bank1、Bank2、Bank4地址空間上,實(shí)現外部模塊與CPU模塊的無(wú)縫連接。其中NANDS3C44B0芯片本身集成了一些通用的外圍器件,如UART則直接利用控制器的資源。片內2個(gè)UART分別作為操作系統控制臺及與相機控制板的通訊接口。將海量存儲器NAND Flash、USB控制器SL811、網(wǎng)絡(luò )芯片RTL8019分別映射于處理器的Bank1、Bank2、Bank4地址空間上,實(shí)現外部模塊與CPU模塊的無(wú)縫連接。其中NAND Flash使用復雜的I/O口來(lái)串行地存取數據,8個(gè)引腳用來(lái)傳送控制、地址和數據信息。各個(gè)廠(chǎng)商的方法可能不一樣。因此在0x00200000-0x00400000空間中完全可以使用64M×8Bit的NAND Flash存儲器。終端設備的硬件框圖如圖3所示。
終端設備的核心板尺寸為:120mm×80mm,體積小巧,接口標準且安裝方便。既可以獨立使用,又可以作為模塊嵌入到其他系統中。
終端設備軟件設計
終端設備軟件設計遵循的原則是:軟件結構化、系統可裁剪定制、驅動(dòng)標準化、應用程序模塊化。軟件設計的主要工作是引導程序Uboot移植,操作系統uClinux移植,驅動(dòng)程序設計,常用API函數封裝,多任務(wù)多進(jìn)程的分解與設計,基于Socket的網(wǎng)絡(luò )編程等。圖4 所示為終端設備的軟件結構化設計。
在驅動(dòng)層比較關(guān)鍵的是NOR Flash存儲器驅動(dòng)設計與Kodak Dx6340數碼相機USB驅動(dòng)程序的設計。NOR Flash驅動(dòng)為實(shí)現在線(xiàn)更新功能實(shí)現最底層的支持,保證Bootloader、Kernel、Root filesystem在存儲器中準確存放。值得注意是NOR Flash的擦寫(xiě)有嚴格的時(shí)序,根據CPU主頻不同在擦寫(xiě)過(guò)程中加入適當的延時(shí)函數能保證Flash正常工作。由于柯達相機的存儲卡在Linux下不能當作大容量存儲設備(Mass Storage Device)進(jìn)行操作,換言之不能當作移動(dòng)存儲在uClinux系統下掛載,因此在進(jìn)行設備驅動(dòng)程序設計時(shí)應選擇USB設備類(lèi)驅動(dòng),通過(guò)廠(chǎng)商標識(Manufacture ID)及產(chǎn)品標識(Product ID)在系統中注冊匹配,進(jìn)而完成驅動(dòng)功能,數據傳輸過(guò)程中采用批量傳輸方式。
在應用層,基于Socket的網(wǎng)絡(luò )編程支持TCP/IP協(xié)議有較好的通用性,能應用于RJ45接口的各種網(wǎng)絡(luò )環(huán)境。照片數據傳輸遵守PTP協(xié)議(PIMA 15740:2000),便于移植。由于應用程序采用模塊化設計,終端與服務(wù)器通信采用一個(gè)進(jìn)程,終端獲取圖片使用一個(gè)進(jìn)程因此進(jìn)程間通信顯的尤為重要。首先,采用信號作為主要的通信手段;其次,采用共享內存方式。由于在uClinux內存采用實(shí)地址操作,沒(méi)有內存管理機制,因此在軟件設計時(shí)筆者采用共享內存的思想在系統未用的內存區域開(kāi)辟出一塊空間作為共享內存,從而完成進(jìn)程間通信。
下面簡(jiǎn)要介紹Kodak DX6340數碼相機USB驅動(dòng)程序設計:
(1) 驅動(dòng)程序的注冊:
本程序中數碼相機驅動(dòng)以USB字符型設備來(lái)實(shí)現,USB設備驅動(dòng)第一步要做的是通過(guò)usb_driver結構向uClinux內核注冊自己,告訴系統它所支持的設備類(lèi)型及操作類(lèi)型。
static struct usb_driver dx6340_driver = {
name: "dx6340", // 驅動(dòng)程序名稱(chēng)
id_table: dx6340_table, // 此結構用于保存設備的廠(chǎng)商ID和產(chǎn)品ID
probe: dx6340_probe, // 用于USB設備探測枚舉例程
disconnect: dx6340_disconnect, // 用于設備的卸載
fops: &dx6340_fops, // 驅動(dòng)程序的操作類(lèi)型
minor: USB_DX6340_MINOR, // 設備的次設備號
};
結構成員fops指向一個(gè)file_operations結構。這個(gè)結構提供基本的I/O操作接口函數open、close、read、write的實(shí)現,對中斷的處理、內存映射及對I/O通道的控制函數ioctl的實(shí)現。通過(guò)這個(gè)結構,實(shí)現了系統調用和驅動(dòng)程序的關(guān)聯(lián)。在應用程序中發(fā)出文件操作的相關(guān)命令時(shí),內核根據這些指針調用相應的函數,從而完成驅動(dòng)與內核間的通信。
static struct file_operations dx6340_fops = {
owner: THIS_MODULE, // fops所屬范圍
read: dx6340_read, // 相機的讀操作
write: dx6340_write, // 相機的寫(xiě)操作
open: dx6340_open, // 打開(kāi)相機設備
release: dx6340_release, // 關(guān)閉相機設備
};
在數據讀寫(xiě)read、write函數中使用批量傳輸方式,調用函數usb_bulk_msg (struct usb_device *usb_dev, unsigned int pipe, void *data, int len, int *actual_length, int timeout)。
(2) 驅動(dòng)程序的在系統中的調用
接下來(lái)的工作是將設備驅動(dòng)程序嵌入內核。通常有兩種方式,一種是靜態(tài)編譯進(jìn)內核,另一種是編譯成模塊。后者能夠動(dòng)態(tài)進(jìn)行加載,利于調試。當系統使用該設備驅動(dòng)時(shí),調用驅動(dòng)初始化函數int __init dx6340_init(void){
if (usb_register (&dx6340_driver) < 0)
return -1;
info(DRIVER_VERSION ":" DRIVER_DESC);
return 0;
}
與之對應,當系統注銷(xiāo)該設備驅動(dòng)時(shí),則調用驅動(dòng)注銷(xiāo)函數void __exit dx6340_cleanup(void){
usb_deregister (&dx6340_driver);
}
實(shí)驗研究
為了測試該終端設備的工作性能,設計場(chǎng)景進(jìn)行了現場(chǎng)實(shí)驗:
(1) 批量傳送測試
(2) 網(wǎng)絡(luò )斷開(kāi)測試
當終端設備連接到服務(wù)器后,將終端設備網(wǎng)線(xiàn)拔掉,模擬網(wǎng)絡(luò )故障。在網(wǎng)絡(luò )斷開(kāi)后30秒,終端設備檢測到網(wǎng)絡(luò )故障,進(jìn)入重連程序,接好網(wǎng)線(xiàn)后,終端順利連接到服務(wù)器,并正常工作。
(3) 異常測試
a.模擬串口通信異常實(shí)驗。將設備與相機控制板連線(xiàn)斷開(kāi),設備終端向控制板發(fā)送命令嘗試3次,若無(wú)響應則發(fā)送信息至服務(wù)器,需要人工查看控制板/相機狀況。
b.續傳測試。在設備終端向服務(wù)器發(fā)送圖片過(guò)程中,將服務(wù)器關(guān)閉。這時(shí)終端設備進(jìn)入重連程序,等待與服務(wù)器重新連接后,從發(fā)生中斷時(shí)那張照片開(kāi)始繼續向服務(wù)器發(fā)送圖片。
(4) 定時(shí)取圖測試
上位機定時(shí)操作,實(shí)現無(wú)人職守自動(dòng)取圖。
通過(guò)實(shí)驗表明,該設備具有良好的穩定性,能夠適應不同的網(wǎng)絡(luò )環(huán)境,可以應付不同的異常情況,有較好的通用性。
結語(yǔ)
本文中設計的電子警察終端設備滿(mǎn)足用戶(hù)設計要求,經(jīng)現場(chǎng)實(shí)際運行,證明了所設計的系統可靠、穩定。所提出的照片采集傳輸方案已用于電子警察實(shí)際系統中,并實(shí)現無(wú)人職守自動(dòng)定時(shí)取圖,服務(wù)器獲取照片信息準確無(wú)誤。對于停電或網(wǎng)絡(luò )問(wèn)題造成的異常,設備可以及時(shí)進(jìn)行處理,很好的驗證了本方案的可行性和實(shí)用性。
參考文獻:
1. 杜春雷. ARM體系結構與編程,清華大學(xué)出版,2003-8
2. 詹榮開(kāi). 嵌入式系統Bootloader技術(shù)內幕[EB/OL].
http: //www-128.ibm.com/developerworks/cn/linux/l-btloader/, 2003-12
3. Robert Love.陳莉君,康華,張波 譯. Linux內核設計與實(shí)現 機械工業(yè)出版社 2006-1
4. 張綺文,謝建雄,謝勁心.嵌入式常用模塊與綜合系統設計實(shí)例精講 電子工業(yè)出版社 2007-1
5. Daniel P.Bovet, Marco Cesati. Understanding the Linux Kernel, 2nd Edition, O'Reilly,2002-10
6. Jonathan Corbet, Greg Kroah-Hartman, Alessandro Rubini. Linux Device Drivers, 3rd Edition ,O'Reilly,2005-2
評論