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

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

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

; p( d! K. w- r6 m
  上述是关于起始和停止信号时序图。

3 I, _* a; h+ {) g6 Z( d
4 [( S& b3 M3 ^8 [$ ^0 j0 m. q$ I9 t+ x! t/ C
  上图是写入寄存器的相关设置,先设置ID地址,然后再写寄存器地址,最后写入寄存器的值。
  第一阶段:对于OV来说设备地址为0X42,写是0X42,读是0X43;
  第二阶段:写寄存器地址,这个地址是你需要设置的OV的地址值;
  第三阶段:写入寄存器的值,这个是对应第二阶段所设置的寄存器的地址值;
  对于读出寄存器,手册有这么一段话的描述。

1 l7 q. C( l5 @
% T+ ~3 z* ?5 j

, H! s& M5 p) C- I; x! E. q5 d3 f- U2 h, m% \
  所以对于上图中的读出阶段,打算用四个阶段去实现,一个是利用同写入寄存器一样的前两阶段,包括ID的地址和所需设置的寄存器地址,再加入两个阶段,一个是再次读入ID地址,然后读出数据值。如下图所示:
0 w% ^. O: X, K

5 \8 Z4 z3 P+ r$ `" x# O4 k
  对于OV寄存器而言,有些寄存器的值适合读,有些寄存器的值适合写,所以在设置OV寄存器时要格外注意各种数据的格式配置。下面就实现I2C接口进行,并对OV7725进行寄存器配置。
    上图是实现SCCB接口的整体框图,其中并未画出全局时钟和全局复位信号,再设计时需要进行全局时钟和全局复位控制。

. U, f! K1 R; Z7 H3 P
# T2 n# |* _& R# r) M
  实现代码如下:
  I2C_OV7725配置模块
- o% a4 @, B# [# p. l2 P; ?
+ \5 J3 O' Q$ V, ?; G+ Q/ C

# [2 E3 U1 y3 v. n0 e
  上图是简要列举了参数的设置,其中注意寄存器12,37行,是进行复位,64行是对输出形式的设置。其他的寄存器设置可以参考上一篇博客。

. y% F0 {$ W5 r, m* G* e5 p& Y

% I. A7 ]: j0 m+ f$ |: ?( I! |
  手册上面规定,在所有寄存器复位之后,需进行最大不超过1ms的延时,最大限度的保证稳定。

7 u' S" u. S% O8 x0 m8 k
8 @) C5 G' x7 @& C" {, \0 z! l& k6 q
8 K6 ]0 z3 ]; l4 b0 C
  上图是端口的声明和完成1ms的上电延迟。

, u+ Z7 U1 v/ A9 U
  
9 S* N* y0 ?2 m7 O7 v; @+ r
上述是完成 SCL的生成和在时钟的中间位置设置使能信号,仿真图如下图所示:

+ j$ Y' z5 l' r+ p0 Z4 z* N0 d
  

$ J/ o& h0 c! T: |8 D$ h& }$ r
状态机的各个状态。
  
+ }: U" p. j7 V3 ]1 d
上图是状态机的第一部分,对于手册中有提及过,没改变一个寄存器,需要最大为300ms的延时,最小和典型值没有说明,只要小于等于300ms即可。利用 i2c_transfer_end和i2c_ack来实现这一延时。其中i2c_ack是各阶段的总响应。下面会提及。

$ T  O! D. n2 U2 ^( J1 l/ ]

6 r# ~& I: W, j* G: Z3 j9 ]& Q  l5 C$ ^5 i: d
  188行中需要注意的是,前两个寄存器是用来产生厂商ID的,只读,所以需要判断。
# c6 v- |- l2 L* r

7 k. J4 C% {3 R# o
# b% B4 F5 f; c% k% C
- W4 i& k" ~3 F( O. H. ]( Y0 F  I+ U+ l1 S$ F
# r$ h8 d0 B5 r: L
上图中i2c_stream_cnt是用来计数数据位,使得发送时从高位向低位发送。
) P6 v) ?. E  N3 ~% w1 D: @

1 V+ ^  K) P5 D- g3 o上图中i2c_sdat_out 作为输出数据寄存器,用来接收配置寄存器模块发送过来的数据。

) p+ W, X2 D# ?2 _7 l6 ]
, X; v1 ]8 S) C& E
  
" Y1 \8 O0 |( O8 R% a/ |' O
# y3 d# l" Z1 ?  u* {" y
上图是对I2C的ack信号做出的响应,420~422行做出的反应是高阻态,下面是整个SCCB实现的接口modelsim仿真图。

5 b$ v( X; u# f3 f2 P% Y

* e& V* T% d. c/ W3 Q2 Z) T, ^$ P- c5 U& ]

2 c0 n- a# B9 S: o' ^
高级模式
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.