如題,51+ch375做主機(jī),USB手持設(shè)備做從機(jī),同時發(fā)數(shù)據(jù),有數(shù)據(jù)丟失,如何避免呢?
USB總線是半雙工方式通信,數(shù)據(jù)的發(fā)送和接收都是由主機(jī)控制的,且有相應(yīng)的通信機(jī)制,主設(shè)雙方不可能同時發(fā)送數(shù)據(jù)。您所說的丟數(shù)據(jù)具體是怎樣的?
主機(jī)和手持設(shè)備(WINCE)會定時問答,這個過程正常。除開這個過程,手持機(jī)會有突發(fā)數(shù)據(jù)發(fā)送,主機(jī)收到就會回復(fù)設(shè)備表示收到這個突發(fā)數(shù)據(jù),但這個主機(jī)回復(fù)不是每一次都能成功,就恰恰是設(shè)備定時應(yīng)答主機(jī)的時候就會丟失這個主機(jī)的回復(fù)。
設(shè)備發(fā)送數(shù)據(jù)的過程:所謂設(shè)備發(fā)送數(shù)據(jù),其實只是設(shè)備把數(shù)據(jù)放到自身內(nèi)部的一個上傳緩沖區(qū)內(nèi)等待主機(jī)主動來取,并非是由設(shè)備直接發(fā)送到USB總線上?,F(xiàn)在不清楚您是否了解這個設(shè)備與主機(jī)之間的通信過程是怎樣的,如用到哪些端點,采用何種傳輸方式?(控制,批量,中斷,還是實時?)可以讓這個設(shè)備與PC進(jìn)行通信,通過BusHund(網(wǎng)上可以下載)這個工具分析具體的通信過程。
手持中的usb是虛擬成串口使用的,沒有涉及到usb的底層,所以不知道它到底以哪種方式傳輸,不過端點是知道的。再寫一個pc程序模擬usb主機(jī)的話就太麻煩了,而且我只負(fù)責(zé)硬件
不用寫PC程序,只要BusHund這個軟件抓取PC枚舉(獲取描述符),配置這個設(shè)備的過程即可。 對于操作這種USB模擬串口,我們有成功案例。如果您覺得操作有困難,可以與我們電話聯(lián)系。
既然是做HOST方式,所有的通訊都是你主機(jī)來發(fā)起的,如果收到設(shè)備應(yīng)答NAK,你再次重試就可以了!和設(shè)備沒有什么關(guān)系,所有的通訊都是由主機(jī)發(fā)起的,所以您受到NAK后再次發(fā)起就是了.虛擬串口其實低層也是USB傳輸.正常的數(shù)據(jù)傳輸(您所說的突發(fā)數(shù)據(jù)肯定上批量傳輸),收到的應(yīng)答可能是中斷傳輸.(一般虛擬串口都是這樣做的,不排除例外的可能)