Init374Host();// 初始化USB主机
while(1)
{
SetHostLeisure();//设定USB主机空闲
while(1)
{
if (Query374Interrupt()) HostDetectInterrupt(); // 如果有USB主机中断则处理
if (Query374DeviceIn()) break; // 有USB设备
OSTimeDly(5); //100ms
}
OSTimeDly(14); //延时14*20ms = 280ms // 由于USB设备刚插入尚未稳定,故等待USB设备数百毫秒,消除插拔抖动
if(Query374Interrupt()) HostDetectInterrupt(); // 如果有USB主机中断则处理
HostSetReset();// USB总线复位
for(i=0;i<100;i++ )// 等待USB设备复位后重新连接
{
if(Query374DeviceIn()) break; // 有USB设备
delay_us(1000);
}
if(Query374Interrupt()) HostDetectInterrupt( ); // 如果有USB主机中断则处理
if(Query374DeviceIn())// 有USB设备
{
if(Query374DevFullSpeed())
{
HostSetFullSpeed();// 检测到全速USB设备
printf( "Start Full-Speed Device\r\n" );
}
else
{
HostSetLowSpeed();// 检测到低速USB设备
printf( "Start Low-Speed Device\r\n" );
}
}
else
{
continue;// 设备已经断开,继续等待
}
OSTimeDly(3); //延时3*20ms = 60ms
close_bit_flag=0;//设备是否拔出
//1、获取设备描述符
s = GetDeviceDescr(DeviceDescribe_buf); // 获取设备描述符
if(s != USB_INT_SUCCESS )
{
printf("GetDeviceDescr Error\r\n");
goto WaitDeviceOut;// 终止操作,等待USB设备拔出
}
printf("DeviceDescr:");
for(i=0;i <((PUSB_SETUP_REQ)SetupGetDevDescr ) -> wLengthL;i++ )
printf("%02X ",DeviceDescribe_buf[i]);//输出描述符
printf( "\r\n" );
=======================================
串口输出信息:
键盘1:
Start Low-Speed Device
GetDeviceDescr Error
Wait Device Out
键盘2:
Start Low-Speed Device
DeviceDescr:12 01 10 01 00 00 00 08 D5 05 89 06 03 01 00 01 00 01
SetUsbAddress:0X02 Success
GetConfigDescr:
09 02 3B 00 02 01 00 A0 32 09 04 00 00 01 03 01 01 00 09 21 10 01 00 01 22 41 00 07 05 81 03 08 00 0A 09 04 01 00 01 03 00 00 00 09 21 10 01 00 01 22 32 00 07 05 82 03 05 00 0A
hid_des_leng=41
endp_in_addr=01
endp_out_addr=00
GetConfigDescr Success
SetUsbConfig success