基于AT91RM9200的圖像采集系統(tǒng)設(shè)計
引言:
近年來高性能、低功耗的ARM處理器成為嵌入式應(yīng)用的主流;開源的嵌入式Linux操作系統(tǒng)由于系統(tǒng)穩(wěn)定、兼容性和移植性好、網(wǎng)絡(luò)功能強等優(yōu)點也成為首選嵌入式操作系統(tǒng)之一,但目前嵌入式Linux支持的USB攝像頭(如OV511)市場上已淘汰,使用現(xiàn)有USB攝像頭需開發(fā)相關(guān)驅(qū)動程序,由于采用中芯微公司的USB攝像頭在市場中的占有率很高,可高效壓縮后輸出JPEG圖像,所以本文針對這類USB攝像頭設(shè)計了基于 AT91RM9200處理器的圖像采集處理平臺,實現(xiàn)了JPEG圖像的采集和網(wǎng)絡(luò)傳輸。
1.硬件系統(tǒng)設(shè)計
(1) AT91RM9200簡介
AT91RM9200是ATMEL公司生產(chǎn)的基于ARM920T的工業(yè)級SOC芯片,不僅有豐富的片上資源和標(biāo)準(zhǔn)接口,而且有低功耗、低成本、高性能、支持多種主要的嵌入式操作系統(tǒng)等特點,其采用5級整數(shù)流水線結(jié)構(gòu)性能高達200 MIPS, 具有標(biāo)準(zhǔn)的ARMv4存儲器管理單元(MMU),內(nèi)部集成有兩個USB 2.0 全速(12 M比特/秒) 主機端口和10/100 Base-T 型以太網(wǎng)接口,該芯片具有多種工作模式,其低功耗待機模式下電流僅3.1 mA[1]。
(2)AT91RM9200的USB主機端口(UHP)
AT91RM9200集成有一個USB器件端口(UDP)和一個USB主機端口(UHP),均符合USB V2.0 全速及低速規(guī)范。UHP內(nèi)部集成一個根集線器和2個收發(fā)器,可連接127個USB 器件,UHP控制器與OHCI Rev 1.0規(guī)范完全兼容,標(biāo)準(zhǔn)分類驅(qū)動可以自動檢測并在用戶程序中使用[1]。
(3)硬件系統(tǒng)結(jié)構(gòu)
圖像采集平臺的硬件系統(tǒng)結(jié)構(gòu)設(shè)計如圖1所示,主要包括AT91RM9200處理器、JTAG接口、網(wǎng)絡(luò)模塊、32M SDRAM、16M FLASH、串口、USB主從口等部分。其中網(wǎng)絡(luò)模塊通過外接DM9161實現(xiàn)10M/100M自適應(yīng)網(wǎng)絡(luò)連接,通過處理器內(nèi)置的4個通用同步(異步)收發(fā)器(USART) 可實現(xiàn)4路數(shù)據(jù)傳輸與控制。另外,處理器內(nèi)置的雙主機收發(fā)器可連接USB攝像頭和USB存儲設(shè)備,也可經(jīng)USB集線器連接更多USB設(shè)備,提高了系統(tǒng)的擴展性。
圖1.硬件系統(tǒng)結(jié)構(gòu)
2.軟件系統(tǒng)設(shè)計
(1)嵌入式Linux軟件架構(gòu)
Linux工作模式分為內(nèi)核模式和用戶模式,其軟件系統(tǒng)架構(gòu)由硬件控制器、Linux內(nèi)核、系統(tǒng)調(diào)用接口和用戶進程4層組成。一個用戶進程就是一個用戶程序,操作系統(tǒng)支持多進程并發(fā);內(nèi)核是操作系統(tǒng)的中心組件,有進程管理、內(nèi)存管理、文件系統(tǒng)管理、設(shè)備控制、網(wǎng)絡(luò)控制等功能,它通過底層接口層以一致的方式管理硬件,通過高層抽象層為用戶進程提供與硬件無關(guān)的API控制硬件資源;系統(tǒng)調(diào)用接口負(fù)責(zé)為應(yīng)用程序調(diào)用內(nèi)核中特定的過程,從而實現(xiàn)特定服務(wù),一般認(rèn)為這些調(diào)用和服務(wù)也是操作系統(tǒng)內(nèi)核的一部分。
(2)USB驅(qū)動程序系統(tǒng)框架
圖2.USB驅(qū)動程序系統(tǒng)框架
USB驅(qū)動程序的系統(tǒng)框架如圖2所示,包括客戶驅(qū)動程序、通用總線驅(qū)動程序、主機控制器驅(qū)動程序幾部分。其中,客戶驅(qū)動程序是特定USB設(shè)備的驅(qū)動程序,提供了USB設(shè)備的功能操作及特定子類協(xié)議封裝[6];通用總線驅(qū)動程序(USBD)擁有特定操作系統(tǒng)上抽象出的主機控制器驅(qū)動程序的共有特性,是整個USB驅(qū)動程序的核心,主要實現(xiàn)USB總線管理、URB管理、為客戶驅(qū)動程序提供相關(guān)接口等功能,它還負(fù)責(zé)維護設(shè)備的加載和卸載、設(shè)備配置、客戶端驅(qū)動程序的安裝和卸載等工作[2];主機控制器驅(qū)動程序是直接與硬件交互的軟件模塊,主要實現(xiàn)主機控制器硬件初始化、負(fù)責(zé)總線的注冊、為USBD層提供相應(yīng)的接口函數(shù)、完成4種類型的數(shù)據(jù)傳輸?shù)裙δ躘2]。
Linux通過定義了統(tǒng)一的URB(Universal Request Block)結(jié)構(gòu),在客戶驅(qū)動程序和USBD之間,以及USBD和HCD之間進行消息傳遞,為USB驅(qū)動程序的開發(fā)帶來了很大方便[3]。我們開發(fā)USB驅(qū)動程序主要是編寫USB客戶軟件層的程序,即如何將數(shù)據(jù)封裝成URB和如何從URB中得到數(shù)據(jù)。
評論