查看: 5861|回复: 0
收起左侧

摄像头驱动0V7725学习笔记连载(三):0V7725 SCCB时序的实现

[复制链接]
发表于 2017-2-22 17:31:02 | 显示全部楼层 |阅读模式
       上一篇博客主要是讲解了关于需要配置的重要寄存器,那么接下来就是要通过SCCB接口实现对OV7725的配置。参考《OmniVision Serial Camera Control Bus (SCCB)Functional Specification》这篇技术手册,内部讲解了相关的SCCB时序的要求,实际上,完全可以按照I2C的时序来进行编写程序。、
0 z* ^, M: j. s  ^3 u1 |! Q
SCCB接口时序
双总线的起始和停止信号如下图所示。其中SCCB_E是针对多个slave device设定的一个使能信号,这里只针对一个sensor进行数据的配置。所以此信号可以不使用。
5 R9 w% n! H) v3 v% i

; K! b6 t9 e3 Y: Z% U3 D+ S
  上述是关于起始和停止信号时序图。

$ p$ u% P. ?0 B) b* A( N& K# O0 a5 s$ N+ U+ C8 O* Z5 ^1 m+ T) C

* ?. _% b% X, M' D  d7 M
  上图是写入寄存器的相关设置,先设置ID地址,然后再写寄存器地址,最后写入寄存器的值。
  第一阶段:对于OV来说设备地址为0X42,写是0X42,读是0X43;
  第二阶段:写寄存器地址,这个地址是你需要设置的OV的地址值;
  第三阶段:写入寄存器的值,这个是对应第二阶段所设置的寄存器的地址值;
  对于读出寄存器,手册有这么一段话的描述。

5 s" I5 I1 f7 s+ B
# M+ w* }, {/ P! {6 a8 C+ W; k- w# z
& y  s  h# V# n; |  C
8 T7 Q3 p3 C$ x& g+ ?, q; h1 _0 l- a
  所以对于上图中的读出阶段,打算用四个阶段去实现,一个是利用同写入寄存器一样的前两阶段,包括ID的地址和所需设置的寄存器地址,再加入两个阶段,一个是再次读入ID地址,然后读出数据值。如下图所示:
: X, B' K' H3 m7 I! _. u6 G
% K. X  z4 x( K1 g% |
  对于OV寄存器而言,有些寄存器的值适合读,有些寄存器的值适合写,所以在设置OV寄存器时要格外注意各种数据的格式配置。下面就实现I2C接口进行,并对OV7725进行寄存器配置。
    上图是实现SCCB接口的整体框图,其中并未画出全局时钟和全局复位信号,再设计时需要进行全局时钟和全局复位控制。

/ A$ u4 V" `' ]# b% Y+ ]! Z0 f0 K3 h" S9 a4 j5 u" R, J. T) A
  实现代码如下:
  I2C_OV7725配置模块
* S% m( t8 }  \+ u7 k* ~
& ^4 j2 h* ]6 @. p6 N2 M

3 w: S5 w$ J0 W2 N+ d& g
  上图是简要列举了参数的设置,其中注意寄存器12,37行,是进行复位,64行是对输出形式的设置。其他的寄存器设置可以参考上一篇博客。

. R& a0 f8 O( j- |( ^% l8 _2 n4 B/ J

" M8 x3 C' b1 y
  手册上面规定,在所有寄存器复位之后,需进行最大不超过1ms的延时,最大限度的保证稳定。
1 r3 {' m3 z3 J" F1 y: m
; `  L. A# K+ P; G, u
/ f3 F9 E. P: o- U
+ e$ O3 t" z# U4 X7 s
  上图是端口的声明和完成1ms的上电延迟。
8 ?* k$ @# r8 X5 o+ N
  

+ F1 k0 G( q; p) c9 C
上述是完成 SCL的生成和在时钟的中间位置设置使能信号,仿真图如下图所示:
4 W& Y  b7 f7 G! x: p
  
& K5 F3 r( q. Q: M% D* H9 [7 K; f1 _
状态机的各个状态。
  

5 p& I' Y+ c7 @1 }  j# y* |
上图是状态机的第一部分,对于手册中有提及过,没改变一个寄存器,需要最大为300ms的延时,最小和典型值没有说明,只要小于等于300ms即可。利用 i2c_transfer_end和i2c_ack来实现这一延时。其中i2c_ack是各阶段的总响应。下面会提及。
% B* p+ S7 M, o
$ Z/ ]$ r  E& ~  m

. ^6 ?4 D- s7 A1 c$ n- z- h
  188行中需要注意的是,前两个寄存器是用来产生厂商ID的,只读,所以需要判断。

9 T5 C. F3 c+ P/ O0 A

& U4 Q# k& V. x6 O
6 K& ~* x! j4 Z. u# m) e! b/ Y! ~  a. i9 S9 E% P2 u
7 c0 s! a5 ~/ ^; A1 r, z
1 P, y4 P7 h' d" t% {! I' H/ |; F$ ~
上图中i2c_stream_cnt是用来计数数据位,使得发送时从高位向低位发送。
# }# E0 d- ^) d( R, U! g6 n4 h3 t
  A: X. k- h, l
上图中i2c_sdat_out 作为输出数据寄存器,用来接收配置寄存器模块发送过来的数据。
+ r. e$ p6 c% B  U
; {9 w4 Z. D) |$ n; v6 R
  

. @  B  d8 ^. N
! I2 v3 z  ]6 O9 V& |
上图是对I2C的ack信号做出的响应,420~422行做出的反应是高阻态,下面是整个SCCB实现的接口modelsim仿真图。

! F1 k5 d' X8 m5 G) S+ _% T& D

: V: P: o! B, x1 [8 Z9 U2 E
3 I& R; f* x1 y; X) {, \9 x% m  @- V
4 X4 }3 X; X6 U' {0 ]$ g2 e8 R: w1 G
高级模式
B Color Image Link Quote Code Smilies @朋友 |上传

本版积分规则

在线客服

客服电话

欢迎来电咨询

188-9985 8350

微信关注

手机APP程序:
扫码下载访问

微信公众平台:
摄像头之家公众号

微信小程序:
摄像头小程序

返回顶部

QQ|站点统计|小黑屋|手机版|Archiver|摄像头模组论坛网-摄像头方案网CCM99 ( 粤ICP备18155214号 )

Powered by Discuz! X3.4 Licensed© 2001-2013 Comsenz Inc.