阅读:1438回复:4
我用的芯片是D12,我能接收到主机发送给我的SETUP包,并将数据(设备描述符的前16位)送到IN缓冲区中,且使用了FA这条指令,但主机却不给我发送IN这条指令?
我用的是D12,我能接收到主机发送给我的SETUP包,并将数据(设备描述符的前16位)送到IN缓冲区中,且使用了FA这条指令,但主机却不给我发送IN这条指令?
是不是D12收到SETUP后,D12就应该主动进行设备应答ACK,然后主机就会发送IN包给我?还是因为FA这条指令才使得主机发送IN包给我? 盼解答!谢谢 |
|
沙发#
发布于: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操心过。 |
|
|
板凳#
发布于:2003-05-05 22:04
读完SETUP包后加入:
D12_COMMAND = 0xf1;// 应答SETUP包,使能 OUT 缓冲区、 D12_COMMAND = 0xf2;// 清 OUT 缓冲区 D12_COMMAND = 0x01;// 选择端点 1 D12_COMMAND = 0xf1;// 应答SETUP包,使能 IN 缓冲区 |
|
地板#
发布于:2003-05-06 09:47
plasma,你好!我的程序中确实用到了这些语句,而且和你的一模一样,是不是有了这些语句就可以了呢!?
我现在用的程序不是我自己编的,而是从另外一个姐姐那里得到的,她说应该好用! 你能不能把你的程序发一份给我,我的邮箱是nannan42@newmail.dlmu.edu.cn 谢谢!!! :) :) :) |
|
地下室#
发布于:2003-05-06 22:56
我的程序是自己编的,不过是AVR下的,不是51下的!!!!!
最好是问具体内容,我再回答! (AVR与51的用法不同) |
|