阅读:3042回复:33
USB答疑――jinghuiren请进
我使用的是Cypress的2131QC系列,时钟12M(可以使用24M),集成的51是加强版,333ns一个周期,Bulk时可以使用快速传输方式,内置地址AutoPoint,可以把buffer当作FIFO使用,按照大侠的意思,把两个Bufferpair,使用Cypress的generaldriver,App中不断发DeviceIo,取数据,这个样子速度应该是最快的了,但是我的速度还是不够理想,不知道为什么,我使用的Ad 12位的,采样速率200K,请指教,谢谢!
|
|
最新喜欢:![]() |
沙发#
发布于:2003-01-22 15:27
偶没用过你说的2131,我想应该是1.1的吧,你实在用51来填充端点吧,我们这边有人做,用的是EZ-USB,最高速度能达到600KB/S,不过他用的是ISO模式,因为我没做过你那个东西,因此我不敢乱说,我只是说说我的看法。
因为1.1的速率是12Mbps,所以你的51应该是够快的,问题会不会出在上层程序中,你的app每发送一次DeviceIo是不是只读回64字节的数据,我想你尝试修改一下驱动,让每次DeviceIo多返回一些数据(最大好像是64kB),也就是每发送一次DeviceIo,让驱动读够一定数数据再返回,然后你把返回的数据存入文件,再发DeviceIo。 上面的方法我没用过,所以我只是建议你你试一试,我也不能肯定是否能行。 |
|
板凳#
发布于:2003-01-22 15:38
我怎么只能给你20分?Ft……
我也想个这个问题:需要修改底层驱动,一次读完一定的字节数然后返回,这个也很好实现,但是,如果这样的话,采集的数据就会有延时,这个我们不太允许,呵呵 使用ISO方式速度是快,就是可能带来错误(没有错误检查),我们试验板使用在科学试验场合的,任何间断地数据采集或是数据错误都会给我试验结论带来致命的结论,所以也不敢用,呵呵…… 其实,我觉得200K的实时数据流不应该是很快的……可能是我太笨了:( 非常感谢jinghuiren!! |
|
地板#
发布于:2003-01-22 16:08
看来你的数据是需要实时显示的了,可是就算你没个DeviceIo只返回64个字节,那也不应该太慢呀,你是不是读回来就马上处理呀,然后再读下一个?我想你你可以试一试再应用程序中开两个线程,一个线程只管读数据然后放到一个缓冲区里,另一个线程从缓冲区里读数进行处理,这样虽然后一些延迟,可能会更快一点。
其实给点分只是意思意思而已,多少都无所谓的,要它又没有什么大用处,不过人家既然回答了我们的问题,我们总该有点意思是吧 :) |
|
地下室#
发布于:2003-01-22 16:12
另外你那个缓冲区如果不大的话最好开到内存里,这样其实是很快的存够一定的数量在用度数据的线程写到文件里(最多64k),这样即可以实时显示,又可以保存数据。以便将来回放
|
|
5楼#
发布于:2003-01-22 17:00
\"你的app每发送一次DeviceIo是不是只读回64字节的数据,我想你尝试修改一下驱动,让每次DeviceIo多返回一些数据(最大好像是64kB)\"需要修改底层驱动\"
我用fx2时好像不管多少总是一次读完,可能就是指最大64k把。 |
|
6楼#
发布于:2003-01-22 17:00
补:我没改驱动,而且也不会改。:)
|
|
7楼#
发布于:2003-01-22 21:08
你现在是在测试,当然可以这样了,可是到实际情况的时候:AD在不断的产生数据,也许会产生几兆甚至几十兆的数据,你怎么一次读完呢?你的端点字节寄存器(好像是EPnBCL吧)是两字节的,最大是64K!也就是说它可以连续处理最大64K的数据,在大的话就要再次写这个寄存器了!你怎么可能一次把所有的数据都传到主机上呢?
|
|
8楼#
发布于:2003-01-23 10:58
jinghuiren 意思是,应该在epxbcl,epxbch中设置适当的数,如ad采样的一帧数目,少了从usb到host的速度不行,多了也浪费是吗?
|
|
9楼#
发布于:2003-01-23 12:58
Fx系列可以使用DMA的方式吧,Ez 2100系列的不行
端点寄存器只有64B,每次也只能传输那么大的数据 感谢jinghuiren,其实我觉得您提的使用两个Threads 倒是一个好的办法,呵呵,但是App可能比较困难了点 可以试试 我需要的200K速度不是一个很大的难题,Cypress的BulkPerformance提出了最大1M的速率,这个虽然是理论的,但是几百K应该是很容易的才是,呵呵 我再努力一下! hemu兄是做什么系列的,我们好像有很多相似的疑问,有机会互相讨论一下…… |
|
10楼#
发布于:2003-01-23 13:41
jinghuiren 意思是,应该在epxbcl,epxbch中设置适当的数,如ad采样的一帧数目,少了从usb到host的速度不行,多了也浪费是吗? 可以这么理解,因为每启动一次传输会有很多其他的消耗,而启动这一次传输最多可以传64K字节的数据,而且主机每次存取数据64K也是最快的(因为没存一次数据,要进行硬盘寻道等工作),所以多了的话会快一点,我曾经用开发板测试过,当每次启动一次传输64K时,速度能达到10M字节/s可是当数据量很小时,那就慢的多了(我用的方法是先写64k的数据到开发板的外部ram里,然后再把这些数据转移到in端点读回来,测的时间是8051读外部ram填充端点然后再传输到主机方这段时间)。 |
|
11楼#
发布于:2003-01-23 14:33
\"测的时间是8051读外部ram填充端点然后再传输到主机方这段时间\"
我一直很困惑,这个速度怎么测,要用仪器吗? “hemu兄是做什么系列的,我们好像有很多相似的疑问,有机会互相讨论一下……” 我用cy7c68013,讨论是肯定要的,不管是否做同一种,因为速度问题是我们首先要解决的。 |
|
12楼#
发布于:2003-01-23 14:53
说到测试速度,Cypress在BulkPerformance里提过一个叫做CATC USB Bus Analyzer,不知道是软件还是硬件,呵呵……
对了,Hemu,你在使用ControlPannel下载程序的时候,有没有出现这样一个问题:按GetDev、GetConf都能正常返回数据,按GetPipe时出现: Interface Size:16 Get Pipe info 然后就没有了,没有给出Pipe的信息,搞得我在应用程序中不能打开Pipe(提示open Pipe错误),不知道怎么回事,我重新编译过源程序(keil),也使用过Cypress的Hex,问题依然,现在只能修改以前不知道什么时候编译正常了的程序,不知道是不是我在产生Hex文件的时候设置不对,还是那个地方没有做好,呵呵 我的板子是自己做的,比较简单,没有在线调试:( 知道的告诉我一声,谢谢!! |
|
13楼#
发布于:2003-01-23 19:45
你在没有下载自己的固件程序进去时得到的就是那个缺省结果,必须把你自己的固件下载进去,你才能得到你的pipe信息!
|
|
14楼#
发布于:2003-01-23 20:03
jinghuiren兄,偶就是把固件程序下载进去了后,才会出现那么奇怪的问题,不知道怎么回事,是不是我的Keil设置不对啊,您有没有什么经验?呵呵……
|
|
15楼#
发布于:2003-01-23 21:39
呵呵,经验是没有,不过如果你的keilc设置不对的话,那你的描述符也不会正确返回了,我看你还是检查一下你的端点设置是否正确,高速bulk端点最大为512字节,可是设成单、双、三、和四重缓冲,其他的也按协议来设定,如果设置错误的话就不会正确返回的。
|
|
16楼#
发布于:2003-01-24 11:43
\"Cypress在BulkPerformance里提过一个叫做CATC USB Bus Analyzer,不知道是软件还是硬件,呵呵……\"
我想应该是硬件把,还有那扩充板把引脚牵出来,可能就是分析用的。 |
|
17楼#
发布于:2003-01-24 11:46
“偶就是把固件程序下载进去了后,才会出现那么奇怪的问题”
正如jinghuiren所说,应该是软件问题了,我好像也出现过这样的错误,我想是当时我运行了好几个用于设置端口的应用程序,设置的很乱才导致的。 |
|
18楼#
发布于:2003-01-24 12:19
我想,你应该好好看看你的驱动,在select Device 的时候,你需要
enable 你的device, Interface->Pipes.MaximumTransferSize = USBD_DEFAULT_MAXIMUM_TRANSFER_SIZE; 看看你的驱动中有没有这么一句,你把USBD_DEFAULT_MAXIMUM_TRANSFER_SIZE;改成64*1024-1,你就可以每次读64K,希望你的是这个问题,大家一起学习。 |
|
19楼#
发布于:2003-01-24 13:17
非常感谢大家的帮助,呵呵
我可是使用的Cypress的Samples啊,驱动也是使用的Cypress的Gernal driver,就是想试一下,就出现了那个奇怪的问题,我现在还是改我以前的成功的固件程序,编译可以找到Pipes,感觉应该是固件程序问题,下去后,GetPipe,好像程序根本就没有跑一样,我看了一下我那个成功的程序的Keil设置,也没有发现什么不一样的设置,真是邪门了……呵呵 对了,不会是我打了固件程序后,没有ReNum吧?? |
|
上一页
下一页