阅读:1251回复:4
新手发问,关于d12枚举的数据传输
当主机发一个setup包,setup包的数据(假设是获取设备描述符),产生一个中断,程序读中断寄存器进行相应的处理.
周立功书上的程序是这样的 setup_packet标志置1,然后运行control_handler()跳到相应的子程序get_descriptor(), get_descriptor()向主机发送设备描述符. 接着主机发送一个in令牌,产生一个端点0的in中断,中断处理程序将设备描述符发送 是这样吗? 这样发送了两遍啊 为什么啊 |
|
|
沙发#
发布于:2005-05-09 20:14
这是由USB协议决定的。因为控制传输分为三个间断。
1 设置阶段 2 数据阶段(可有可无) 3 状态阶段 当主机发出get_descriptor时,设备会将设备描述副上传,主机受到后,会发出Out令牌,然后送出一个空包,表示完全已经收到了数据 |
|
板凳#
发布于:2005-05-09 22:47
可是这样发送了两遍描述符啊
你说的3个阶段我知道啊 我想知道的是收到那个setup中断后是直接将描述符发出去 还是等到主机发一个in过来再发送 周立功的程序上好象是发两次啊(我理解) [编辑 - 5/9/05 by wq3116] |
|
|
地板#
发布于:2005-05-10 04:25
我的理解周立功是错的,应该是收到setup包后准备数据指针,设标志等,下次中断收到IN令牌,才开始发送Descriptor。我按照这个思路编写程序,结果完全成功。
不过从我的经验来看,USB的HOST容错性很强,很多时候明明不符合USB规范,可是居然也能通过,就不报错。 |
|
地下室#
发布于:2005-05-10 08:54
周立功的书上有一个枚举过程的图
就应该是楼上讲的那样的 搞不懂 zlg的程序是get_descriptor()也将描述符发送了,接着in令牌到到,产生中断,又发送了一次描述符,发送了两遍,为什么? [编辑 - 5/10/05 by wq3116] |
|
|