////////////////////////////////////////////////////////////<br />终于取得了突破性进展...哈哈~~~庆祝一下~~~ <br /><br />我将设置地址和返回0长度的数据包搞反了...<br /><br />本来,是要先用地址0返回一个0长度的状态包,然后设备才能使用新地址.<br />所以在我的程序中,我就先返回了0长度的状态包,再来写地址寄存器.<br />但是这个过程芯片已经做了...就是说,我要先将地址写到这个寄存器中,<br />然后再来返回0长度的状态包...芯片会等到ACK后,才启用刚刚写入的地址,<br />倒塌了...都怪我看数据手册不仔细,想当然了...值得检讨。 <br /> <br />///////////////////////////////////////////////////////////<br /><br />我将返回0长度的状态包和设置地址的顺序交换了一下,如下:<br />void set_usb_address(void) {<br /> usb_flags.flags.set_addr=1;<br /> while(select_endpoint(1)&0x01);<br /> <br /> ///////交换以后////////<br /> set_usb_addr(Control_Data.DeviceRequest.wValue);<br /> write_endpoint_buff(1,0,0);<br /> <br /> usb_flags.flags.usb_endp0_in=0;<br /> usb_flags.flags.setup_packet_out=0;<br />}<br />仍然是枚举不成功,无法识别的USB设备<br />
|