如何才能实现对两路USB3014芯片的数据采集

公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
user_1516091
Level 2
Level 2
10 replies posted 5 replies posted 10 questions asked

       在对两个USB数据采集电路板进行数据采集,使用一台带win7-64位系统的电脑无法同时对两个设备进行数据采集,当名为VNIR这个USB3014-FX3设备进行数据采集后,插入名为SWIR的USB3014- FX3设备,点击开始采集,VNIR就会无法继续再进行数据采集,仿佛是被SWIR占用的传输通道而被阻塞。我采用的是同步FIFO和自动DMA通道,通过不断的进行指令下发实现连续不断的数据采集,两个设备的主机程序相关代码如下:

VNIR-FX3设备

    //开始数据传输

     BYTE* pContext0=pBulkEpIn0->BeginDataXfer(pBulkBuf0,nBufSize0,&oRdOvLap0);//overlapped window os锁定该内存块资源,其他线程无法干扰

   //等待数据传输结束

     if(pBulkEpIn0->WaitForXfer(&oRdOvLap0,pBulkParam0->nTimeout0))

   {

        if(pBulkEpIn0->FinishDataXfer(pBulkBuf0,nBufSize0,&oRdOvLap0,pContext0))

      {

        pVdeioshow0->OnDataReady0(nBufSize0);//通知视频显示窗口数据准备完毕

      }   

   }

//创建数据传输线程

m_pBulkThread0=AfxBeginThread(BulkXferRead0,  &m_oBulkParam0,THREAD_PRIORITY_HIGHEST);

SWIR-FX3设备

   //开始数据传输

     BYTE* pContext1=pBulkEpIn1->BeginDataXfer(pBulkBuf1,nBufSize1,&oRdOvLap1);//overlapped window os锁定该内存块资源,其他线程无法干扰

   //等待数据传输结束

     if(pBulkEpIn1->WaitForXfer(&oRdOvLap1,pBulkParam1->nTimeout1))

   {

       if(pBulkEpIn1->FinishDataXfer(pBulkBuf1,nBufSize1,&oRdOvLap1,pContext1))

     {

        pVdeioshow1->OnDataReady1(nBufSize1);//通知视频显示窗体数据准备完毕

     }   

   }

//创建数据传输线程

m_pBulkThread1=AfxBeginThread(BulkXferRead1,  &m_oBulkParam1,THREAD_PRIORITY_HIGHEST);

特殊情况:

        当我先插VNIR FX3设备建立数据采集通道并开始采集后,可在三十秒内插入SWIR FX3设备建立数据采集通道并开始数据采集时,VNIR是有可能继续进行数据采集而不会出现无法采集数据的问题。即使成功建立了两路数据采集。当加入基于UVC的相机时,相机速率在250MBps,只能持续采集200秒左右,VNIR-FX3就会无法采集;当相机速率降至一半125MBps时,VNIR-FX3和SWIR-FX3可以持续采集半小时左右,然后就自动出现无法再采集数据的问题。这种特殊情况是基于两个FX3设备使用相同的端口号如0x81。当如果使用不同端口号,则点击第二个FX3设备开始数据采集时,第一个正常进行数据采集的FX3设备就直接出现无法采集数据的问题。

       打开Stearmer软件是无法同时加载两个设备的,即使USB control center软件已经将两个FX3设备都加入列表,但是在steamer软件的测试速率页面上,端口endpoint无法同时加载两路不同端点号如0x82和0x83的FX3设备,也确实是只能加载一个FX3设备,所以之前论坛官方技术支持人员建议参考steamer的源代码,该软件本身好像就无法实现。针对这些测试结果带来的问题,想寻求相关技术支持,咨询出现此类的问题的根本原因以及官方是否能提供进行对两路FX3设备进行数据采集的技术方案,谢谢。

948545948.jpg

微信图片_20200709182341.jpg

微信图片_20200709182316.jpg

微信图片_20200709182158.jpg

微信图片_20200709182205.jpg

0 点赞
1 解答
YiZ_31
Moderator
Moderator
Moderator
1000 replies posted 750 replies posted 500 replies posted

这两个设备的Bulk in endpoint 都是0x81,固件一样的:

pastedImage_0.png

同时bulk in两个设备, 注意两个设备的速度:

pastedImage_0.png

同时对一个设备bulk in,可以看到速度明显只有一半:

pastedImage_2.png

在原帖中查看解决方案

0 点赞
15 回复数
YiZ_31
Moderator
Moderator
Moderator
1000 replies posted 750 replies posted 500 replies posted

pastedImage_0.png

我同时打开两个streamer窗口,两个FX3同时传输数据完全不受影响。

0 点赞
user_1516091
Level 2
Level 2
10 replies posted 5 replies posted 10 questions asked

       你好,你这个操作是bulk out,我的全是bulk in的操作,是要进行数据采集,bulk in其实连streamer测试都无法做,这个我也不清楚为什么不能实现,我自己的软件是可以做采集数据测试的。另外在插入两个USB后,每次都只能加载一个端口号FX3设备。

       首先分析你提供的测试图,bulk out 是从主机分发数据到FX3设备。在系统分发数据时,比如下图我的实际只插入了一个USB-FX3,但是同样是可以打开两个steamer软件窗口做测试,也就是说你虽然打开了两个窗口软件,但肯定是只分发到一个FX3器件里去了,下面通过测试实验证明该判断。

      我也做了插入两个相同端口号的FX3设备,也就是跟你一样的测试。这些都能正常跑数据,但端口号都是一样的所以根本无法证明你同时分发到两个FX3设备。因为我的设备端点号作了区分,但是无法同时加载两个不同端口号的FX3设备到steamer软件中。单独对每个USB-FX3进行测试是可以的,但是同时对两个USB-FX3测试就出问题。测试图证明无法做相应对不同FX3器件同时从主机发送数据到不同FX3设备,因为点击第一个插入的FX3设备,程序会出现错误,再点击第二个已经插入的FX3设备进行测试是可以的。一个一个测试,也会使得程序崩溃。测试采用0x00F1 01端点和02端点。

      最后,我希望能得到根本的原因来解释说明两个USB-FX3进行数据收发的传输约束机制,尤其是一个主机同时对两个FX3设备进行数据采集的机制或者实际应用案例。谢谢。

书本对端点的说明

pastedImage_0.png

插入一个USB-FX3设备情况

微信图片_20200710122001.jpg

微信图片_20200710122009.jpg

插入两个USB-FX3设备情况

微信图片_20200710122509.jpg

先后插入USB-FX3设备并立刻开始测试的情况01崩溃,02端点正常且打开只加载02端口号一个

微信图片_20200710122820.jpg

微信图片_20200710122938.jpg

先插入两个USB-FX3设备之后,再开始测试的情况,第一次打开的steamer软件测试本来正常的再点击开始会崩溃,第二次打开steamer软件工作正常,但列表有且只加载02端点号

微信图片_20200710122847.jpg

微信图片_20200710123644.jpg

0 点赞
YiZ_31
Moderator
Moderator
Moderator
1000 replies posted 750 replies posted 500 replies posted

这两个设备的Bulk in endpoint 都是0x81,固件一样的:

pastedImage_0.png

同时bulk in两个设备, 注意两个设备的速度:

pastedImage_0.png

同时对一个设备bulk in,可以看到速度明显只有一半:

pastedImage_2.png

0 点赞
user_1516091
Level 2
Level 2
10 replies posted 5 replies posted 10 questions asked

你好

1、能否分析一下为什么我用这个streamer软件不能实现,毕竟这只是对FX3设备的自测试,用的也是同样的固件程序。

2、然后烦请提供不同端口号的测试图,请测试久一点看看,因为看到有丢包的问题。

3、如何解释cmos相机速率加快会导致无法采集FX3器件数据的问题。

谢谢 

0 点赞
user_1516091
Level 2
Level 2
10 replies posted 5 replies posted 10 questions asked

我用的软件是1.2版本的SDK中的streamer

0 点赞
YiZ_31
Moderator
Moderator
Moderator
1000 replies posted 750 replies posted 500 replies posted

我用的固件是USBbulksourcesink,SDK版本是1.3.4

实际就是在一个正常的PC上两个USB口设备的传输都是独立的,我也通过测试证实了这个问题。所以这里我觉得并不是我们设备的问题,而是你的PC的问题。我觉得这里是你PC的根hub的速度限制了两个设备的最大速度。你可以下载一个USB Device Tree Viewer看一下。

pastedImage_0.png

关于丢包的问题,这里是采用bulk transfer在测试最大传输速度,丢包是不可避免的。单独测试一个设备也会有偶尔有丢包。

0 点赞
user_1516091
Level 2
Level 2
10 replies posted 5 replies posted 10 questions asked

你好,我用的是同步slavefifo的固件,这个会有影响吗?

0 点赞
YiZ_31
Moderator
Moderator
Moderator
1000 replies posted 750 replies posted 500 replies posted

我没有fpga,没有办法用slavefifo做测试,你可以试一试

0 点赞
YiZ_31
Moderator
Moderator
Moderator
1000 replies posted 750 replies posted 500 replies posted

pastedImage_0.png

我这次测试了半个小时,也没有丢包

0 点赞
user_1516091
Level 2
Level 2
10 replies posted 5 replies posted 10 questions asked

我用的自己的板子使用bulksourcesink,SDK版本是1.3.4是可以实现你的示例结果的,但是1.2版本的sdk不行,然后别的固件不行包括SlaveFifoSync不能采集数据只能bulk out由主机分发数据到电路板上。一个是USB2.0和另一个是USB3.09ca2baa98ddc5cc3518055e6a6875ad.jpg

54bf11374a432739f76c65921d81d9d.jpg

0 点赞
YiZ_31
Moderator
Moderator
Moderator
1000 replies posted 750 replies posted 500 replies posted

这个streamer不能直接适用于slavefifo这个固件,但是这已经证实了两路3014的数据采集是不会干扰的。

0 点赞
user_1516091
Level 2
Level 2
10 replies posted 5 replies posted 10 questions asked

你好,我的工作证明是有影响的,这个影响不是说数据互相乱了,我的采集数据显示数据都是正常的,就是会停止采集,steamer证明针对bulksourcesink固件这种传输模式不会有问题,不过我也看了这种固件 代码纯粹是用于测试,并不能证明slavefifo和dma的组合传输方式不会影响彼此正常的工作,现在的疑惑就是为什么这个不行,尤其是加入了cmos后影响尤为明显。

0 点赞
user_1516091
Level 2
Level 2
10 replies posted 5 replies posted 10 questions asked

slavefifo和自动DMA

0 点赞
user_1516091
Level 2
Level 2
10 replies posted 5 replies posted 10 questions asked

您提到的hub根速率的问题,我在我那个数据采集机箱就是有四个USB3.0接口测试看,速率都是正常的,跟你那个测试结果表现一样,所以限速的问题是没有的。现在我很想从内部传输机制上去理解问题的原因。

0 点赞
user_1516091
Level 2
Level 2
10 replies posted 5 replies posted 10 questions asked

你好,这个问题无解了吗?

0 点赞