攝像頭驅動0V7725學習筆記連載(三):0V7725 SCCB時序的實現


  上一篇博客主要是講解了關於需要配置的重要寄存器,那么接下來就是要通過SCCB接口實現對OV7725的配置。參考《OmniVision Serial Camera Control Bus (SCCB)Functional Specification》這篇技術手冊,內部講解了相關的SCCB時序的要求,實際上,完全可以按照I2C的時序來進行編寫程序。

SCCB接口時序

雙總線的起始和停止信號如下圖所示。其中SCCB_E是針對多個slave device設定的一個使能信號,這里只針對一個sensor進行數據的配置。所以此信號可以不使用。

wps2377.tmp

wps2398.tmp

wps23B8.tmp

  上述是關於起始和停止信號時序圖。

wps23C9.tmp

  上圖是寫入寄存器的相關設置,先設置ID地址,然后再寫寄存器地址,最后寫入寄存器的值。

  第一階段:對於OV來說設備地址為0X42,寫是0X42,讀是0X43;

  第二階段:寫寄存器地址,這個地址是你需要設置的OV的地址值;

  第三階段:寫入寄存器的值,這個是對應第二階段所設置的寄存器的地址值;

  對於讀出寄存器,手冊有這么一段話的描述。

wps23D9.tmp

wps23EA.tmp

  所以對於上圖中的讀出階段,打算用四個階段去實現,一個是利用同寫入寄存器一樣的前兩階段,包括ID的地址和所需設置的寄存器地址,再加入兩個階段,一個是再次讀入ID地址,然后讀出數據值。如下圖所示:

image

  對於OV寄存器而言,有些寄存器的值適合讀,有些寄存器的值適合寫,所以在設置OV寄存器時要格外注意各種數據的格式配置。下面就實現I2C接口進行,並對OV7725進行寄存器配置。

image

image

    上圖是實現SCCB接口的整體框圖,其中並未畫出全局時鍾和全局復位信號,再設計時需要進行全局時鍾和全局復位控制。

  實現代碼如下:

  I2C_OV7725配置模塊

wps2A97.tmp

wps2AB7.tmp

wps2AC8.tmp

  上圖是簡要列舉了參數的設置,其中注意寄存器12,37行,是進行復位,64行是對輸出形式的設置。其他的寄存器設置可以參考上一篇博客。

wps39.tmp

 

 

  手冊上面規定,在所有寄存器復位之后,需進行最大不超過1ms的延時,最大限度的保證穩定。

image

  上圖是端口的聲明和完成1ms的上電延遲。

image

  上述是完成 SCL的生成和在時鍾的中間位置設置使能信號,仿真圖如下圖所示:

imageimage

  狀態機的各個狀態。

 

 

 

 

 

 

 

image   上圖是狀態機的第一部分,對於手冊中有提及過,沒改變一個寄存器,需要最大為300ms的延時,最小和典型值沒有說明,只要小於等於300ms即可。利用 i2c_transfer_end和i2c_ack來實現這一延時。其中i2c_ack是各階段的總響應。下面會提及。

image

 

  188行中需要注意的是,前兩個寄存器是用來產生廠商ID的,只讀,所以需要判斷。

image上圖中i2c_stream_cnt是用來計數數據位,使得發送時從高位向低位發送。

image 

image上圖中i2c_sdat_out 作為輸出數據寄存器,用來接收配置寄存器模塊發送過來的數據。

image

image

image

image

  上圖是對I2C的ack信號做出的響應,420~422行做出的反應是高阻態,下面是整個SCCB實現的接口modelsim仿真圖。

image


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM