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