29 lines
1.7 KiB
Markdown
29 lines
1.7 KiB
Markdown
# OV2640
|
||
|
||
OV2640 是一款摄像头模块,通过 SCCB(类似 I2C)总线进行操作,通过xxxxxxxxxx进行图像输出。
|
||
|
||
## SCCB 与 I2C 的差异
|
||
|
||
总线所值得拥有的三态请不要抛弃。(做人要厚道)
|
||
|
||
SCCB(Serial Camera Control Bus)是和I2C相同的一个协议. 相同,有木有!!!现象透露本质啊,IIC根本没有摸透。
|
||
|
||
从机地址位最后一位R/W位。既然是读写位,那么意味着:从机先接受地址位,然后根据地址位来判断接下来的动作(读还是写)。其中IIC可以连续读多个字节,SCCB读单字节。
|
||
|
||
以下为SCCB读写逻辑(OV2640地址默认0x60)
|
||
|
||
```logic
|
||
写寄存器 Start+0x60+寄存器ID+数据+Stop
|
||
读寄存器 Start+0x60+寄存器ID+Stop Start+0x61 + 所读数据+Stop
|
||
```
|
||
|
||
错误方式读寄存器:
|
||
|
||
```logic
|
||
读寄存器 Start+0x61+寄存器ID+Stop Start+0x61 + 所读数据+Stop
|
||
```
|
||
|
||
纠正突破:
|
||
|
||
在通过示波器观察读写波形时可以看出 写成功,但是读失败。其中读寄存器波形当发送完寄存器ID时第九位会出错(从机拉总线)。此时没有意识到0X61是读操作,后面紧跟读数据,而不能发送寄存器地址。当尝试用硬件IIC来实现时恍然大悟。IIC中断服务函数中我是使用状态机来实现读写的。状态机,有木有!!!从机压根不知道你使用的是状态机还是战斗机,那如何区分读写呢?没错,地址中的读写位。那么意味从机接收到地址位后读写就划分好了。那这个问题就不攻自破了。(这与不久之前那惨绝人寰的案子及其相似,现在看来构成的连环杀人案的凶手就是他了,斗胆敢再次行凶 ,枪毙了!!!)
|