请教582m usb问题

工程师您好,usb描述符已经成功获取,不太明白怎么添加修改例程去枚举,请问有没有详细一点的例程或者库函数说明,谢谢

你好,看你的描述像是咨询USB主机的使用,比较详细的枚举流程其实559或者554的主机例子都比较详细,寄存器跟582页类似,可以参考。
还有就是电脑端可以装bushound这种USB协议分析软件,抓取PC对设备的枚举流程,然后MCU这边仿照PC的操作发送指令就可以。
指令发送跟获取设备描述符操作都是类似的。



感谢工程师回复,枚举部分已经搞定了,读取usb数据也可以了,现在又卡在主机下传部分了,请问有没有例程能提供一下,批量传输方面得USB2HostTransact这个函数也可以用来从主机向设备发送数据吗?或者能否告诉一下具体使用方法,感谢感谢


可以使用。USB2HostTransact函数名中的2是指使用芯片的USB2相关引脚。

主机向设备OUT数据主要是如下步骤,①设置发送数据的长度,②向DMA中存储数据,③设置同步切换标志,然后调用HostTransact函数。参考代码块如下。

R8_UH_TX_LEN = RemLen >= 32 ? 32 : RemLen;      //写主机发送长度寄存器

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数据|端点2,重传次数


感谢工程师回复,麻烦看一下我写的代码是否正确,我用串口接收到的数据,通过usb发送给ch345t,并没有成功,也没有返回成功的标记,345t已经成功识别并且可以通过usb读取数据了,但是无法下发,麻烦工程师抽时间帮我指点一下,感谢感谢  


还有,我看手册里面得端点控制寄存器中的R8_UH_R_AUTO_TOG置位后接收数据就可以自动翻转标志了,但是例程里面都没有这样使用,请问是不推荐这样使用吗?是功能不稳定还是什么原因,谢谢!

len = UART1_RecvString(RxBuff);

                                    if(len)

                                    {

                                        endp = ThisUsb2Dev.GpVar[2]; // send端点的地址

                                        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数据|端点2,重传次数

                                        if(s==ERR_SUCCESS)

                                             {

                                            PRINT("send ok\n");   

                                             }

                                    }



您好,您是用的USB1-PB10、PB11还是USB2-PB12、PB13。ThisUsb2Dev这个结构体是USB2使用的,USBHostTransact这个函数是USB1使用的。

R8_UH_TX_CTRL&RB_UH_T_TOG? 0x40:0 这个逻辑可以不用,上面手动同步切换变更一下就可以了。

s是不为零的时候表示通信失败,可以打印一下s,看看返回的错误代码表示出了什么问题。

例程中没有使用自动同步切换,您想用的话可以自行尝试。

9b739440d7f6af2cb920f9ba376bc3b.png


只有登录才能回复,可以选择微信账号登录