遇到反饋最多的問題是收不了數(shù)據(jù),發(fā)不了數(shù)據(jù)。
?
多半是不清楚USB數(shù)據(jù)收發(fā)的機(jī)制導(dǎo)致。這里不做教學(xué),只講怎么用起來。
以CH554EVT.ZIP為代碼基礎(chǔ),寄存器說明參考CH554DS1.PDF
文中所有提到的代碼均以偽代碼形式,便于理解。
?
先總結(jié):
?
USB設(shè)備片面的理解是“被動的”。USB主要就是上傳(IN事務(wù),DEVICE->HOST)和下傳(OUT事務(wù),HOST->DEVICE)。上傳的被動體現(xiàn)在設(shè)備準(zhǔn)備好需要上傳的數(shù)據(jù)之后,等著主機(jī)來將數(shù)據(jù)取走。下傳的被動體現(xiàn)在設(shè)備需要準(zhǔn)備好空閑的緩沖區(qū),等著主機(jī)將數(shù)據(jù)發(fā)下來。數(shù)據(jù)什么時候流動,流動方向是什么,完全取決于主機(jī),主機(jī)怎么控制數(shù)據(jù)流,取決于協(xié)議(這個協(xié)議包括標(biāo)準(zhǔn)USB CLASS協(xié)議,還有用戶自定交互流程)。
?
因為這個被動,就會產(chǎn)生問題:
1、什么時候才表示主機(jī)將數(shù)據(jù)取走了、什么時候主機(jī)已經(jīng)把數(shù)據(jù)發(fā)下來了。
2、上傳數(shù)據(jù)不能夠在主循環(huán)中拼命執(zhí)行,因為可能上一包數(shù)據(jù)并沒有成功發(fā)送。