请教关于 USBHostTransact 函数

我在CH32和CH582的USB例程中,usbhost.c文件中,都看到了如下的注释。

我现在用主机host,查询方式。总感觉好像是速度有点慢。


我想问:

  1. USB主机模式,有没有类似USB从机那样的中断操作方式?

  2. 下边的函数,可否提供一个对运行速度优化后的版本?


/*********************************************************************

 * @fn      USBHostTransact

 *

 * @brief   传输事务,输入目的端点地址/PID令牌,同步标志,以20uS为单位的NAK重试总时间(0则不重试,0xFFFF无限重试),返回0成功,超时/出错重试

 *          本子程序着重于易理解,而在实际应用中,为了提供运行速度,应该对本子程序代码进行优化

 *

 * @param   endp_pid    - 令牌和地址, 高4位是token_pid令牌, 低4位是端点地址

 * @param   tog         - 同步标志

 * @param   timeout     - 超时时间

 *

 * @return  ERR_USB_UNKNOWN 超时,可能硬件异常

 *          ERR_USB_DISCON  设备断开

 *          ERR_USB_CONNECT 设备连接

 *          ERR_SUCCESS     传输完成

 */

UINT8 USBHostTransact( UINT8 endp_pid, UINT8 tog, UINT32 timeout )


需要查看设备的传输方式。

实时传输和中断传输,理论速度与设备的端点描述符有关,在端点描述符会提供设备的间隔。

因此可以查看设备的端点描述符,看下理论速度是多少。

如果是批量传输传输,比如做cdc设备,则是批量传输的,需要查看实际的速度只能通过抓包来看。

因此建议直接通过USB分析仪抓包查看实际速度判断是否传输的速度过慢。

USB主机没有中断传输的概念。主机是查询的方式,可以通过while或者定时器中断或者其他方式进行查询。

针对你提到的速度有点慢。建议先USB分析仪抓包查看实际速度。分别判断是主机查询的速度慢,还是设备的传输速度慢。可以在while里循环产生事务的逻辑的函数加上highcode,放在RAM中,查询的速度会快一些。


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