wq3116
驱动牛犊
驱动牛犊
  • 注册日期2005-03-07
  • 最后登录2005-06-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1251回复:4

新手发问,关于d12枚举的数据传输

楼主#
更多 发布于:2005-05-09 19:13
当主机发一个setup包,setup包的数据(假设是获取设备描述符),产生一个中断,程序读中断寄存器进行相应的处理.
周立功书上的程序是这样的
setup_packet标志置1,然后运行control_handler()跳到相应的子程序get_descriptor(),
get_descriptor()向主机发送设备描述符.
接着主机发送一个in令牌,产生一个端点0的in中断,中断处理程序将设备描述符发送
是这样吗?

这样发送了两遍啊
为什么啊
我很笨 可是我很勤奋
xiaozhu912
驱动牛犊
驱动牛犊
  • 注册日期2004-09-27
  • 最后登录2005-08-25
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-05-09 20:14
这是由USB协议决定的。因为控制传输分为三个间断。
1 设置阶段
2 数据阶段(可有可无)
3 状态阶段

当主机发出get_descriptor时,设备会将设备描述副上传,主机受到后,会发出Out令牌,然后送出一个空包,表示完全已经收到了数据
wq3116
驱动牛犊
驱动牛犊
  • 注册日期2005-03-07
  • 最后登录2005-06-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-05-09 22:47
可是这样发送了两遍描述符啊

你说的3个阶段我知道啊
我想知道的是收到那个setup中断后是直接将描述符发出去
还是等到主机发一个in过来再发送

周立功的程序上好象是发两次啊(我理解)

[编辑 -  5/9/05 by  wq3116]
我很笨 可是我很勤奋
Descriptor
驱动牛犊
驱动牛犊
  • 注册日期2005-03-13
  • 最后登录2006-01-19
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-05-10 04:25
我的理解周立功是错的,应该是收到setup包后准备数据指针,设标志等,下次中断收到IN令牌,才开始发送Descriptor。我按照这个思路编写程序,结果完全成功。
不过从我的经验来看,USB的HOST容错性很强,很多时候明明不符合USB规范,可是居然也能通过,就不报错。
wq3116
驱动牛犊
驱动牛犊
  • 注册日期2005-03-07
  • 最后登录2005-06-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-05-10 08:54
周立功的书上有一个枚举过程的图
就应该是楼上讲的那样的

搞不懂

zlg的程序是get_descriptor()也将描述符发送了,接着in令牌到到,产生中断,又发送了一次描述符,发送了两遍,为什么?

[编辑 -  5/10/05 by  wq3116]
我很笨 可是我很勤奋
游客

返回顶部