问题:某IPC摄像头项目配置Hi3516C+JX-F38PA sensor,调试板子时,I2C通信不成功,不出图。
硬件调试:
1、先确认下SOC+sensor这部分原理图的正确性(如电源,I2C,复位脚,电源控制脚,MCLK等)。
2、确认原理图正确后,用万用表量了2.8V,1.8V,1.5V电压(1.5V就是sensor内核电压,有的sensor是1.2V。也有内供电源的。),测试电压OK。
3、用示波器量SOC给到sensor的MCLK,测试MCLK是24MHz(通常设置sensor clock频率为24MHz,或27MHz),测试OK。
4、用示波器量SOC到sensor的SCL、SDA数据,测试波形是OK的。
5、重新确认命令i2c_read 0x1 0x81 0x844 0x845 0x2 0x1的正确性,I2C地址(sensor规格书有对应的I2C的读写地址)和命令格式都是OK的。
串口输入命令i2c_read 0x1 0x81 0x844 0x845 0x2 0x1时,用示波器量SCL、SDA都有对应的数据,说明命令和I2C配置是OK的。
5、重新确认了下sensor这部分的原理图,晶相JX-F38PA有个管脚PWDN,高电平有效。即高电平时,关闭sensor电源。
6、用万用表量sensor PWDN脚,PWDN电压一直为低,说明软件没有控制,且现有软件SDK上PWDN默认低。
7、串口敲入命令,手动把PWDN拉高。串口输入命令i2c_read 0x1 0x81 0x844 0x845 0x2 0x1,打印信息显示I2C通信成功。
小结:
1、晶相sensor的PWDN是高电平有效,而其他厂家(如思特威,格科微等)是低电平有效(即低电平时,关闭sensor电源)。在原理图设计及调试时,要注意区分是高电平还是低电平。
2、 晶相JX-F38PA sensor只有200万像素。
3、Hi3516C是ARM双核A7@900M。
4、I2C写地址:I2C设备的写地址是通过将设备地址左移1位来获得的。这是因为在I2C通信中,地址的最低位(第0位)被用作读写位(R/W位),其中“0”表示写操作。
5、I2C读地址:I2C设备的读地址是将设备地址左移1位后再加上1。这样,读地址的最低位为“1”,表示读操作。
I2C设备的写地址 = I2C设备地址 << 1
I2C设备的读地址 = (I2C设备地址 << 1) + 1
6、sensor 2.8V是模拟电压,对纹波和干扰要求很高。要选择高PSRR(PSRR:power supply rejection rate电源抑制比,纹波抑制比)。
7、用示波器量I2C数据时,是可以直接从波形得出写和读的具体数据。(如何数据量比较大的话,可用逻辑分析仪)。