打印

USB纯数据的传输,最快能达到多少?

[复制链接]
4367|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 icicicici 于 2013-5-13 13:46 编辑

只需要传输数据,从PC传指令符到STM32,再由STM32传输指令符到PC,就那么简单,主要是传输速度要快,出错小。
BULK传输程序上发现一次只能传64个两位16进制数,也就是一次16384个位,也就是2048字节,也就是一次传输2Kb,我这样算有错吗?

相关帖子

沙发
l_lin2003| | 2013-5-13 15:53 | 只看该作者
最近也在研究BOT传输数据速率问题,很头疼,也准备咨询咨询大家
你的问题:一次只能传64个两位16进制数,也就是64字节喽,怎么会出现16384?难道是64*256?不明白怎么得出16384位来的

使用特权

评论回复
板凳
icicicici|  楼主 | 2013-5-13 18:06 | 只看该作者
l_lin2003 发表于 2013-5-13 15:53
最近也在研究BOT传输数据速率问题,很头疼,也准备咨询咨询大家
你的问题:一次只能传64个两位16进制数,也 ...

在其他地方看到过你的帖子,字节是按16进制还是2进制来算?我也是在研究这个,那大家就讨论一下:)

使用特权

评论回复
地板
l_lin2003| | 2013-5-14 09:21 | 只看该作者
没看明白你的意思,
单片机上一个字节是8位,比如说十进制15,16进制是0x0F,二进制是11111111,你是说的这个意思吗?
你要真是这个意思,你得先补习补习C语言基础知识:)

使用特权

评论回复
5
icicicici|  楼主 | 2013-5-14 10:17 | 只看该作者
本帖最后由 icicicici 于 2013-5-14 10:25 编辑
l_lin2003 发表于 2013-5-14 09:21
没看明白你的意思,
单片机上一个字节是8位,比如说十进制15,16进制是0x0F,二进制是11111111,你是说的这 ...



@l_lin2003     看来我还是得好好努力啊~ 我以为16进制先换算成2进制,然后一个1/0就是一个字节,理解错了我抓了下包,不明白怎么就一直这么循环这几条,是轮询一直不成功吧,不太明白这里面的意思

使用特权

评论回复
6
l_lin2003| | 2013-5-14 13:06 | 只看该作者
这里面的数据,我觉得你得选择一下看,
20.2 端点是你的OUT端点,20.1是你的IN端点,就看这两个端点的数据就行了,你设置一下你的Bus hound,其他的数据不用显示,
第一行数据,这条指令代码是0x25,不是轮询指令,是返回磁盘容量指令。自己好好看一下scsi指令协议
第四行数据,是对这条指令的响应,前四个字节时代表最后一个块的块号,后四个字节时一块多少字节,这样PC才能计算你的U盘容量有多大
第六行是你的CSW,具体含义,自己看BOT协议
自己买本书看看,版主电脑圈圈出的书《圈圈叫你玩USB》挺基础的,比较适合你看

使用特权

评论回复
7
icicicici|  楼主 | 2013-5-14 13:28 | 只看该作者
本帖最后由 icicicici 于 2013-5-14 13:51 编辑
l_lin2003 发表于 2013-5-14 13:06
这里面的数据,我觉得你得选择一下看,
20.2 端点是你的OUT端点,20.1是你的IN端点,就看这两个端点的数据 ...


非常非常感谢你的回复,说到点子上了,这本书我一直在看,可是不太明白,主要是程序里面的流程我一点都看不到,调试起来都不知道哪跟哪?

也就是说第一行是我的CBW包,0x25是CBWCB的执行命令是吧?

还有一个比较菜的问题,如果我只是用于数据流的传输,用BOT合适吗?我需要大的传输量,不用大容量储存设备可以吗?

使用特权

评论回复
8
l_lin2003| | 2013-5-14 15:41 | 只看该作者
本帖最后由 l_lin2003 于 2013-5-14 15:52 编辑

如果你是用USB接口的话,最好用大量存储设备
USB传输一般有三种传输方式:中断、实时和批量
中断一般用在比如说键盘、鼠标之类的传输
实时一般用在话筒等
批量就是大批量的数据,大的数据流最好就是使用BOT协议;

我也做这方面不久,都是从不懂一步步学过来的,没有什么菜不菜的,加油

以上是我的个人理解,也可能有偏差,你再研究研究

使用特权

评论回复
9
icicicici|  楼主 | 2013-5-14 18:28 | 只看该作者
l_lin2003 发表于 2013-5-14 15:41
如果你是用USB接口的话,最好用大量存储设备
USB传输一般有三种传输方式:中断、实时和批量
中断一般用在比 ...

谢谢,看了你挺多帖子的,很有帮助,主要是USB的流程没办法看到,只能看程序里面哪个中断响应了,再用串口看看,代码一多就发晕了,我是用MASS STORAGE程序来修改,CSW,SCSI都要了解,然后要知道哪些要用,哪些不用,电脑又老是蓝屏,真是崩溃啊

使用特权

评论回复
10
john_lee| | 2013-5-15 09:26 | 只看该作者
纯粹的数据传输,用CDC/ACM协议(一般也称为VCOM)。

使用特权

评论回复
11
icicicici|  楼主 | 2013-5-15 09:57 | 只看该作者
john_lee 发表于 2013-5-15 09:26
纯粹的数据传输,用CDC/ACM协议(一般也称为VCOM)。

也就是VCP吗?用模拟串口岂不是失去USB的意义了?

使用特权

评论回复
12
john_lee| | 2013-5-15 14:29 | 只看该作者
icicicici 发表于 2013-5-15 09:57
也就是VCP吗?用模拟串口岂不是失去USB的意义了?

你好好去理解一下CDC的概念。其它的协议都是有固定用途(有数据格式要求)的,不适合纯粹的通信,只有CDC是用来满足普通的通信需求的。
CDC用来模拟串口,只是CDC的一个可选的特点而已。

使用特权

评论回复
13
icicicici|  楼主 | 2013-5-15 14:35 | 只看该作者
john_lee 发表于 2013-5-15 14:29
你好好去理解一下CDC的概念。其它的协议都是有固定用途(有数据格式要求)的,不适合纯粹的通信,只有CDC ...

那我在硬件上加个PL2303,就比较简单了吧?是不是用CDC的传输速度会快点?

使用特权

评论回复
14
john_lee| | 2013-5-15 16:51 | 只看该作者
首先,PL2303 并不是基于 CDC 的,它需要安装一个驱动程序,其次,用了 PL2303 之类的 USB 转串口芯片,你的 STM32 就必须使用一个 UART 端口去连接这个芯片,而 USB 端口就没有意义了。
CDC 也是使用的 BULK 传输模式,与 Mass Storage 是一样的,而且,由于没有 CBW、CSW、SCSI 等格式数据的开销,CDC 会更有效率。

使用特权

评论回复
15
icicicici|  楼主 | 2013-5-15 17:47 | 只看该作者
john_lee 发表于 2013-5-15 16:51
首先,PL2303 并不是基于 CDC 的,它需要安装一个驱动程序,其次,用了 PL2303 之类的 USB 转串口芯片,你 ...

我看书上说,CDC也要安装驱动,要安装一个.inf文件

使用特权

评论回复
16
sinc_mark| | 2013-5-17 13:12 | 只看该作者
关注,但不大懂USB的路过!

使用特权

评论回复
17
liusensen| | 2013-5-17 14:18 | 只看该作者
看题目挺简单 看里在很难

使用特权

评论回复
18
huangxz| | 2013-5-20 18:19 | 只看该作者
全速bulk端点一次就传64byte.没有2048byte.别太高估usb了

使用特权

评论回复
19
icicicici|  楼主 | 2013-5-21 10:32 | 只看该作者
huangxz 发表于 2013-5-20 18:19
全速bulk端点一次就传64byte.没有2048byte.别太高估usb了

一次64byte,那M3执行一次bulk传输要多久?

使用特权

评论回复
20
insignal| | 2013-5-21 11:17 | 只看该作者
高速usb 一个包可以到512字节

高速U盘的速度还不够快? 如果还不够快,那还可以选usb3.0

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

57

帖子

0

粉丝