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

USB数据传输(out in bulk)――初学者

楼主#
更多 发布于:2003-09-19 11:57
给象偶一样刚学usb,对usb的数据是怎么传输又不太明白的。嘿嘿,ren兄看了会不会眼熟,偶把你的拿来啦,不要见怪呀。 

如果有不对的地方,高手一定要指出来呀。 那10分就是奖励。


=====================================================================
主机往设备传送数据(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端点,或这在中断里设置标志到主程序里去填充数据。
游客

返回顶部