1.硬件
首先了解基本硬件,就是摄像头的供电
接着是上电时序
这里需要注意的是,XSHUTDN就是reset引脚,低电平复位,正常工作的时候,应该是高电平
PWDNB是和复位脚差不多功能的,给寄存器复位,所以这两个,比较关键,我这里是使用了DOVDD和XSHUTDN连接的情况,所以驱动中power_on处理的时候,拉高reset以后,不延时,直接拉高pwdn,然后延时,才能让模块上电
dvdd avdd iovdd上电时序其实要求并不严格,之前我一直读取不到模块id,就是因为我们分开供电XSHUYDN和PWDNB,而驱动中是先拉低reset然后拉高延时2Ms再拉高pwdn,所以导致系统一直没有工作起来,去读i2c的时候返回-5
这里rk也有案例
实际上很简单,驱动中probe以后,就开始检测获dts配置,然后就power_on执行上电流程,上电以后,第一步就是check_id,也就是读取摄像头id,如果i2c通信异常,那么久无法进行下面的工作,直接return
经过一番折腾,i2c正常读取id,解决了前面最关键的一步
切记:如果i2c读取不到,确保硬件电压,时钟正常,然后基本上就是时序了
如果硬件都没问题,但是读取的时候没有一直错,可能先考虑给一个for循环,循环发送0x00-0xff,看看有没有回应,避免因为地址错误这种低级错误
2. DTS配置
下面是我关于ov8858的配置,其实可以直接参考文档,在rk工程源码下
RKDocscommoncameraHAL3
先记录到这里,基本的到这一步,就可以读取id,进行mipi传输