接前一篇文章:ESP32-S3接OV5640出现“Failed to get the frame on time”以及“NO-SOI”、“NO-EOI”问题的定位过程与最终解决(3)
上一回讲到,笔者使用唯一不会出现“Failed to get the frame on time”的OV5640摄像头,在进行获取一帧图像即拍照的时候时间过长。查代码之后,发现就是乐鑫的官方代码,这套代码已经在多款摄像头开发板和不计其数的摄像头模块上使用过了,其正确性毋庸置疑。那么接下来应该怎样进一步查?
好早笔者已经有了之前正确的板子,新旧板子只是存在以下几处差异:
1)SCCB的SCL和SDA引脚不一样;
2)新版硬件使用了PWDN和RESET引脚,而老版硬件没有使用(接死了);
3)供电不一样。老版硬件是2.8V供电,新版硬件为了省电,改为了1.8V供电。
既然只有这几个区别,那就好办了。将同样的测试程序(代码见前文)在新老两个板子上都跑一下(当然,引脚要进行调整),看一下现象。实测发现:
1)老板子上执行测试程序,功能正常,获取一帧的速度很快;
2)老板子上执行测试程序,获取一帧的速度2~3秒。
走到这里,从宏观现象上来分析,应该不是软件问题了,更多怀疑硬件的问题。即使万里有一,仍然是软件问题,也是与上边这几处差异有关。
针对这一问题与乐鑫的技术支持沟通,得到的建议是:该问题看起来更多的是个硬件问题。测试下 sensor 的VSYNC 、HREF 管脚是否有正常的波形输出。他们决定了是否触发 esp32 上的 start_recv、end_recv。
说来也确实挺惭愧的,这个问题查找至今,都一直没有是用示波器实际测量一下信号,人家乐鑫这个建议非常好。笔者在硬件同事的帮助下测量了XCLK、VSYNC、HREF等信号。经过测量,发现:
XCLK两个板子都一样;VSYNC老板子出现很频繁,1秒钟有2~3次左右,而新板子确实是2~3秒左右才出现一次。这就解释了为什么新板子2~3秒才获得一幅图像。
那么到这里又有两个怀疑和排查的方向:
1)硬件层面,根据《OV5640_Camera_Module_Hardware_Application_Notes》仔细看一下硬件层面有没有没有注意到的;
2)软件层面,对比一下初始化以及拍照过程中的日志,看一下新旧两个版本硬件的摄像头配置是否存在差异。
那么到底是硬件层面还是软件层面的问题呢?请看下回。