最近工作中接了一款OV7725的sensor,由于平台已经接过很多的家的sensor也就没有太当回事。问题出现的很奇怪,再看了 register map后基本确定了要尽心register  R/W测试的三个地址也就是0x00  gain增益寄存器   0xa  0xb 两 个版本号的寄存器。运行程序之后在reg里没有发现的应该返回的数据 ,用逻辑分析仪看了下波形就是在read发出后sensor返回了 device  ID之后没有紧接着返回数据而是将总线挂起!!  然后挂载其他例如aptina   130   139 sony的138 等都可以 正确的得到数据??? 困惑之后就对比了下波形发现前面发出的波形也一致,也没有发现不符合IIC协议的,但是一个细节还是注意到,就在read的过程中 write  slave address之后一般为stop 后start,而我是做了一个restart的操作代替了,这样做在多主机的 IIC  bus中是有好处的  ,可以不释放总线免得被抢走控制权。随后就想是不是这个导致的呢,将restart  改为 stop   start  之后运行程序果然得到了返回的数据。问题是确定了,就想不明白这样怎么会产生问题呢 ,IIC是支持的啊。后面看了下 7725的手册 发现了问题。OV使用的不是标准的IIC协议控制寄存器的读写,用的事SCCB协议,算是一个精简的IIC协议,而这个协议是部分兼容 IIC的。连个区别:1.不支持restart   也就是导致我无法读出的罪魁了,stop后必须发送start 否则不返回数据。2. 不知处多字节 读写  对于sensor来说这种情况不多  。所以对于自己熟悉的东西更要谨慎细心,稍不注意就会掉进陷阱。后面附件添加了sccb的协议供参考。

05-22 14:21