winderall
驱动牛犊
驱动牛犊
  • 注册日期2004-12-04
  • 最后登录2007-01-15
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:1066回复:5

请做过D12的朋友帮忙验证我的几个猜想,谢谢了

楼主#
更多 发布于:2004-12-14 13:49
在做D12的过程中,发现很多问题,网上又找不到相应的资料,只能跑这边来搬救兵了。

1。D12在收到host的IN数据包后,如果相应的端点数据buffer有效的话,是不是要把buffer里面的数据发送到host后,才产生IN中断? 我这样猜想的依据是:如果收到IN数据包后没发送相应端点的buffer数据就产生IN中断,那么如果在IN中断处理程序里面往相应端点的buffer写数据的话,就会把原先buffer的数据给覆盖。

2。另外,从周立功的程序来分析,D12上电总线复位后,D12会收到一个SETUP数据包,是标准请求的GetDeviceDescriptor,在周立功的程序里面好像是在主程序里面把要发送的数据放到端点0 IN 的buffer里面的,然后host再给D12发送一个IN数据包,D12把端点0 IN的 buffer数据发送到host的。 现在的问题是,D12复位后,host发送给D12的第一个SETUP数据包 和接下来的IN数据包之间是不是相隔一定的时间? 这个时间有多长,使得主程序能有足够的时间把端点0的 IN buffer填满。  因为周立功的程序里面使用的是51芯片,相对而言,51是比较慢的,因此,我想这个间隔时间应该实在ms级别的,但是查了相关的资料,没有说明这个间隔时间有多长?  

以上是我的一些猜想,不知道正确与否,还请做过的朋友给我一个答案,谢谢了。
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-12-14 15:56
1,应该是收到host的in令牌吧,是的,主机收到数据后才会发送ack中断给d12。
2,这个时间间隔是足够的,协议规定,有数据阶段的控制传输,设备需要在50ms内把第一个数据包发送给设备,然后之后的是500ms一个,但是最后一个时间是50ms!
因此你收到setup包后有足够的时间来分析处理并填充数据,因为就算是51,时钟应该也不会低于4M的,在50ms内可以处理很多指令的。

我说明白了吗?
winderall
驱动牛犊
驱动牛犊
  • 注册日期2004-12-04
  • 最后登录2007-01-15
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-12-14 21:29
谢谢了,我是硬件出身,USB协议方面的东西实在太复杂,现在也刚开始接触这些东西,所以就不是很吃得准。 谢谢你解开了我心中的疑惑。
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-12-15 10:32
兄弟,回答正确就给点分啊
点你帖子下面一排按钮最右边的那个给分按钮给分。
 :D
bbybati
驱动牛犊
驱动牛犊
  • 注册日期2004-12-10
  • 最后登录2005-04-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-12-15 10:53
偶得板子总是不能传数据给主机!但能收到主机发来的setup
winderall
驱动牛犊
驱动牛犊
  • 注册日期2004-12-04
  • 最后登录2007-01-15
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-12-15 11:14
bbybati ,有可能是你往buf里面写数后,没有使buf有效?  D12中专门有个命令,可以使buf有效
游客

返回顶部