首先要配置OV7725攝像頭的寄存器,遵循的是SCCB協議,配置之前需要1ms的時間等待,保證系統穩定,而且剛開始要丟棄前10幀的數據,因為認為前10幀的數據是不穩定的,圖1就是數據手冊上關於這一點的描述。
SCCB協議已經在上一篇博文中仔細研究過了,詳情參考 http://www.cnblogs.com/aslmer/p/5965229.html
圖 1
OV7725攝像頭可以輸出RGB,YUV等多種格式的數據,在這里我們以數據格式為RGB565為例,
RGB565即每個像素點都是16位的,由 圖2 可以知道從攝像頭輸出的數據並不是16位的,而是8位的,
先出來第一個字節,緊接着再出來第二個字節,占用的是D2-D9這八個數據輸出口,
一個完整的16位數據為{first byte ,second byte},因此我們需要把這兩個字節拼接成16位的數據,然后再應用。
圖 2
配置完寄存器后,通過SignalTap邏輯分析儀捕捉一下實際出來的數據流如圖 3,格式為:RGB565,640*480的像素,cmos_href高電平有效
cmos_vsync 是場同步信號,即一幅圖像,
cmos_href 是行同步信號,即圖像的一行,
cmos_data是輸出的數據
一共有480行,每行有640個像素點,這一點和VGA的時序類似
通過 圖3 可知在cmos_href有效時才有數據,否則輸出為0,我們想知道一個cmos_href下一共有多少個數據,因此將圖 3 中的第 2 個 數據流放大,如圖 4 、圖 5 所示。
圖 3
圖 4
圖 5
我們先計算一下看每行是不是640個數據:2162 - 882 = 1280,為什么不是640(我們配置的是RGB565,每位是16位,但是攝像頭是8位輸的,即一個16位的數據需要2個8位數據),1280/2=640.這和我們前面分析的是一模一樣的。
因此驅動完攝像頭並不能完事了,要將數據整合成我們需要的16位。
仿真的結果如下:
1、丟棄了前10幀數據。
2、檢查數據是否拼接成功。
最近一周時間都沒怎么自學FPGA了,突然不想寫開題報告,不想做光學、熱學仿真,感覺有那么一丟丟煩,
干脆暫時放下那些,學習學習我的FPGA,心里才能覺得踏實。