[求助]68013+mt9m001连续采集图像有错

2020-01-26 12:57发布

本帖最后由 max 于 2012-4-21 13:17 编辑

没找到USB版,因为68013里有个增强的51,所以就发到51区了

根据本站一位网友的资料,使用68013+MT9M001制作了一个USB摄像头,按照网友的资料制作的是使MT9M001工作在snapshot模式,然后要采集图像的时候,通过USB的控制管道发命令来触发MT9M001采集一帧图片,在这种情况下,采集的图片的正常的。后来我使用libusb重写了上位机,测试时采集30帧使用了3秒时间。

然后我想连续采集,使MT9M001工作在连续模式,但这样采集的图片都是不正常的。尝试了一些方法,比如通过帧同步信号,在一帧结束的时候,再判断端点缓冲区空,然后通过中断通道向上位机发信号,上位机收到后再采集图片,这个方法得到的图片还是不正确的。然后又试了在一帧开始的时候发信号,上位机再接收,还是有问题。电路图与关键程序如下,请有熟悉的网友指点一下。谢谢
1.jpg (114.02 KB, 下载次数: 2) 下载附件 2012-4-21 13:12 上传
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
14条回答
wye11083
2020-01-27 00:23
有几个原因:第一,你没有在上位机分界。别指望用下位机分界,下位机只会把数据打包好,发给上位机;因此下位机的CPU Access可以考虑取消,即不用这个功能,在上位机要做好分界。这个没办法,我会用两个线程,一个就负责收,收到一个包插到链表中,然后另一个线程拼包,发现不满的包就认为是一个分界点,剩下的从下一个包开始拼。再一个,你的FIFO速度太快了吧,48MHz=48MB/s,这个速度除非你拿MAC机子上,否则我可以告诉你,WINDOWS系统最快只能达到40MB左右,而且是保证CPU空闲时。所以,第一,你没有分包,第二,速度跟不上。原理上你的方法是可行的,但是不要忘了USBH只能每次询问一个EP,所以你读EP2的时候就不能读EPIN。Windows还是有时间片的,说不定什么时候就给你卡那了。因此,你中间只要有一个包卡了,那后面的包肯定都乱了
我又看了看你的图和你的程序,你在启动SlaveFIFO之后没有立即开始收数据,反而删了一些数据(RESETFIFO),我认为这是你的最大的问题。你要把MTx的RESET接到PA0,1,3的任意一个管脚上,等上电复位RESETFIFO之后再把这个管脚拉高,这样就能实现同步了。就是说,在TD_Init()的开始让MTx复位,在最后让MTx启动。

一周热门 更多>