ds90ub934_i2c_write(0x4C, 0x01);
ds90ub934_i2c_write(0x5C, (0x58<<1)); // 933的Alias, 0x58 是 测量到的933-ID(0xB0)右移1位
ds90ub934_i2c_write(0x5D, (0x10<<1)); // 摄像头的I2C地址(即远程从机): 写0x20, 读0x21, 即7位地址为0x10
ds90ub934_i2c_write(0x65, (0x10<<1)); // 摄像头的alias
读取<远程933寄存器>正确, 认为串行通道没有问题;
此时, 示波器测量<摄像头的I2C引脚>, 发现I2C波形不对(不是常见的I2C波形);
如果将摄像头0x10地址, 随机改为0x11, 摄像头的I2C引脚波形是正确的, 只是一直提示NACK
为什么0x10地址, I2C波形不对? 哪里出错??
Kailyn Chen:
您好,0x10<<1之后写0X20是对的。
0X10的I2C波形是什么样的? 附上波形看下。
另外,0X20的I2C波形正常吗?别随机改0X11,0X11不是它的从机地址,所以收不到ACK信号。
,
Zhang Qing:
,
Zhang Qing:
Sensor厂家说的地址:0x20 是 示波器上显示的地址, 其7位地址 应该是 0x10
开始我是向 934写入0x20,波形OK, 但收不到 Sensor应答;Sensor厂家说 地址不正确
于是我改成 向 934写入0x10, 但此时 波形有点奇怪!
,
Kailyn Chen:
您好,先确认7bit地址, 厂家说的地址,是否指的是在最高位补零?但实际I2C从机地址需要左移一位,写操作在最低为补零。
比如如果厂家说0X10, 7bit地址为0010000,这样的话I2C写地址为0X20.
但厂家如果说地址为0X20,那么7bit地址有可能是0100000,这样的话,左移一位的话,I2C 从机地址应该为0X40.
,
Zhang Qing:
最后发现: 0x10地址 对应的波形是正常的(与手册上常见的I2C波形有点不同, 也可能是示波器捕捉时机有关), 只是获得的寄存器值不对;
为此修改933/934的I2C-High/Low参数, 即可获得正确的寄存器值;
,
Kailyn Chen:
非常感谢您的反馈。