【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
很多的sensor除了支持mipi接口之外,还支持dvp接口。实际运行过程当中,开启哪一种接口,就看i2c是如何配置sensor的。对于低分辨率的camera,dvp使用还是比较多的。但是如果分辨率比较高,例如4k 800w像素以上,那么用dvp就很吃力了,这个时候一般就是mipi接口。

1、数据传输
不管是mipi接口,还是dvp接口,都是为了数据传输使用。如果只是对sensor进行属性设置,比如分辨率、帧率、传输bit数、文件格式这些,那么还是i2c实现。一旦涉及到数据传输,一般要么是mipi,要么是dvp。
2、dvp和rgb屏幕
**本身dvp和rgb屏幕非常相似,中间最大的区别就是data的方向。**其他信号部分,rgb有的,dvp也都有。所以,大家如果有类似屏幕开发的经验,那么可以很快学会dvp接口。从信号上来说,主要的接口就是数据位、使能位、场同步、行同步、复位、数据位时钟。
3、dvp数据接口和v4l2框架不冲突
不管是dvp,还是mipi,这些都是数据传输的方法,和v4l2并不冲突。在v4l2里面,有一个video device的概念,还有一个sub device的概念。这个video device,就是camera的概念。而sub device,可以是gpio、可以是sensor。实际应用中,一般都是sensor为主。
实际camera传输之前,都是v4l2配置好、mipi/dvp配置好、dma配置好、sensor配置好,然后再进行数据传输。要关闭视频流的话,反过来操作即可。
4、soc侧配置dvp
我们对sensor的配置,一般都是通过i2c来完成的,这个很容易做到。而对dvp的配置,则是需要soc来完成。比如说,起初我们得告诉sensor,配置的分辨率是多少、图像格式是什么、帧率是多少,这样sensor才能准备好。
**不光sensor要准备好,soc这一侧也要准备好数据的接收。**相关的参数也需要告诉soc。比如,得到了分辨率信息,那么就需要把clk信息设置下去;中间根据frame长、宽的信息,配置一下行同步和场同步;开启stream之后,需要打开data enable;数据位配置的时候,需要告知soc,当前是8bit还是其他的,毕竟很多sensor还支持10bit、12bit。这样所有数据都配置ok之后,soc侧就可以接收数据了。
如果要做得更好一点,一般ip还要预留一些内部queue buffer用于8 bit data数据的存放。实际运行的时候,soc侧拿到的数据都会预先放到提前准备好的buffer里面。等到buffer积累到一定程度,再用dma把数据从buffer copy到ddr里面。这样等到一张图片放满了,就可以准备存放下一张图片了。如果一张图片满了,还可以interrupt提醒一下上层应用,告知可以提取data了,当然这些都是soc侧ip的处理工作了。
上面这些内容基本上都是可以根据rgb屏幕的经验,逆向反推过来。实际运行的时候,也是根据这些交互的逻辑,去准备对应的软件驱动代码。
5、低端带isp的sensor
很多中低端的sensor,本身是带有isp的,遇到这种情况的话,其实就不需要soc带isp了,例如ov5640。那么这些sensor连接到soc之后,对soc的要求就很低了。这样只需要一些网络接口、编解码接口、屏幕接口,就可以用这些sensor来做很多的产品了。很多的mcu现在也可以连接dvp的sensor,但是由于这些mcu普遍没有编解码和网络传输,所以应用方面,带camera sensor的场景,还是以soc为主。