wdy9927
驱动老牛
驱动老牛
  • 注册日期2003-08-04
  • 最后登录2017-02-04
  • 粉丝0
  • 关注0
  • 积分89分
  • 威望143点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
  • 社区居民
阅读:2791回复:1

usb传输过程。

楼主#
更多 发布于:2003-09-21 10:16
=====================================================================
主机往设备传送数据(out)

当设备成功收到主机发送的数据,给主机一个ack应答,这个应答回产生一个中断给51(int0),收到这个中断后,你就可以读取out端点的数据了。

例如:当中断发生后,判断是哪个端点产生的中断。如果是端点1out就用如下的函数(每个人用的不一样,这样直观点。)
ISP1581_ReadBulkEndpoint(INDEX4EP01OUT,EpBuf,EP1_PACKET_SIZE)
INDEX4EP01OUT 端点1out ; 最大数据长度 ;EpBuf最后数据放到了这里

把端点1out 的数据都读到GenEpBuf里面去。如果有需要可以读GenEpBuf得到数据。


补充:
不管主机发送的数据是多少,这个中断都会产生的。如果你的端点最大包设置小于512,那么端点满512后会产生中断。当最后一个不满512或恰好为0也会产生中断。

==================================================================
设备往主机发送数据(in):

主机要先发送in请求,设备方如果准备好了数据(也就是in端点被填满了或者生效了),数据就会在in令牌后面传到主机,如果主机正确接收

到这批数据,会发送ack给设备,从而产生中断,你可以在中断里再次填充in端点,或这在中断里设置标志到主程序里去填充数据。
eric.sd
驱动牛犊
驱动牛犊
  • 注册日期2003-11-03
  • 最后登录2004-11-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-11-03 20:35
我记得

每个ED(endpoint)下有一个TD链(Transmit),在ED的最后一个TD,会置标志表示结束。

如果,这个结束标志有时不能置上去,是出了什么问题?
游客

返回顶部