我在嘗試聲卡和鍵盤(pán)復(fù)合設(shè)備時(shí)遇到了這個(gè)問(wèn)題。由于同步傳輸后沒(méi)有ACK,直接進(jìn)行下一個(gè)中斷傳輸。這時(shí)不管端點(diǎn)有沒(méi)有發(fā)送,中斷傳輸就只會(huì)NAK了。目前湊合的辦法是模擬兩個(gè)鍵盤(pán)。第一個(gè)鍵盤(pán)不處理,永遠(yuǎn)NAK,為第二個(gè)鍵盤(pán)爭(zhēng)取處理時(shí)間。
這個(gè)問(wèn)題也可以由兩個(gè)鍵盤(pán)描述符復(fù)現(xiàn)。該代碼別處不會(huì)處理UEPn_T_LEN和UEPn_CTRL。所以此處設(shè)了發(fā)送就會(huì)一直發(fā)送。
如果只讓EP3發(fā)送。EP2 NAK,EP3 ACK,很正常。
但是如果一起發(fā)送,就只有EP2能發(fā)送,EP3只會(huì)NAK了。
根據(jù)之前的調(diào)試結(jié)果。這種情況下中斷會(huì)在EP3傳輸時(shí)發(fā)生。我猜測(cè)USB系統(tǒng)在中斷未完成時(shí)不會(huì)響應(yīng)下一個(gè)請(qǐng)求。但是這對(duì)于主機(jī)不重試的請(qǐng)求就會(huì)漏掉。我試圖把UIF_TRANSFER移動(dòng)到中斷前面一些的位置,似乎不僅不能解決問(wèn)題,連枚舉都出錯(cuò)了。
請(qǐng)問(wèn)有沒(méi)有辦法讓CH552處理兩個(gè)連續(xù)的USB請(qǐng)求?