工程師您好,usb描述符已經(jīng)成功獲取,不太明白怎么添加修改例程去枚舉,請(qǐng)問有沒有詳細(xì)一點(diǎn)的例程或者庫函數(shù)說明,謝謝
你好,看你的描述像是咨詢USB主機(jī)的使用,比較詳細(xì)的枚舉流程其實(shí)559或者554的主機(jī)例子都比較詳細(xì),寄存器跟582頁類似,可以參考。
還有就是電腦端可以裝bushound這種USB協(xié)議分析軟件,抓取PC對(duì)設(shè)備的枚舉流程,然后MCU這邊仿照PC的操作發(fā)送指令就可以。
指令發(fā)送跟獲取設(shè)備描述符操作都是類似的。
感謝工程師回復(fù),枚舉部分已經(jīng)搞定了,讀取usb數(shù)據(jù)也可以了,現(xiàn)在又卡在主機(jī)下傳部分了,請(qǐng)問有沒有例程能提供一下,批量傳輸方面得USB2HostTransact這個(gè)函數(shù)也可以用來從主機(jī)向設(shè)備發(fā)送數(shù)據(jù)嗎?或者能否告訴一下具體使用方法,感謝感謝
可以使用。USB2HostTransact函數(shù)名中的2是指使用芯片的USB2相關(guān)引腳。
主機(jī)向設(shè)備OUT數(shù)據(jù)主要是如下步驟,①設(shè)置發(fā)送數(shù)據(jù)的長(zhǎng)度,②向DMA中存儲(chǔ)數(shù)據(jù),③設(shè)置同步切換標(biāo)志,然后調(diào)用HostTransact函數(shù)。參考代碼塊如下。
R8_UH_TX_LEN = RemLen >= 32 ? 32 : RemLen;? ? ? //寫主機(jī)發(fā)送長(zhǎng)度寄存器
for (i = 0; i < R8_UH_TX_LEN; i++)
{
pHOST_TX_RAM_Addr[i] = *pTBuff;
pTBuff++;
}
R8_UH_TX_CTRL ^= RB_UH_T_TOG;? ?//同步切換
s?= USBHostTransact(USB_PID_OUT << 4 | 0x02, R8_UH_TX_CTRL, 30);? // OUT數(shù)據(jù)|端點(diǎn)2,重傳次數(shù)
感謝工程師回復(fù),麻煩看一下我寫的代碼是否正確,我用串口接收到的數(shù)據(jù),通過usb發(fā)送給ch345t,并沒有成功,也沒有返回成功的標(biāo)記,345t已經(jīng)成功識(shí)別并且可以通過usb讀取數(shù)據(jù)了,但是無法下發(fā),麻煩工程師抽時(shí)間幫我指點(diǎn)一下,感謝感謝??
還有,我看手冊(cè)里面得端點(diǎn)控制寄存器中的R8_UH_R_AUTO_TOG置位后接收數(shù)據(jù)就可以自動(dòng)翻轉(zhuǎn)標(biāo)志了,但是例程里面都沒有這樣使用,請(qǐng)問是不推薦這樣使用嗎?是功能不穩(wěn)定還是什么原因,謝謝!
len = UART1_RecvString(RxBuff);
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if(len)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? endp = ThisUsb2Dev.GpVar[2]; // send端點(diǎn)的地址
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? R8_UH_TX_LEN =len;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//UART1_SendString(RxBuff, len);
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? for (i = 0; i < R8_UH_TX_LEN; i++)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? pHOST_TX_RAM_Addr[i] = RxBuff[i];
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? R8_UH_TX_CTRL ^= RB_UH_T_TOG;? ?//同步切換
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? s = USBHostTransact(USB_PID_OUT << 4 | endp, R8_UH_TX_CTRL&RB_UH_T_TOG? 0x40:0,20);? // OUT數(shù)據(jù)|端點(diǎn)2,重傳次數(shù)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if(s==ERR_SUCCESS)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? PRINT("send ok\n");? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
您好,您是用的USB1-PB10、PB11還是USB2-PB12、PB13。ThisUsb2Dev這個(gè)結(jié)構(gòu)體是USB2使用的,USBHostTransact這個(gè)函數(shù)是USB1使用的。
R8_UH_TX_CTRL&RB_UH_T_TOG? 0x40:0 這個(gè)邏輯可以不用,上面手動(dòng)同步切換變更一下就可以了。
s是不為零的時(shí)候表示通信失敗,可以打印一下s,看看返回的錯(cuò)誤代碼表示出了什么問題。
例程中沒有使用自動(dòng)同步切換,您想用的話可以自行嘗試。