基于CH374的USB攝像頭驅動(dòng)設計
本課題采用S3C44BO微處理器的 ARM7開(kāi)發(fā)平臺,驅動(dòng)USB接口芯片CH374進(jìn)行視頻數據采集,提供了低成本的視頻采集方案。USB視頻采集涉及USB同步傳輸,但是在眾多USB主機芯片的設計中,多以控制傳輸和批量傳輸為主,對同步傳輸的講解極為少見(jiàn)。本文提供了USB同步傳輸的設計范例。
1 系統工作原理
典型的USB視頻采集系統如圖1所示。USB系統包含主機和物理設備兩個(gè)最基本的元素,一個(gè)USB系統只能有一個(gè)USB主機,可以連接多個(gè)物理設備。本設計中的設備是USB攝像頭,USB主機由USB主機控制器、微處理器及驅動(dòng)軟件構成。USB系統工作層次分明:USB接口層提供主機控制器和設備的物理連接;設備層中,USB主機調用驅動(dòng)程序通過(guò)端點(diǎn)0發(fā)送并獲取USB設備的控制信息;功能層進(jìn)行實(shí)際數據的傳輸,主機必須選擇合適的接口和端點(diǎn),調用底層驅動(dòng)提供的接口函數獲取USB攝像頭
|
1.1 USB攝像頭SPCA561A
視頻信號的采集一般選擇USB攝像頭來(lái)實(shí)現。如圖2所示,USB攝像頭SPCA561A集成了鏡頭、CMOS傳感器、USB圖像處理器以及USB控制器。
比起直接與微處理器接口的CMOS傳感器,使用USB攝像頭雖然成本偏高,但是易于實(shí)現,節省CPU資源,而且驅動(dòng)支持非常豐富。SPCA561A提供了一種單芯片攝像頭解決方案,它將一個(gè)CIF的CMOS傳感器、一個(gè)圖像處理器和USB控制器集成于單芯片,從而大大降低了成本和開(kāi)發(fā)難度;缺點(diǎn)是只有10萬(wàn)像素,每秒幀數較少,然而非常適合應用于圖像要求不高的小型監控系統。
1.2 USB主機控制器CH374
CH374是一個(gè)嵌入式USB總線(xiàn)的通用接口芯片,支持USB主機方式和USB設備方式,支持低速和全速的控制傳輸、批量傳輸、中斷傳輸以及同步傳輸。在本地端,CH374具有8位數據總線(xiàn)和讀、寫(xiě)、片選控制線(xiàn)以及中斷輸出,可以方便地掛接到DSP/MCU/MPU等控制器的系統總線(xiàn)上。大多數嵌入式的USB主機接口芯片并不提供同步傳輸模式,而CH374的一大特點(diǎn)就是提供了同步傳輸,使得視頻和音頻流的傳輸成為可能。
本系統使用CH374作為USB主機控制器,如圖3所示。CH374用總線(xiàn)方式與S3C44B0相連,微控制器通過(guò)讀寫(xiě)CH374寄存器實(shí)現USB主機驅動(dòng)。
1.3 USB同步傳輸原理
同步傳輸主要用來(lái)傳輸音頻或視頻信號。這種信息是周期的,又是實(shí)時(shí)的,對信息實(shí)時(shí)性有很高的要求,但是對誤碼率卻可以容忍。所以USB為這種信息保留90%的帶寬,其他類(lèi)型的傳輸在同步傳輸期間不可以占用。
為保證數據傳輸的實(shí)時(shí)性,同步傳輸不進(jìn)行數據錯誤的重傳,也不在硬件層次上響應一個(gè)握手資料包。同步傳輸的主機每隔l ms發(fā)送一個(gè)SOF同步信號,隨后接收設備發(fā)送的信號,其數據流程如圖4所示。
在同步傳輸中,每一個(gè)信包的容量是一定的。拿SPCA56l來(lái)說(shuō),在啟動(dòng)同步傳輸之前必須設置相應的接口號。不同的接口號決定將要發(fā)送多大的信包容量,如接口號1每次發(fā)送的信包容量是128字節,接口號6的信包容量是896字節。接口號通過(guò)USB標準設備請求SET_INTERFACE來(lái)設置。由于CH374的緩沖區最大為128字節,所以本設計中使用接口號l,同步傳輸每接收一個(gè)信包的大小是128字節容量的信包。
1.4 視頻數據采集過(guò)程
如圖5所示,視頻信號由攝像頭SPCA561A采集得到,經(jīng)過(guò)內部的圖像處理芯片后編碼為規定的格式,一般為RGB或者YUV格式,但是SPCA561采用比較特殊的S561圖像格式(類(lèi)似于RGB格式)。因為一幀圖像的數據量很大,無(wú)法在一個(gè)同步信包內傳送,所以將其分割成多個(gè)單元,每個(gè)單元前添加包頭(包頭的內容包括當前包序號和此圖像幀信息),組成多個(gè)同步信包,通過(guò)FIFO緩沖發(fā)送到USB總線(xiàn)上。主機控制器用同步方式接收每個(gè)信包,并去除包頭合并成S561格式的數據,組成一個(gè)完整的圖像幀。最后由軟件將此圖像幀預編碼成為YUV420格式的圖像數據,以便后續的壓縮處理。
2 USB攝像頭驅動(dòng)的實(shí)現
USB攝像頭并非標準的USB外設。與其他USB外設不同的是,每個(gè)廠(chǎng)商的攝像頭芯片都有自己定義的設備請求,而這些攝像頭芯片數據手冊并不對外公開(kāi),所以編寫(xiě)攝像頭驅動(dòng)的難度很大,想要驅動(dòng)支持更多的攝像頭,程序會(huì )非常復雜。本文只介紹SPCA561A攝像頭驅動(dòng)的方法。
2.1 USB攝像頭初始化
初始化一個(gè)USB攝像頭有兩個(gè)步驟,第一步是攝像頭的枚舉,第二步是攝像頭的自定義設置。
(1) 設備枚舉
設備的枚舉就是標準設備請求的過(guò)程,這部分內容包含于USB協(xié)議第9章。對USB攝像頭來(lái)說(shuō),枚舉的過(guò)程依次如下:
①獲取設備描述符。通過(guò)設備描述符得到端點(diǎn)0的負載,也就是最大傳送包容量。
②設置地址。給設備分配一個(gè)默認地址0之外的地址。
③獲取配置描述符。這個(gè)過(guò)程包括兩個(gè)階段,第1次獲取的配置描述符的前4個(gè)字節得到配置描述符的真實(shí)長(cháng)度;再以真實(shí)長(cháng)度第2次獲取配置描述符,此描述符包含了設備的配置信息和多個(gè)接口信息??梢詮倪@里得到可以使用的接口號和對應的信包負載
。
④設置配置信息。設置的主要信息是配置描述符中的第5個(gè)字段bConfigurationValue。
⑤設置接口。USB攝像頭不同的接口號對應不同的信包負載。本設計選定的接口號為2,對應信包負載是128字節。
(2) 自定義設置
USB攝像頭并不是標準USB外設,需要很多自定義設置,可以稱(chēng)之為“自定義設備請求”,它是用標準設備請求包方式傳 送的,目的是修改內部寄存器,對采集圖像和壓縮方式進(jìn)行配置。標準設備請求和自定義設備請求包的不同內容如表1所列。自定義設備請求的內容非常豐富,它包含以下幾個(gè)方面:
①時(shí)序產(chǎn)生設置。包括圖像采集頻率和振蕩器的設置等。
②圖像處理設置。包括圖像窗口大小、壓縮類(lèi)型、色彩分配等配置屬性。
③存儲器設置。對圖像緩沖進(jìn)行設置。
④控制及狀態(tài)設置。包括啟動(dòng)及停止圖像采集、數據傳輸方式、當前狀態(tài)等配置屬性。
程序中的初始化設置有近百條,具體設置請見(jiàn)參考文獻[1]的開(kāi)源代碼。初始化結束后,可以根據需要進(jìn)行圖像格式的設定,SPCA561A支持SQVGA(160
評論