手头有一个Imx6的开发板E9,带有Dvp摄像头接口,这个板子上Dvp接口是双排针,飞线很方便,查看Imx6的TRM,确认Imx6的Dvp接口支持的pclk非常高,最高能到240Mhz,于是再这个Dvp接口上做了很多并行摄像头接口的测试工作,这里把前期的调试记录汇总到一起,以便参考。

Fpag dvp输出极限频率

2017-08
后续又做了一下测试,对spartan6输出管脚的信号约束进行了各种尝试。确认,在3.3V IO电平的情况下,Imx6端可以稳定接收到图像信号的频率大概是160Mhz,如果pclk高于这个频率,则图像就会时序错乱,输出各种样式的花屏。应该是更高的频率必须使用更低的IO电平了才能实现了。
另外就是E9这个板子 dvp接口的干扰问题,io之间串扰能到好几百mv,中间测试的过程中,反复因为这个串扰导致 图像错乱。 dvp不工作, iic跑不通。出过两次之后就系统的定位了一下,确认串扰是在E9板子上产生的。

Fpga输出dvp信号约束

2017-05-17

  1. dvp输出信号,pclk 小于等于130Mhz,imx6接收图像无绿条纹,pclk大于135Mhz,则imx6接收到的图像有绿条,少则十来条,多则整屏都是,只能看到小部分图像。
  2. 修改 ucf,DRIVE = 2,8 两个值都没用。
  3. 去掉 DRIVE 约束, 增加 SLEW = fast, PCLK=150M,4路图象输入,图像显示正常 4,去掉 DRIVE 约束, 增加 SLEW = fast ,PCLK =150M,5路图像输入,图像显示正常
  4. 修改为16bit,720PX5 输出,时序无问题,图像稳定(基本确定后续上MIPI接口,带宽足够) 存在起始位置对不齐的bug,后续还要修改

Fpga Fifo容量测试

Dvp输出时,dvp输出时序跟ddr之间需要一个输出行缓存usbfifo,这个行缓存最初设计时64bits x 1K。
Camera输入时,cam输入时序跟ddr之间需要一个输入行缓存camfifo,这个行缓存最初设计是32bit x 2k。

减小usbfifo大小,usbfifo减小到 64bits*512,工作正常,总的ramb16b块为30个,满足 xc6slx16的容量,修改fifo的过程中,发现 dr_fifo.v 中整个逻辑的 fifo空满判断的大量运算是错的。但是整个工程长时间也运行下来了,真是奇葩。

20170518
减小camfifo大小,camfifo减小到 32bit*1K,目前看工作也正常。 总得ramb16bit块为20个。

E9板干扰1

2015-05-05
在fpga中将CK的逻辑测试完成后,需要LZ(BB)协助调试驱动的bug,然后再飞线焊接了2块电路板,准备提供给LZ(BB)测试,结果发现新的板子,逻辑时钟不对,VS没有信号输出。新板子跟老板子都是排线飞的,唯一的差别是老板子飞线长4cm左右,新板子的线稍微长1cm左右。 这个时候主要怀疑是PWDN,RSTn的问题,因为CK的逻辑依赖的外部控制信号就是这俩,但是示波器发现这俩信号电平都对,只是干扰有些大,有+-六七百mV。在测试的过程中,时不时碰到VS,HS,PWDN信号,VS就会有输出,逻辑就会正常工作,这样就更怀疑是干扰的问题了。

然后给PWDN对地接了100pF电容,问题解决,时序工作正常。 估计是PWDN在逻辑中的工作方式和作用,导致了逻辑对这个信号的干扰敏感。

OV3640 on IMX6

2014-12-01

  1. 使用ov3640摄像头,仔细确认了i2c配置结果,确认,有三个地方涉及到分辨率:1.i2c配置摄像头的输出分辨率, 2.驱动程序采集的宽高,3. 应用层获取的图像分辨率。

2014-06-24调试时,第3处不能设置高于1024分辨率的问题还是存在,可能需要改MXC的配置程序。

如果2的分辨率比1小,图像会被截断。
如果2的分辨率比1大,则程序应该采不到足够的数据无法进入终端(还没严格测试实验)。
如果2和3的分辨率不一致,则ISP会对图像进行拉伸。

ov3640,配置为1280*720分辨率时,驱动配置[0][4],VS是7.5hz,负脉冲。200f用时26S。

PO3100摄像头,输出为逐行的1280x720,VS是25hz,负脉冲,200f用时8S。
xclk是24M,pclk72M,飞线的信号质量很差,不停的掉行跳帧,示波器探头碰到VS或者HS就能稳定一些。

PO3100飞线 on IMX6

2014-11-28

  1. 飞线调试PO3100摄像头,可以采到图像,但是感觉clk跟hs信号质量都不好,丢行,掉数据,如果将示波器探针放到hs上,图像就会稳定很多。
  2. 按照示波器探头的参数(输入阻抗1MΩ,寄生电容24pF),在clk跟hs信号上接一个100pF的对地电容,信号就稳定很多。

OV7725 on IMX6

2014-11-27

  1. 用ov7725摄像头连接到imx6上测试,imx6默认输出YUV视频信号,因此略过IIC部分工作。

  2. ov7725使用imx6提供的24M时钟,采集到的图像会有噪点(噪声样式与fpga驱动vga屏幕,时钟域没约束好时一样,零星的出现绿色噪点分布在轮廓线上),将示波器点到xclk信号上,噪点成倍加剧。使用板上的24M晶振,采集到的图像无噪点。但是出过一次异常,下半截有1/6左右的图像于上本部分不同步,重新焊接晶振后问题解决。

  3. 用外接24M时钟的时候,图像很问题,感觉以前ov3640,mt9v034程序跑飞可能是imx6输出的24M时钟质量不好。

imx6上接tvp5158 iic问题

2014.08.21
硬件环境:fpga扩展板跟imx6主板连接,接口为fpga输出camera接口到imx6,imx6的i2c接口连接到fpga板子上的tvp5158芯片,配置其工作状态。 早先用相同的方法连接过fpga板子与dm3730主板。接口仍然是1个camera接口,1个i2c。 dm3730与fpga相连,3730的程序能够正常的配置tvp5158,毫无问题。 imx6在连接fpga之间,也连接了ov3640,mt9v034两个摄像头板,i2c工作都没有问题。

将imx6跟fpga相连,把3730上的i2c配置tvp5158的程序移植到imx6上(去掉两个多余的头文件,改变一下i2c通道设备号,其余完全不变)。i2c程序始终运行不通,用示波器查看波形,也有clk信号,但是clk波形只有1个byte,感觉像是ack没有回来,让host逻辑卡住了。但是示波器只有一个探头,无法同时观察sclk,sda信号,没法确认ack的问题。后来发现,用示波器测试的过程中,偶尔能够配置成功1,2个寄存器。因此,觉得是imx6跟fpga相连,阻抗或者上下拉有不匹配造成的,仔细查看原理图,i2c连接巨简单,fpga上就是一个设备,imx6上就俩设备,没有任何可能产生问题的地方。

因为无法查看波形,根据现象看,只要用示波器探头点住,偶尔能成功一下。5158 i2c前串了22欧的电阻,尝试把这个电阻改小,改大,都故障依旧。后来用万用表测量了示波器探头的电容,大概是0.7nF。根据这个值,在5158 i2c 的sda端跟地之间接了1nF电容。i2c正常工作,毫无问题。

示波器探头的实际寄生电容是12pF,探头上清清楚楚标记的。