調(diào)試工具用的是“USB設(shè)備CH372或CH375簡(jiǎn)單調(diào)試工具”和USBTrace 請(qǐng)問(wèn): 端點(diǎn)2的上傳事務(wù),是在“case USB_INT_EP2_IN: ”中處理嗎?
case USB_INT_EP2_IN: 表示上次上傳成功中斷狀態(tài), 什么時(shí)候處理上傳事務(wù),可以由程序決定。
明白 我用端點(diǎn)2上傳數(shù)據(jù) 需要寫REG_USB_LENGTH以表示數(shù)據(jù)長(zhǎng)度 而同時(shí)讀這個(gè)寄存器REG_USB_LENGTH又為當(dāng)前USB 傳輸?shù)慕邮臻L(zhǎng)度 是不是意味著這個(gè)寄存器的值是一直在變動(dòng)的? 那么 我每次上傳數(shù)據(jù)前 是否都需要重寫這個(gè)寄存器?
是的。
我實(shí)際測(cè)試了一下,發(fā)現(xiàn)我只在初始化的時(shí)候?qū)懥艘淮蜶EG_USB_LENGTH,中間下傳過(guò)幾次長(zhǎng)度不等的數(shù)據(jù)之后再上傳數(shù)據(jù),仍然成功(收到的數(shù)據(jù)長(zhǎng)度是PC調(diào)試軟件規(guī)定的長(zhǎng)度) 不知道這是怎么回事
USB是分時(shí)傳輸?shù)?。半雙工傳輸方式。接收數(shù)據(jù)要去讀長(zhǎng)度寄存器,發(fā)送時(shí)要寫長(zhǎng)度寄存器。
你可以在長(zhǎng)傳前讀一下長(zhǎng)度寄存器的值是多少,把數(shù)據(jù)寫進(jìn)去之后再讀出來(lái)看看是多少。 不能排除操作流程有問(wèn)題和偶然性因素,不可以這樣做,每次上傳數(shù)據(jù)前必須正確的寫入長(zhǎng)度寄存器。
這個(gè)半雙工的模式我能理解 我現(xiàn)在是這樣 初始化的時(shí)候?qū)慠EG_USB_LENGTH為8 然后就是下傳事務(wù) 讀REG_USB_LENGTH為64 然后再上傳數(shù)據(jù),此時(shí)我只是寫RAM_ENDP2_TRAN的內(nèi)容,并沒(méi)有寫REG_USB_LENGTH 此時(shí)傳輸也是正確的
我明白你的意思。你按照我說(shuō)的流程測(cè)試一下。看看REG_USB_LENGTH 的長(zhǎng)度是多少。 你上傳了多少數(shù)據(jù)?
你這種模式是不正確的,你如果寫的數(shù)據(jù)長(zhǎng)度是一樣的數(shù)據(jù)可能沒(méi)問(wèn)題,但是如果數(shù)據(jù)長(zhǎng)度不一樣就可能出現(xiàn)問(wèn)題了,建議你還是加上些長(zhǎng)度,只有些了長(zhǎng)度之后,我們的芯片才會(huì)給你發(fā)一個(gè)你真正要發(fā)送的數(shù)據(jù)長(zhǎng)度。
明白 真正通信的時(shí)候肯定是要寫數(shù)據(jù)的 我只是想了解一下 芯片的工作原理 我感覺(jué)手冊(cè)上說(shuō)的不是很清楚 很多功能需要看例程去了解
一般USB芯片都有長(zhǎng)度寄存器。否則根本就不知道接收和要發(fā)送的數(shù)據(jù)長(zhǎng)度是多少。數(shù)據(jù)肯定能發(fā)送出去。但是發(fā)送的長(zhǎng)度就是長(zhǎng)度寄存器里的長(zhǎng)度。
“4樓”:中途下傳過(guò)數(shù)據(jù)之后,REG_USB_LENGTH中就上上次的數(shù)據(jù)長(zhǎng)度(用a表示),如果這個(gè)時(shí)候不對(duì)REG_USB_LENGTH賦新值,此時(shí)再上傳的話,那么數(shù)據(jù)長(zhǎng)度就是a,本次的傳輸也是成功的,PC調(diào)試軟件接收到的數(shù)據(jù)長(zhǎng)度是規(guī)定長(zhǎng)度和a中二者較小的