全志平台移植camera senor时报I2C错误
在移植sensor时,最常遇到的问题是I2C通信失败,下面将就I2C通信失败问题进行相应的debug。
一、DEBUG流程
- 确认sys_config.fex中配置的sensor I2C地址是否正确(sensor datasheet中标注,读地址为0x6d,写地址为0x6c,那么sys_config.fex配置sensorI2C地址为0x6c);
- 在完成以上操作之后,在senor上电函数中,将掉电操作屏蔽,保持sensor一直上电状态,方便debug;
- 确认I2C地址正确之后,测量sensor的各路电源电压是否正确且电压幅值达到datasheet标注的电压要求;
- 测量MCLK的电压幅值与频率,是否正常;
- 测量sensor的reset、pown引脚电平配置是否正确,I2C引脚SCK、SDA是否已经硬件上拉;
- 确认I2C接口使用正确并使能(CCI / TWI);
- 如果还是I2C出错,协调硬件同事使用逻辑分析仪等仪器进行debug;
二、经典错误
1、I2C没有硬件上拉
twi_start()450 - [i2c2] START can't sendout!
twi_start()450 - [i2c2] START can't sendout!
twi_start()450 - [i2c2] START can't sendout!
[VFE_DEV_I2C_ERR]cci_write_a16_d16 error! slave = 0x1e, addr = 0xa03e, value = 0x 1
出现上述的问题是因为SDA、SCK没有拉上,导致在进行I2C通信时,发送开始信号失败,SDA、SCK添加上拉即可。
2、没有使能I2C
[VFE]Sub device register "ov2775_mipi" i2c_addr = 0x6c start!
[VFE_ERR]request i2c adapter failed!
[VFE_ERR]vfe sensor register check error at input_num = 0
出现上述的错误,是因为使用twi进行I2C通信但没有使能twi导致的错误。
3、混用 cci 和 twi
通过查看原理图确认,sensor是通过什么接口与主控进行通信的,在确认硬件连接没有问题的情况下,可查看出错时的log信息得知当前使用的接口。
- 如果当前配置使用 CCI 进行 I2C 通信,出错将会报“[VFE_DEV_CCI_ERR]”或者“[VIN_DEV_CCI_ERR]”;
- 如果当前配置使用的是 TWI 进行 I2C 通信,出错将会是“[VFE_DEV_I2C_ERR]”或者“[VIN_DEV_I2C_ERR]”;
在出现问题的时候,可以注意 I2C 的错误打印信息,看看是什么标号开头的,这样可以确定,本身应该使用 TWI 的,但却报”[VFE_DEV_CCI_ERR]“错误,这个时候可以检查,是不是关于 cci 的配置没有弄好,相应的配置没有失能或者屏蔽,或者是定义了 USE_SPECIFIC_CCI 宏。
4、sensor上电时序不对
在sensor的上电过程,加上一定的延时是必要的。在主控输出MCLK、设置电源等操作之后,立刻sensor detect读取I2C,有可能会导致I2C读写失败的。因为这个时候,senor内部硬件没有准备好,这时候读写I2C将会出错,所以需要在上电之后,加上一定的延时操作。