平台:展讯7730
模块:camera
IC: OV5648
问题:AF无功能
现象:客户新打样OV5648的camera, 发现AF无功能,更换IC之前AF功能正常,更换为OV5648之后AF无功能。
分析过程:
前提:在模组的pin定义中,有两个和AF有关,一个是AF 的电压, 一个就是AF PWN(GPIO),AF能正常工作的条件就是:电压正确配置(2.8V),AF PWN拉高。
1、首先检查驱动代码,检查AF 两个pin的配置是否正确,经检查都没有问题,换成另一家IC的模组,同样的软件,AF可以正常工作。
2、检查硬件,分别测量 IOVDD, DVDD, AVDD,以及AF 供电电压和AF PWN等5个pin的电压, 经过测量发现,5个电压全正常,尤其是AF pwn这个GPIO,因为只有这个GPIO拉高,才能enable AF 功能。因为AF PWN这个GPIO有电压输出,说明软件在配置上方法是对的。
3、验证camera模组的打样正确性,基带同事帮忙短接了9pin(mian camera pwn)和10pin(AF PWN),这时竟然发现AF可以正常工作了。(找到一种临时解决方案)。
4、这时用示波器分别测量无短接和短接两种情况下,main camera pwn和AF PWN两个pin脚的上电顺序,发现在无短接的情况下,AF PWN的上电时间要比main camera pwn早那么一点点,而短接情况下,两个pin几乎就同时上电了,这时就猜想是不是 AF PWM一定要在AF VDD正确配置后再拉高,AF才能正确工作呢?对于我们常见的camera pwn 都是在 IOVDD, DVDD, AVDD 3个电压正确设置后才拉高/拉底 pwn。
为什么会出现这样的情况?
是因为AF PWN这个GPIO的拉高操作是我在kernel的probe函数里拉高的,而不像 camera pwn似的,在camera的驱动的上电函数里拉高/拉低。
5、查看模组使用的马达(DW9714)的上电时序图,发现AF pwn的拉高动作要比 AF VDD电压上电后 delay 2ms,然后再delay 至少11ms后再进行马达I2C的通讯。后面就来验证在软件上如果按照这样一个上电时序图进行配置,AF能否正常工作。
6、软件修改其实很简单,根据camera PWN 或 reset的函数接口,写了一个操作AF PWN的接口函数(展讯平台,并没有AF PWN这个GPIO的接口函数,要自己添加),然后设置正确的delay,AF就可以正常工作了。注意的是,camera退出的时候,在去电的函数里,要把AF PWN再拉低,如果没有这个操作,只能进入camera的第一次,AF是可以正常的工作的,退出后,再进入,又不可以了。原因就是如果不拉低,第二次又是再上电之前已经把AF PWN拉高了。AF一直处于一个拉高的状态了。