基于CH374的USB攝像頭驅動設計
發(fā)布時間:2007/4/23 0:00:00 訪問次數(shù):541
現(xiàn)有視頻監(jiān)控系統(tǒng)的設計大都采用USB視頻采集和以太網(wǎng)傳輸,并且需要視頻壓縮方案,通常需要操作系統(tǒng)支持;因此選取的開發(fā)平臺價格昂貴,造成視頻臨控系統(tǒng)的成本居高不下,以致使小型工廠和家庭用戶難以接受。
本課題采用S3C44BO微處理器的ARM7開發(fā)平臺,驅動USB接口芯片CH374進行視頻數(shù)據(jù)采集,提供了低成本的視頻采集方案。USB視頻采集涉及USB同步傳輸,但是在眾多USB主機芯片的設計中,多以控制傳輸和批量傳輸為主,對同步傳輸?shù)闹v解極為少見。本文提供了USB同步傳輸?shù)脑O計范例。
1 系統(tǒng)工作原理
典型的USB視頻采集系統(tǒng)如圖1所示。USB系統(tǒng)包含主機和物理設備兩個最基本的元素,一個USB系統(tǒng)只能有一個USB主機,可以連接多個物理設備。本設計中的設備是USB攝像頭,USB主機由USB主機控制器、微處理器及驅動軟件構成。USB系統(tǒng)工作層次分明:USB接口層提供主機控制器和設備的物理連接;設備層中,USB主機調用驅動程序通過端點0發(fā)送并獲取USB設備的控制信息;功能層進行實際數(shù)據(jù)的傳輸,主機必須選擇合適的接口和端點,調用底層驅動提供的接口函數(shù)獲取USB攝像頭的視頻數(shù)據(jù)流。
1.1 USB攝像頭SPCA561A
視頻信號的采集一般選擇USB攝像頭來實現(xiàn)。如圖2所示,USB攝像頭SPCA561A集成了鏡頭、CMOS傳感器、USB圖像處理器以及USB控制器。
比起直接與微處理器接口的CMOS傳感器,使用USB攝像頭雖然成本偏高,但是易于實現(xiàn),節(jié)省CPU資源,而且驅動支持非常豐富。SPCA561A提供了一種單芯片攝像頭解決方案,它將一個CIF的CMOS傳感器、一個圖像處理器和USB控制器集成于單芯片,從而大大降低了成本和開發(fā)難度;缺點是只有10萬像素,每秒幀數(shù)較少,然而非常適合應用于圖像要求不高的小型監(jiān)控系統(tǒng)。
1.2 USB主機控制器CH374
CH374是一個嵌入式USB總線的通用接口芯片,支持USB主機方式和USB設備方式,支持低速和全速的控制傳輸、批量傳輸、中斷傳輸以及同步傳輸。在本地端,CH374具有8位數(shù)據(jù)總線和讀、寫、片選控制線以及中斷輸出,可以方便地掛接到DSP/MCU/MPU等控制器的系統(tǒng)總線上。大多數(shù)嵌入式的USB主機接口芯片并不提供同步傳輸模式,而CH374的一大特點就是提供了同步傳輸,使得視頻和音頻流的傳輸成為可能。
本系統(tǒng)使用CH374作為USB主機控制器,如圖3所示。CH374用總線方式與S3C44B0相連,微控制器通過讀寫CH374寄存器實現(xiàn)USB主機驅動。
1.3 USB同步傳輸原理
同步傳輸主要用來傳輸音頻或視頻信號。這種信息是周期的,又是實時的,對信息實時性有很高的要求,但是對誤碼率卻可以容忍。所以USB為這種信息保留90%的帶寬,其他類型的傳輸在同步傳輸期間不可以占用。
為保證數(shù)據(jù)傳輸?shù)膶崟r性,同步傳輸不進行數(shù)據(jù)錯誤的重傳,也不在硬件層次上響應一個握手資料包。同步傳輸?shù)闹鳈C每隔l ms發(fā)送一個SOF同步信號,隨后接收設備發(fā)送的信號,其數(shù)據(jù)流程如圖4所示。
在同步傳輸中,每一個信包的容量是一定的。拿SPCA56l來說,在啟動同步傳輸之前必須設置相應的接口號。不同的接口號決定將要發(fā)送多大的信包容量,如接口號1每次發(fā)送的信包容量是128字節(jié),接口號6的信包容量是896字節(jié)。接口號通過USB標準設備請求SET_INTERFACE來設置。由于CH374的緩沖區(qū)最大為128字節(jié),所以本設計中使用接口號l,同步傳輸每接收一個信包的大小是128字節(jié)容量的信包。
1.4 視頻數(shù)據(jù)采集過程
如圖5所示,視頻信號由攝像頭SPCA561A采集得到,經(jīng)過內部的圖像處理芯片后編碼為規(guī)定的格式,一般為RGB或者YUV格式,但是SPCA561采用比較特殊的S561圖像格式(類似于RGB格式)。因為一幀圖像的數(shù)據(jù)量很大,無法在一個同步信包內傳送,所以將其分割成多個單元,每個單元前添加包頭(包頭的內容包括當前包序號和此圖像幀信息),組成多個同步信包,通過FIFO緩沖發(fā)送到USB總線上。主機控制器用同步方式接收每個信包,并去除包頭合并成S561格式的數(shù)據(jù),組成一個完整的圖像幀。最后由軟件將此圖像幀預編碼成為YUV420格式的圖像數(shù)據(jù),以便后續(xù)的壓縮處理。
2 USB攝像頭驅動的實現(xiàn)
USB攝像頭并非標準的USB外設。與其他USB外設不同的是,每個廠商的攝像頭芯片都有自己定義的設備請求,而這些攝像頭芯片數(shù)據(jù)手冊并不對外公開,所以編寫攝像頭驅動的難度很大,想要驅動支持更多的攝像頭,程序會非常復雜。本
現(xiàn)有視頻監(jiān)控系統(tǒng)的設計大都采用USB視頻采集和以太網(wǎng)傳輸,并且需要視頻壓縮方案,通常需要操作系統(tǒng)支持;因此選取的開發(fā)平臺價格昂貴,造成視頻臨控系統(tǒng)的成本居高不下,以致使小型工廠和家庭用戶難以接受。
本課題采用S3C44BO微處理器的ARM7開發(fā)平臺,驅動USB接口芯片CH374進行視頻數(shù)據(jù)采集,提供了低成本的視頻采集方案。USB視頻采集涉及USB同步傳輸,但是在眾多USB主機芯片的設計中,多以控制傳輸和批量傳輸為主,對同步傳輸?shù)闹v解極為少見。本文提供了USB同步傳輸?shù)脑O計范例。
1 系統(tǒng)工作原理
典型的USB視頻采集系統(tǒng)如圖1所示。USB系統(tǒng)包含主機和物理設備兩個最基本的元素,一個USB系統(tǒng)只能有一個USB主機,可以連接多個物理設備。本設計中的設備是USB攝像頭,USB主機由USB主機控制器、微處理器及驅動軟件構成。USB系統(tǒng)工作層次分明:USB接口層提供主機控制器和設備的物理連接;設備層中,USB主機調用驅動程序通過端點0發(fā)送并獲取USB設備的控制信息;功能層進行實際數(shù)據(jù)的傳輸,主機必須選擇合適的接口和端點,調用底層驅動提供的接口函數(shù)獲取USB攝像頭的視頻數(shù)據(jù)流。
1.1 USB攝像頭SPCA561A
視頻信號的采集一般選擇USB攝像頭來實現(xiàn)。如圖2所示,USB攝像頭SPCA561A集成了鏡頭、CMOS傳感器、USB圖像處理器以及USB控制器。
比起直接與微處理器接口的CMOS傳感器,使用USB攝像頭雖然成本偏高,但是易于實現(xiàn),節(jié)省CPU資源,而且驅動支持非常豐富。SPCA561A提供了一種單芯片攝像頭解決方案,它將一個CIF的CMOS傳感器、一個圖像處理器和USB控制器集成于單芯片,從而大大降低了成本和開發(fā)難度;缺點是只有10萬像素,每秒幀數(shù)較少,然而非常適合應用于圖像要求不高的小型監(jiān)控系統(tǒng)。
1.2 USB主機控制器CH374
CH374是一個嵌入式USB總線的通用接口芯片,支持USB主機方式和USB設備方式,支持低速和全速的控制傳輸、批量傳輸、中斷傳輸以及同步傳輸。在本地端,CH374具有8位數(shù)據(jù)總線和讀、寫、片選控制線以及中斷輸出,可以方便地掛接到DSP/MCU/MPU等控制器的系統(tǒng)總線上。大多數(shù)嵌入式的USB主機接口芯片并不提供同步傳輸模式,而CH374的一大特點就是提供了同步傳輸,使得視頻和音頻流的傳輸成為可能。
本系統(tǒng)使用CH374作為USB主機控制器,如圖3所示。CH374用總線方式與S3C44B0相連,微控制器通過讀寫CH374寄存器實現(xiàn)USB主機驅動。
1.3 USB同步傳輸原理
同步傳輸主要用來傳輸音頻或視頻信號。這種信息是周期的,又是實時的,對信息實時性有很高的要求,但是對誤碼率卻可以容忍。所以USB為這種信息保留90%的帶寬,其他類型的傳輸在同步傳輸期間不可以占用。
為保證數(shù)據(jù)傳輸?shù)膶崟r性,同步傳輸不進行數(shù)據(jù)錯誤的重傳,也不在硬件層次上響應一個握手資料包。同步傳輸?shù)闹鳈C每隔l ms發(fā)送一個SOF同步信號,隨后接收設備發(fā)送的信號,其數(shù)據(jù)流程如圖4所示。
在同步傳輸中,每一個信包的容量是一定的。拿SPCA56l來說,在啟動同步傳輸之前必須設置相應的接口號。不同的接口號決定將要發(fā)送多大的信包容量,如接口號1每次發(fā)送的信包容量是128字節(jié),接口號6的信包容量是896字節(jié)。接口號通過USB標準設備請求SET_INTERFACE來設置。由于CH374的緩沖區(qū)最大為128字節(jié),所以本設計中使用接口號l,同步傳輸每接收一個信包的大小是128字節(jié)容量的信包。
1.4 視頻數(shù)據(jù)采集過程
如圖5所示,視頻信號由攝像頭SPCA561A采集得到,經(jīng)過內部的圖像處理芯片后編碼為規(guī)定的格式,一般為RGB或者YUV格式,但是SPCA561采用比較特殊的S561圖像格式(類似于RGB格式)。因為一幀圖像的數(shù)據(jù)量很大,無法在一個同步信包內傳送,所以將其分割成多個單元,每個單元前添加包頭(包頭的內容包括當前包序號和此圖像幀信息),組成多個同步信包,通過FIFO緩沖發(fā)送到USB總線上。主機控制器用同步方式接收每個信包,并去除包頭合并成S561格式的數(shù)據(jù),組成一個完整的圖像幀。最后由軟件將此圖像幀預編碼成為YUV420格式的圖像數(shù)據(jù),以便后續(xù)的壓縮處理。
2 USB攝像頭驅動的實現(xiàn)
USB攝像頭并非標準的USB外設。與其他USB外設不同的是,每個廠商的攝像頭芯片都有自己定義的設備請求,而這些攝像頭芯片數(shù)據(jù)手冊并不對外公開,所以編寫攝像頭驅動的難度很大,想要驅動支持更多的攝像頭,程序會非常復雜。本