打印

USB BULK传输,主机如何知道设备完成了数据上传?

[复制链接]
7561|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
pengliang|  楼主 | 2011-11-21 14:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用的是PIDUSBD12,端点1为BULK模式,IN,OUT最大包长都为16字节。设备要发送512字节的数据到主机。
问题是:主机如何知道从机已经发完了512个字节的数据。
是否像控制传输一样,在发完512字节后,接着一个0字节的数据包。或者是其他方法?
另:
  在网上找了一下,都没有类似的问题。我这个问题是不是很白痴啊。各位见笑了。

相关帖子

沙发
dqyubsh| | 2011-11-21 19:59 | 只看该作者
16字节是不太少了,怎么也得有64字节吧。

你可以人为加上帧号,每帧数据头上加个序号,发一帧加一次。主机了解到帧号之后,重新把数据拼接起来。

使用特权

评论回复
板凳
pengliang|  楼主 | 2011-11-22 09:31 | 只看该作者
谢谢 dqyubsh 的回复。
经过半天的折腾,发现512字节数据的传完由主机说了算。主机会一直发读指令,每读到一个16字节就累加,直到够512个字节为止。
目前理解就是这样,暂时不结贴。
期待高手们的指点。

使用特权

评论回复
地板
钻研的鱼| | 2011-11-23 08:34 | 只看该作者
我的理解也是这样。
  主机发送IN指令,每次设备传回多少数据,主机都会知道,usb协议里面每帧都有起始和终止,所以主机很容易知道总共传输多少数据。
  你是在做驱动吗?我现在主要了解usb的底层协议,有机会和你多探讨

使用特权

评论回复
5
pengliang|  楼主 | 2011-11-24 08:47 | 只看该作者
回 钻研的鱼
不是在做驱动,只是搞一下下位机编程。

使用特权

评论回复
6
uurun| | 2011-11-25 14:25 | 只看该作者
我现在也在搞USB STM32的 遇到好多问题
请问一下LZ 全速设备批量传输是不是最大只能支持64Bytes ?
你的传输速度有多快啊?

使用特权

评论回复
7
pengliang|  楼主 | 2011-11-28 09:00 | 只看该作者
回 uurun

我看到的资料是,全速设备批量传输最大只能支持64Bytes。

传输速度没有测试过。我搞的东西对速度没有要求。

使用特权

评论回复
8
doliphin| | 2011-12-3 17:08 | 只看该作者
EP1OUTCFG = 0xA0;                                //可以不写,默认的bulk模式
  EP1INCFG = 0xA0;                                //为什么要设置EP1??
  SYNCDELAY;                    // see TRM section 15.14
  EP2CFG = 0xA2;
  SYNCDELAY;                    //也没有用自动模式
  EP4CFG = 0xA0;
  SYNCDELAY;                    
  EP6CFG = 0xE2;
  SYNCDELAY;                    
  EP8CFG = 0xE0;

  // out endpoints do not come up armed
  
  // since the defaults are double buffered we must write dummy byte counts twice
  SYNCDELAY;                    
  EP2BCL = 0x80;                // arm EP2OUT by writing byte count w/skip.
  SYNCDELAY;                    
  EP2BCL = 0x80;
  SYNCDELAY;                    
  EP4BCL = 0x80;                // arm EP4OUT by writing byte count w/skip.
  SYNCDELAY;                    
  EP4BCL = 0x80;   

  // enable dual autopointer feature
  AUTOPTRSETUP |= 0x01;

Cypress例程里面的bulkloop中TD_Init()的主要部分如上所示,请问各位大神:1)它为什么没有从FIFOADR[1:0]选择应该挂载哪个FIFO,这样一路下来不只有一个FIFO在上面么?而它要实现EP2/4做out,6/8做IN  2)它没有选择自动模式(AUTOIN/OUT=1)。请问使用了AUTO模式省什么事了么?
3)它没有定义FLAGA、b、c,请问这又是为什么?

使用特权

评论回复
9
菜鸟-轩| | 2012-1-10 21:37 | 只看该作者
楼主,可否交流一下USB 驱动,本人QQ1556305045

使用特权

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

本版积分规则

4

主题

49

帖子

0

粉丝