阅读:4520回复:19
请教:12mbps全速下bulk传输时64B的包大小通过endpoint传输的最大速度能达到多少??
最近在用silicon的一款c8051f340作一块usb的数据转接板,
c8051f340支持usb2.0全速和低速, 12mbps或1.5mbps 1024 bytes of on-chip XRAM are used as FIFO Endpoints0 64B Endpoints1 128B Endpoints2 256B Endpoints3 512B free 64B 如果我选择使用bulk模式传输数据,能达到的最大速度是多少? 采用何种模式能达到最大速度。该如何配置呢? 请教各位大侠。 bulk模式的包最大只能是64B吗? 可不可以使用Endpoints3 全部512B作一个包的大小呢? |
|
|
沙发#
发布于:2007-01-23 15:07
BULK是最快的,通常600K左右吧,可以提升的空间不大
BULK最大包64B |
|
板凳#
发布于:2007-01-23 16:05
现在bulk允许64B的包,但是usb允许的每帧时间是1ms,那就是说只能达到64kB/s !
如果600KB/s 那就是说要求帧的时间要尽量的短,或者传输的包尽量的大, 现在问题是这两种好象都不能改变的啊!! |
|
|
地板#
发布于:2007-01-24 09:48
每帧1ms是没错,但是没说你1帧只能传1个包啊。。
|
|
地下室#
发布于:2007-01-24 11:52
首先感谢jinghuiren的热心帮助,那现在我用usb设备向主机发送数据包,连续发送数据包的时候会丢掉数据包。如果我在一帧里要发送多个数据包的话,是不是每个包都要加上令牌包,后面加上握手包,还是先发一个令牌包,中间多个数据包,最后一个握手包??
|
|
|
5楼#
发布于:2007-01-24 13:30
你不是通过中断收发数据的?
第一个把主机收到后会有ACK中断 在中断里再填一个包,一次类推 bulk传输根INT不同,不是1ms只发1个IN令牌 |
|
6楼#
发布于:2007-01-24 14:58
你的意思是一毫秒可以发送数个令牌,
传送的时候不是会产生结束标志吗,是要设置一个计数器,计满数据就是说明发送完成这么多数据包,然后再产生结束标志,对吗? |
|
|
7楼#
发布于:2007-01-25 08:59
哪位大侠指点下,bulk模式多个数据包在一帧内传输时的格式是什么样的?
传输顺序应该怎样? 急!! |
|
|
8楼#
发布于:2007-01-25 09:18
建议你去看一下USB协议里关于BULK传输的章节
|
|
9楼#
发布于:2007-01-25 10:57
Re:请教:12mbps全速下bulk传输时64B的包大小通过endpoint传输的最大速
你的情况用BLUK传输,每64b发送一次(就是一个事务)。那么129b的数据要发送3次 64+64+1但是USB总线是共享带宽的,如果连入多个BLUK设备,速度是大大折扣的。 1ms的帧中可以传输1500字节,不是可以从全速设备的传输速率12mbps计算出来的吗? 你的情况,传输的最大字节速率是1216000b/s。理论的计算值,实际上由于位填充等原因 是达不到的! 512b来传的话就是2.0设备了(c8051f340不是2.0设备芯片,是全速设备芯片,BLUK传输最高64b,512你就别想了,除非换2.0芯片) 我没有用过c8051f340,但是我觉得一块USB芯片还要你去控制发送令牌包,握手包?不太可能! 建议你的情况,开双缓冲,每个64b,交替存储发送。PC方收一次64b。 |
|
10楼#
发布于:2007-01-25 10:59
Re:请教:12mbps全速下bulk传输时64B的包大小通过endpoint传输的最大速
还是FIFO的RAM,只要写入数据。usb会安排发送的吧 |
|
11楼#
发布于:2007-01-25 11:18
Re:请教:12mbps全速下bulk传输时64B的包大小通过endpoint传输的最大速
还是告诉你怎么算吧你去算一下一个IN事务(了解一下事务的概念。块传输的一个事务是令牌+64Byte数据+握手)或者一个OUT事务除了本身的数据之外,用于协议的信息(令牌包、握手包等)是不是13个Byte? 如果内容是64Byte,则一次事务用64+13=77个字节 由于12Mb/s每帧(1ms)可以传输1500个字节,则每帧可以传输19个事务 1ms传送的有效的数据就是19*64=1216字节 当然1s传送的字节就是1216K字节,够快了吗? |
|
12楼#
发布于:2007-01-25 11:36
楼上说的是理想情况下,是极限速度,是无论如何也达不到的
因为设备端准备数据需要花费时间,数据从设备到主机主控制器后还要经过几层驱动后才能到达设备驱动, 然后才能返回给应用程序,这些软件的时间损耗是不可避免的 所以,通常能达到600K是比较容易实现的,再提高也是可以的,但比较困难,要想达到1.2MB/s,是不可能的。 |
|
13楼#
发布于:2007-01-25 11:42
谢谢楼上两位的指点,现在可以每次传输1k数据而不丢包,前面每次只能传输大概三个包,其余全部丢掉,至于是否是在一帧内传完的 ,现在还不确定
楼上zijinniuniu 说的FIFO的RAM是否会自己安排发送 根据datasheet的 说明,FIFO会自动判断是否有数据 |
|
|
14楼#
发布于:2007-01-25 19:14
晕啊 ,包与包之间的时间间隔居然是3ms
不知道为什么!usb口的速度设置,时钟设置也没有错! 哪位大侠能指点下! |
|
|
15楼#
发布于:2007-01-26 09:33
你主机一次多读些数据啊
比如读50K,这样就快多了 一次64,大量的时间都浪费的软件损耗上 能不慢吗 |
|
16楼#
发布于:2007-01-26 14:06
其实我现在做的是个数据采集系统,数据采集完成,进行处理,放入采集板内存,然后通过usb口不停的读到pc主机进行处理。数据采集量比较大,数据量由采集速度决定
|
|
|
17楼#
发布于:2007-07-26 22:13
我们做的数据卡,速度能够达到840KB
|
|
18楼#
发布于:2007-08-09 11:54
我们现在速度也差不多能达到1m左右
|
|
|
19楼#
发布于:2007-08-11 22:01
BULK 协议是64字节,最大1ms可以传19个包,但是作到15个就不错 了,我们现在1.1 BULK 可以达到850KB的速率,还有优化的余地.
|
|