芯片支持壓縮數(shù)據(jù)格式和原始數(shù)據(jù)格式,本文主要解釋如何實現(xiàn)這兩種數(shù)據(jù)格式的接收配置。
CH565評估板攝像頭購買適配:http://www.findthetime.net/bbs/thread-98402-1.html
這里不涉及實際sensor的功能配置,sensor輸出格式配置請具體參考對應(yīng)手冊?。?!
在此建議將CH565手冊12章通讀一次!
芯片支持壓縮數(shù)據(jù)格式和原始數(shù)據(jù)格式,本文主要解釋如何實現(xiàn)這兩種數(shù)據(jù)格式的接收配置。
CH565評估板攝像頭購買適配:http://www.findthetime.net/bbs/thread-98402-1.html
這里不涉及實際sensor的功能配置,sensor輸出格式配置請具體參考對應(yīng)手冊?。?!
在此建議將CH565手冊12章通讀一次!
直接運行EVT中DVP例程:
首先我們需要知道,DVP接口上主要存在兩種數(shù)據(jù)流格式:壓縮數(shù)據(jù)和非壓縮數(shù)據(jù)。這也影響CH565的配置方式。這兩種格式最大的差距就是一幀圖像的數(shù)據(jù)長度,其中壓縮數(shù)據(jù)會因為不同圖像,每幀圖像的數(shù)據(jù)長度(byte)都是不定的。非壓縮數(shù)據(jù)格式,每幀圖像數(shù)據(jù)長度(byte)都是固定的,通常是分辨率的倍數(shù)。
因為CH565的DVP接口是接收的一方,同時clk是連續(xù)送出的,所以要盡可能利用好接口上各種信號和數(shù)據(jù)格式特點,來完成每一幀圖像的接收,確保數(shù)據(jù)無誤。(DVP接口是沒有校驗機制的,也即允許存在一定程度的誤碼)
摘抄手冊中對DVP接口時序的描述:
其中我們需要關(guān)注PCLK、HSYNC、VSYNC。
JPEG模式:
jpeg格式輸出的特點是不定長,且數(shù)據(jù)經(jīng)過算法壓縮,一張圖片數(shù)據(jù)本身已經(jīng)不包含了行、列的概念,所以我們在接收數(shù)據(jù)時,關(guān)注VSYNC提供的幀起始、幀結(jié)束信號即可:
1、首先應(yīng)當(dāng)正確配置R8_DVP_CR0寄存器中的數(shù)據(jù)模式,這個比較直觀。
2、根據(jù)實際使用的sensor輸出極性,正確配置RB_DVP_V_POLAR.
3、同時根據(jù)實際情況配置R8_DVP_CR0中的數(shù)據(jù)位寬、剩余信號線的有效極性。
4、配置R16_DVP_COL_NUM,因為jpeg失去了行列概念,但是我們又需要約束DMA傳輸?shù)拈L度,所以配置該寄存器實際配置的是DMA長度,雙緩沖機制DMA,會在數(shù)據(jù)接收長度達(dá)到該寄存器定義值之后自動切換到另一緩沖區(qū),并產(chǎn)生行中斷。
5、因為CH565作為數(shù)據(jù)接收方,DVP接口是被動的,且接口上的clk是連續(xù)的,但數(shù)據(jù)又需要及時處理或者轉(zhuǎn)發(fā)走,存在訪問沖突,所以DVP接口是強制使用雙緩沖,正確配置雙緩沖地址:(注意地址對齊)
6、使能中斷,DVP是必須使用中斷的,否則很容易丟數(shù)據(jù),必須需要使用到:
行結(jié)束中斷(指示一次DMA傳輸完成)
幀結(jié)束中斷STP_FRM(指示一幀的結(jié)束,此時通常存在末尾數(shù)據(jù),這部分?jǐn)?shù)據(jù)又不足以觸發(fā)行結(jié)束中斷)
幀開始中斷不是必須的,這取決于應(yīng)用上
7、使能DMA、使能DVP
中斷服務(wù)函數(shù)處理:
當(dāng)中斷源是ROW_DONE行結(jié)束時,則表示前面配置的R16_DVP_COL_NUM長度達(dá)到,此時有該長度的數(shù)據(jù)已經(jīng)在ram中,可以被處理或者轉(zhuǎn)發(fā)。且此時雙緩沖進行切換。
當(dāng)中斷源時STP_FRM時,表示一幀圖像結(jié)束,此時末尾部分?jǐn)?shù)據(jù)也已經(jīng)保存在ram中,但此可能長度沒有達(dá)到R16_DVP_COL_NUM的配置值,通過讀取R16_DVP_COL_CNT,減去之前的 行數(shù)量*R16_DVP_COL_NUM即可準(zhǔn)確得出末尾數(shù)據(jù)長度。
前面提到的幀起始中斷,不是必須的,因為只要有幀起始,前面必然會有幀結(jié)束,因為CH565使能DVP的時候,sensor通常已經(jīng)在連續(xù)輸出數(shù)據(jù)了,且不能保證使能瞬間,sensor輸出的正好是一幀起始,所以,代碼邏輯中,始終應(yīng)該結(jié)束幀結(jié)束來刷新某些變量。
不清楚能不能用dvp接口連接并行adc?我看好像有用stm32的dcmi接口實現(xiàn)的
我也關(guān)注這個問題,想接20MHz左右的并口ADC,例如AD9235,不知是否能這樣用?
CH569的DVP接口類似DCMI,驅(qū)動OV2640這樣的攝像頭模塊是沒有問題的,但目前還沒有應(yīng)用于ADC方面的測試。您可以考慮找一些DCMI實現(xiàn)的方式,分享一下看看能否適用。
我仔細(xì)看了下,有個不確定的地方
在DVP接口中,如果傳輸?shù)氖荍PEG格式的格式數(shù)據(jù),它是只關(guān)注場信號,如果場信號一直有效,DVP的DMA是不是會一直傳輸下去??
(如果DMA不停的話,貌似就能用MCO作為采集頻率,用DVP直接采集并口ADC了。)
還有CH32V307和569的DVP是一樣的吧?