工程师您好,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,看看返回的错误代码表示出了什么问题。
例程中没有使用自动同步切换,您想用的话可以自行尝试。