最近在做STM32掃碼槍的東西,用的是CH376,讀取U盤、鼠標(biāo)都沒(méi)問(wèn)題,現(xiàn)在連上掃碼槍獲取不到設(shè)備描述符,但是配置描述符能獲取,而且Set idle success?Set idle success,不知道哪里出了問(wèn)題。還有掃碼槍掃到的數(shù)據(jù)應(yīng)該怎樣讀?。?/p>
",現(xiàn)在連上掃碼槍獲取不到設(shè)備描述符",試下把設(shè)置地址、總線復(fù)位刪掉,能否獲???掃碼槍的數(shù)據(jù)按照類似鍵盤的方式獲取,對(duì)掃碼槍上傳中斷端點(diǎn)不斷發(fā)IN包。
? ? ? ? ? ? ? ? ? ? ? ? ? ?
",現(xiàn)在連上掃碼槍獲取不到設(shè)備描述符",試下把設(shè)置地址、總線復(fù)位刪掉,能否獲取?掃碼槍的數(shù)據(jù)按照類似鍵盤的方式獲取,對(duì)掃碼槍上傳中斷端點(diǎn)不斷發(fā)IN包。
? ? ? ? ? ? ? ? ? ? ? ?設(shè)置地址是在獲取設(shè)備描述符之后,應(yīng)該不影響。注掉復(fù)位后連配置描述符也獲取不到了
“獲取不到設(shè)備描述符”返回什么值?獲取描述符使用的控制傳輸命令還是GET_DESCR(0X46)命令?
? ? ? ? ? ? ? ? ? ? ? ? ? ?
“獲取不到設(shè)備描述符”返回什么值?獲取描述符使用的控制傳輸命令還是GET_DESCR(0X46)命令?
? ? ? ? ? ? ? ? ? ? ? ?
uint8_t Get_Dev_Descr(void)
{
? ?uint8_t descr_len;
uint8_t *p = data_buf;
send_mode = 0x00;
WR_USB_DATA(8,(void*)SetupGetDevDescr);
issue_token(send_mode,( 0 << 4 ) | DEF_USB_PID_SETUP);?
status = wait_interrupt();
if( status == USB_INT_SUCCESS ) ? ? ? ? ? ? ?
{
receive_mode = 0x80;
}
else?
{
? ?return(0);
}
issue_token(receive_mode,( 0 << 4 ) | DEF_USB_PID_IN);?
status = wait_interrupt();????????????//這里返回0x2E
if( status == USB_INT_SUCCESS )?
descr_len = data_buf[0] - RD_USB_DATA(data_buf);
while( descr_len > 0 )
{
receive_mode ^= 0x80;
p += 0x08;
issue_token(receive_mode,( 0 << 4 ) | DEF_USB_PID_IN);?
status = wait_interrupt();
if( status == USB_INT_SUCCESS )?
{
descr_len -= RD_USB_DATA(p);
}
else?
{
? ?return(0);
}
}
}
else?
{
? ?return(0);
}
send_mode = 0x40;
WR_USB_DATA(0,(void*)SetupGetDevDescr);
issue_token(send_mode,( 0 << 4 ) | DEF_USB_PID_OUT);?
status = wait_interrupt();
if( status == USB_INT_SUCCESS )
{
return(1);
}
else?
{
? ?return(0);
}
}
返回值0x2E不算通訊異常,只是設(shè)備返回了一個(gè)STALL,協(xié)議上說(shuō)可能為一個(gè)不支持的命令,不過(guò)在這里我覺(jué)得可能是設(shè)備忙暫時(shí)未響應(yīng),可以嘗試重發(fā)。
? ? ? ? ? ? ? ? ? ? ? ? ? ?
返回值0x2E不算通訊異常,只是設(shè)備返回了一個(gè)STALL,協(xié)議上說(shuō)可能為一個(gè)不支持的命令,不過(guò)在這里我覺(jué)得可能是設(shè)備忙暫時(shí)未響應(yīng),可以嘗試重發(fā)。
? ? ? ? ? ? ? ? ? ? ? ?現(xiàn)在發(fā)現(xiàn),第一次連接設(shè)備,獲取不到設(shè)備描述符,拔了重連就可以