From 8def8e8126086046f816355fe238e090befffecc Mon Sep 17 00:00:00 2001 From: "ithink.chan" Date: Mon, 9 Mar 2020 10:19:36 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=20OV2640=20=E8=B5=84?= =?UTF-8?q?=E6=96=99.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: ithink.chan --- Hardware/Peripherals/Camera/OV2640.md | 28 +++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 Hardware/Peripherals/Camera/OV2640.md diff --git a/Hardware/Peripherals/Camera/OV2640.md b/Hardware/Peripherals/Camera/OV2640.md new file mode 100644 index 0000000..fe799a3 --- /dev/null +++ b/Hardware/Peripherals/Camera/OV2640.md @@ -0,0 +1,28 @@ +# 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中断服务函数中我是使用状态机来实现读写的。状态机,有木有!!!从机压根不知道你使用的是状态机还是战斗机,那如何区分读写呢?没错,地址中的读写位。那么意味从机接收到地址位后读写就划分好了。那这个问题就不攻自破了。(这与不久之前那惨绝人寰的案子及其相似,现在看来构成的连环杀人案的凶手就是他了,斗胆敢再次行凶 ,枪毙了!!!)