基於CH374的USB攝像頭驅動設計

2021-04-13 07:29:54 字數 2630 閱讀 6174

1 系統工作原理

1.1 usb攝像頭spca561a

比 起直接與微處理器介面的cmos感測器,使用usb攝像頭雖然成本偏高,但是易於實現,節省cpu資源,而且驅動支援非常豐富。spca561a提供了一 種單晶元攝像頭解決方案,它將乙個cif的cmos感測器、乙個影象處理器和usb控制器整合於單晶元,從而大大降低了成本和開發難度;缺點是只有10萬 畫素,每秒幀數較少,然而非常適合應用於影象要求不高的小型監控系統。

1.2 usb主機控制器ch374本系統使用ch374作為usb主機控制器,如圖3所示。ch374用匯流排方式與s3c44b0相連,微控制器通過讀寫ch374暫存器實現usb主機驅動。

1.3 usb同步傳輸原理為保證資料傳輸的實時性,同步傳輸不進行資料錯誤的重傳,也不在硬體層次上響應乙個握手資料報。同步傳輸的主機每隔l ms傳送乙個sof同步訊號,隨後接收裝置傳送的訊號,其資料流程如圖4所示。

在 同步傳輸中,每乙個信包的容量是一定的。拿spca56l來說,在啟動同步傳輸之前必須設定相應的介面號。不同的介面號決定將要傳送多大的信包容量,如接 口號1每次傳送的信包容量是128位元組,介面號6的信包容量是896位元組。介面號通過usb標準裝置請求set_inte***ce來設定。由於 ch374的緩衝區最大為128位元組,所以本設計中使用介面號l,同步傳輸每接收乙個信包的大小是128位元組容量的信包。

2 usb攝像頭驅動的實現

usb 攝像頭並非標準的usb外設。與其他usb外設不同的是,每個廠商的攝像頭晶元都有自己定義的裝置請求,而這些攝像頭晶元資料手冊並不對外公開,所以編寫 攝像頭驅動的難度很大,想要驅動支援更多的攝像頭,程式會非常複雜。本文只介紹spca561a攝像頭驅動的方法。

2.1usb攝像頭初始化

初始化乙個usb攝像頭有兩個步驟,第一步是攝像頭的列舉,第二步是攝像頭的自定義設定。

(1) 裝置列舉

裝置的列舉就是標準裝置請求的過程,這部分內容包含於usb協議第9章。對usb攝像頭來說,列舉的過程依次如下:

①獲取裝置描述符。通過裝置描述符得到端點0的負載,也就是最大傳送包容量。

②設定位址。給裝置分配乙個預設位址0之外的位址。

③獲取配置描述符。這個過程包括兩個階段,第1次獲取的配置描述符的前4個位元組得到配置描述符的真實長度;再以真實長度第2次獲取配置描述符,此描述符包含了裝置的配置資訊和多個介面資訊。可以從這裡得到可以使用的介面號和對應的信包負載

。 ④設定配置資訊。設定的主要資訊是配置描述符中的第5個字段bconfigurationvalue。

⑤設定介面。usb攝像頭不同的介面號對應不同的信包負載。本設計選定的介面號為2,對應信包負載是128位元組。

(2) 自定義設定

usb 攝像頭並不是標準usb外設,需要很多自定義設定,可以稱之為「自定義裝置請求」,它是用標準裝置請求包方式傳 送的,目的是修改內部暫存器,對採集影象和壓縮方式進行配置。標準裝置請求和自定義裝置請求包的不同內容如表1所列。自定義裝置請求的內容非常豐富,它包 含以下幾個方面:

①時序產生設定。包括影象採集頻率和振盪器的設定等。

②影象處理設定。包括影象視窗大小、壓縮型別、色彩分配等配置屬性。

③儲存器設定。對影象緩衝進行設定。

④控制及狀態設定。包括啟動及停止影象採集、資料傳輸方式、當前狀態等配置屬性。

程 序中的初始化設定有近百條,具體設定請見參考文獻[1]的開源**。初始化結束後,可以根據需要進行影象格式的設定,spca561a支援sqvga (160×120)、qcif(176×144)、qvga(320×240)、cif(352×288)四種格式。設定結束後啟動攝像頭採集,進行資料 傳輸。

2.2 同步傳輸和影象幀處理

同步傳輸的過程非常簡單,甚至不包含握手資訊;但是因為同步傳輸對時序的要求很高,所以對同步傳輸資料的處理頗困難。此驅動的設計將同步資料的接收用中斷服務程式進行處理,同步資料的處理放在中斷服務之外執行。

① 中斷服務程式流程如圖6所示。每次同步中斷發生時,首先從usb主機控制器的緩衝區內讀取接收到的128位元組同步信包,將資料儲存到資料處理程式提供的存 儲單元中。再傳送pid_in標誌和端點號,設定同步傳輸型別並啟動下一次傳輸。ch374主機會在每1 ms傳送1個sof同步標誌,usb裝置接收到sof標誌後,會傳送下乙個同步信包。

② 同步資料處理程式如圖7所示。中斷結束後,執行資料處理程式,程式讀取同步信包的第乙個位元組,確認包的序號,此序號的範圍是0~0xff。如果此序號為 0xff,則說明是無效包,需要丟棄。如果此序號為0,則可能是首次採集得到的第乙個同步資料報,直接儲存此資料到影象幀;也可能是當前影象幀結束後開始 的下一幀影象的第乙個同步信包,則需要處理已經結束的當前幀影象,同時將當前幀設定為下一幀。至此得到了一幀影象資料。

2.3 影象資料的預編碼3 設計心得

由於此usb主機基於低端嵌入式硬體系統,沒有作業系統支援,也沒有bushound類似的usb資料流分析軟體支援,難以找到基於嵌入式平台usb同步傳輸參考程式,所以設計的難度很大。筆者的設計經驗是重在參考程式的選擇。

結 語

樹莓派使用免驅USB攝像頭

樹莓派使用免驅usb攝像頭 使用命令lsusb,查詢usb,插拔前後各用一次,找到usb口。使用命令ls dev video 插拔前後各查詢一次,得到裝置檔案。安裝fswebcamsudo apt get install fswebcam拍照fswebcam dev video0 home pi n...

樹莓派 CSI攝像頭和USB攝像頭的配置與除錯

拍攝一張 安裝v4l2驅動使opencv能夠識別攝像頭 執行命令 sudo raspi config進入設定頁面後,之後按照下面步驟設定 選擇 inte cing options 選擇 camera 一直按回車後退出重啟樹莓派 利用 lsusb 可以檢視樹莓派上掛載的所有 usb 外設,將攝像頭插入...

linux uvc協議 USB攝像頭的UVC協議

usb攝像頭的uvc協議 如今的主流作業系統 如windows xp sp2 and later,linux 2.4.6 and later,macos 10.5 and later 都已提供uvc裝置驅動,因此符合uvc規格的硬體裝置在不需要安裝任何的驅動程式下即可在主機中正常使用。使用uvc技術...