nannan42
驱动牛犊
驱动牛犊
  • 注册日期2003-04-24
  • 最后登录2005-09-27
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1439回复:4

我用的芯片是D12,我能接收到主机发送给我的SETUP包,并将数据(设备描述符的前16位)送到IN缓冲区中,且使用了FA这条指令,但主机却不给我发送IN这条指令?

楼主#
更多 发布于:2003-05-05 11:29
我用的是D12,我能接收到主机发送给我的SETUP包,并将数据(设备描述符的前16位)送到IN缓冲区中,且使用了FA这条指令,但主机却不给我发送IN这条指令?
是不是D12收到SETUP后,D12就应该主动进行设备应答ACK,然后主机就会发送IN包给我?还是因为FA这条指令才使得主机发送IN包给我?
盼解答!谢谢


 
rainboy
驱动牛犊
驱动牛犊
  • 注册日期2002-08-03
  • 最后登录2005-10-27
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-05-05 16:47
关于设备的列举众多出现的问题,我个人的看法是首先要认真读读协议,好好理解控制传输的各个阶段及相应的事务和包。下面是我的简单理解,希望对你有帮助。
1,建立阶段有setup token+setup信息包+设备发握手包;
2,如果有数据阶段,控制读是in事务,in token+设备发数据包+主机发ack;多个in事务则更替data0/1重复。
控制写是out事务,out token+主机发数据包+设备发握手包;多个out事务则更替data0/1重复;
3,最后是状态阶段,控制读是out token+主机发0包+设备发握手包,控制写是in token+设备发握手包。

关于设备发握手包,各个控制芯片的方式不太一样,一般是相应的寄存器做了设置后,由硬件产生,如nak和stall。我用过的cypress公司的sl811hs和正在使用的国半的usbn9603,从来就没有为发ack操心过。
溪涧岂能留得住,终归大海作波涛
plasma
驱动小牛
驱动小牛
  • 注册日期2002-02-19
  • 最后登录2008-02-27
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望5点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-05-05 22:04
读完SETUP包后加入:

D12_COMMAND = 0xf1;// 应答SETUP包,使能 OUT 缓冲区、
D12_COMMAND = 0xf2;// 清 OUT 缓冲区
D12_COMMAND = 0x01;// 选择端点 1
D12_COMMAND = 0xf1;// 应答SETUP包,使能 IN 缓冲区
nannan42
驱动牛犊
驱动牛犊
  • 注册日期2003-04-24
  • 最后登录2005-09-27
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-05-06 09:47
plasma,你好!我的程序中确实用到了这些语句,而且和你的一模一样,是不是有了这些语句就可以了呢!?
我现在用的程序不是我自己编的,而是从另外一个姐姐那里得到的,她说应该好用!
你能不能把你的程序发一份给我,我的邮箱是nannan42@newmail.dlmu.edu.cn
谢谢!!! :) :) :)
plasma
驱动小牛
驱动小牛
  • 注册日期2002-02-19
  • 最后登录2008-02-27
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望5点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-05-06 22:56
我的程序是自己编的,不过是AVR下的,不是51下的!!!!!
最好是问具体内容,我再回答!
(AVR与51的用法不同)
游客

返回顶部