SCCB协议下ov7670调试

来源:互联网 发布:装企管理软件 编辑:程序博客网 时间:2024/04/28 19:06

花了一整天的时间终于完成了SCCB的读写,并成功在瑞莎RX23T上读取了图像,在这里记录一下调试过程。

OV7725摄像头只能作为从机,通过SCCB协议配置内置的201个寄存器。

I2C基础部分请参考:[(原创) 巩固理解I2C协议(MCU,经验)](http://www.cnblogs.com/hechengfei/p/4117840.html)


1.SCCB与I2C区别

SCCB与IIC的区别:
1.1 写操作一样,都是

  1. Start
  2. 发送slaveAddress
  3. ACK
  4. 发送REG Address
  5. ACK
  6. 发送Data
  7. ACK
  8. Stop

1.2 其他操作一样,ACK、NACK等


1.3 读操作不同
而对于I2C,在发送了寄存器地址后,可以不发送停止条件,直接启动下一次的传输。
SCCB不支持repeat start,因为SCCB没有重复起始的概念,因此在SCCB的读周期中,当主机发送完片内寄存器地址后,必须发送总线停止条件。不然在发送读命令时,从机将不能产生Don’t care响应信号。即每一个传输都要有开始和结束来释放总线 (start + sotp),这也是SCCB与I2C不同的一个地方。

——在这里卡了很久,给SCCB加了stop部分的信号后数据就能读回来了。


2、数据传输

2.1 写时序
主要说明请参考1.1节。

写操作是三个阶段构成一个传输的写,每一阶段都是9位,具体如下:

ID地址(7位ID地址+1位读写控制+don’t care) + 要写的寄存器地址(8位寄存器地址+don’t care)
+要写入的数据(8位数据+don’t care)

其中,“don’t care”可以是任意类型的信号,ACK、NOACK等都可以。

要强调的是ID地址,写为0x42,读为0x43 , 0x42即ID地址的读写控制位为0,0x43即ID地址的读写控制位为1

总结为: start + ID地址(0x42)+ 寄存器地址 + 数据 + stop


2.2 读时序

读时序分为两个阶段

  1. start+ID地址(7位ID地址+1位写控制+don’t care)+ 可读的寄存器地址(8位寄存器地址+don’t care)+stop
  2. start+ID地址(7位ID地址+1位读控制+don’t care)+指定寄存器里面的数据的数据(8位数据+NA)+stop

完成一次数据读取。
总结为: start1+ ID地址(0x42)+ 寄存器地址 +stop1+start 1 +ID地址(0x43)+ 数据 + stop2


3.调试

3.1调试注意事项:
ov7670的SCCB的最大时钟频率为400kHZ,调试时,请严格按照时序图中时间要求进行信号的读取和接收。一般的调试工具可以选择示波器和逻辑分析仪,这样可以极大的加快调试速度。

这里写图片描述

在ov7670手册的相关寄存器中,有几个不可修改的出厂值,可以通过读取这几个值,确认SCCB时序的正确性。

可以进行读取的寄存器地址为 0x0A, 0x0B, 0x1C, 0x1D

这里写图片描述

这里写图片描述


3.2 测试结果
当时序正确时,逻辑分析仪可以直接给出相关的时间片下的值,很方便。
这里是读取寄存器地址为0x0B的时序图,成功返回的结果为0x73,(手册中的值是错的)。
这里写图片描述

这里是读取寄存器地址为0x1C的时序图,成功返回的结果为0x7F。
这里写图片描述

原创粉丝点击