我現(xiàn)在375用作設(shè)備模式下向pc傳輸數(shù)據(jù)速率只有大概10k/s(內(nèi)置固件模式),若是再加快上傳的速率就會(huì)產(chǎn)生丟包,請(qǐng)問(wèn)有可能是什么問(wèn)題呢,有沒(méi)有上位機(jī)接受數(shù)據(jù)的例子呢。好多天了,苦惱
上位機(jī)發(fā)送IN令牌的速度是多少? 單片機(jī)通過(guò)CH372芯片發(fā)送數(shù)據(jù)的處理步驟如下: ①、 單片機(jī)執(zhí)行WR_USB_DATA命令向CH372寫(xiě)入要發(fā)送的數(shù)據(jù); ②、 CH372被動(dòng)地等待USB主機(jī)在需要時(shí)取走數(shù)據(jù); ③、 當(dāng)USB主機(jī)取走數(shù)據(jù)后,CH372首先鎖定當(dāng)前USB緩沖區(qū),防止重復(fù)發(fā)送數(shù)據(jù),然后將INT# 引腳設(shè)置為低電平,向單片機(jī)請(qǐng)求中斷; ④、 單片機(jī)進(jìn)入中斷服務(wù)程序,首先執(zhí)行GET_STATUS命令獲取中斷狀態(tài); ⑤、 CH372在GET_STATUS命令完成后將INT#引腳恢復(fù)為高電平,取消中斷請(qǐng)求; ⑥、 由于通過(guò)上述GET_STATUS 命令獲取的中斷狀態(tài)是“上傳成功”,所以單片機(jī)執(zhí)行 WR_USB_DATA命令向CH372寫(xiě)入另一組要發(fā)送的數(shù)據(jù),如果沒(méi)有后續(xù)數(shù)據(jù)需要發(fā)送,那么 單片機(jī)不必執(zhí)行WR_USB_DATA命令; ⑦、 單片機(jī)執(zhí)行UNLOCK_USB命令; ⑧、 CH372在UNLOCK_USB命令完成后釋放當(dāng)前緩沖區(qū),從而可以繼續(xù)USB通訊; ⑨、 單片機(jī)退出中斷服務(wù)程序; ⑩、 如果單片機(jī)已經(jīng)寫(xiě)入了另一組要發(fā)送的數(shù)據(jù),那么轉(zhuǎn)到②,否則結(jié)束。 也就是說(shuō)如果上位機(jī)沒(méi)有取走上次寫(xiě)入的數(shù)據(jù),你繼續(xù)向端點(diǎn)緩沖區(qū)寫(xiě)數(shù)據(jù),就會(huì)覆蓋前面的數(shù)據(jù),造成丟包的現(xiàn)象,所以過(guò)程必須是上位機(jī)取走數(shù)據(jù)后你再往端點(diǎn)緩沖區(qū)寫(xiě)數(shù)據(jù)。在單片機(jī)往端點(diǎn)寫(xiě)數(shù)據(jù)速度一定情況下,此時(shí)取決于上位機(jī)IN令牌的速度
因?yàn)樾Ч焕硐脒@個(gè)項(xiàng)目取消了,所以也好多天沒(méi)在跟進(jìn)了。這幾天沒(méi)什么事,還是想把之前遇到的問(wèn)題解決下,因?yàn)樯衔粰C(jī)程序是另外的同事寫(xiě)的(她對(duì)usb也是一竅不通。。。)基本就是根據(jù)你們提供的例程簡(jiǎn)單的修改的。請(qǐng)問(wèn)特雷西大神,我在固件里按照你們的例程把往單片機(jī)往端點(diǎn)寫(xiě)數(shù)據(jù)的操作放到了單片機(jī)的中斷服務(wù)程序中,也就是上位機(jī)每取走一次數(shù)據(jù)(64字節(jié))數(shù)據(jù)我就寫(xiě)一次(64字節(jié)),這樣的話(huà)是in令牌的發(fā)送速度成為決定整體速度的短板了嗎
我是用的你們提供的ch372/375接口驅(qū)動(dòng),是不是也對(duì)速度有限制
如果上位機(jī)連續(xù)讀的話(huà),上位機(jī)的影響是較小的,你的下位機(jī)是用的總線(xiàn)還是模擬IO?模擬IO會(huì)比較慢,可以先用我們的測(cè)速度的例子,在CH372EVT里面有。
用的模擬io口方式,本來(lái)是用總線(xiàn)的,不過(guò)掛了2個(gè)不同頻率的片子,調(diào)了半天沒(méi)成功。 謝謝回答 我再去試一下