看了CH554的USB参考代码
但是没有看出来具体哪里有发送数据函数和接受数据函数。
void DisableRootHubPort( ); // 关闭ROOT-HUB端口,实际上硬件已经自动关闭,此处只是清除一些结构状态
UINT8 AnalyzeRootHub( void ); // 分析ROOT-HUB状态,处理ROOT-HUB端口的设备插拔事件
// 返回ERR_SUCCESS为没有情况,返回ERR_USB_CONNECT为检测到新连接,返回ERR_USB_DISCON为检测到断开
void SetHostUsbAddr( UINT8 addr ); // 设置USB主机当前操作的USB设备地址
void SetUsbSpeed( UINT8 FullSpeed ); // 设置当前USB速度
void ResetRootHubPort( ); // 检测到设备后,复位相应端口的总线,为枚举设备准备,设置为默认为全速
UINT8 EnableRootHubPort( ); // 使能ROOT-HUB端口,相应的bUH_PORT_EN置1开启端口,设备断开可能导致返回失败
void SelectHubPort( UINT8 HubPortIndex );// HubPortIndex=0选择操作指定的ROOT-HUB端口,否则选择操作指定的ROOT-HUB端口的外部HUB的指定端口
UINT8 WaitUSB_Interrupt( void ); // 等待USB中断
// CH554传输事务,输入目的端点地址/PID令牌,同步标志,以20uS为单位的NAK重试总时间(0则不重试,0xFFFF无限重试),返回0成功,超时/出错重试
UINT8 USBHostTransact( UINT8 endp_pid, UINT8 tog, UINT16 timeout ); // endp_pid: 高4位是token_pid令牌, 低4位是端点地址
UINT8 HostCtrlTransfer( PUINT8X DataBuf, PUINT8 RetLen ); // 执行控制传输,8字节请求码在pSetupReq中,DataBuf为可选的收发缓冲区
// 如果需要接收和发送数据,那么DataBuf需指向有效缓冲区用于存放后续数据,实际成功收发的总长度返回保存在ReqLen指向的字节变量中
void CopySetupReqPkg( PUINT8C pReqPkt ); // 复制控制传输的请求包
UINT8 CtrlGetDeviceDescr( void ); // 获取设备描述符,返回在TxBuffer中
UINT8 CtrlGetConfigDescr( void ); // 获取配置描述符,返回在TxBuffer中
UINT8 CtrlSetUsbAddress( UINT8 addr ); // 设置USB设备地址
UINT8 CtrlSetUsbConfig( UINT8 cfg ); // 设置USB设备配置
UINT8 CtrlSetUsbIntercace( UINT8 cfg ); // 设置USB设备接口
#ifndef DISK_BASE_BUF_LEN
UINT8 CtrlClearEndpStall( UINT8 endp ); // 清除端点STALL
UINT8 CtrlGetHubDescr( void ); // 获取HUB描述符,返回在TxBuffer中
UINT8 HubGetPortStatus( UINT8 HubPortIndex ); // 查询HUB端口状态,返回在TxBuffer中
UINT8 HubSetPortFeature( UINT8 HubPortIndex, UINT8 FeatureSelt ); // 设置HUB端口特性
UINT8 HubClearPortFeature( UINT8 HubPortIndex, UINT8 FeatureSelt ); // 清除HUB端口特性
UINT8 AnalyzeHidIntEndp( PUINT8X buf ); // 从描述符中分析出HID中断端点的地址
UINT8 EnumAllRootDevice( void ); // 枚举所有ROOT-HUB端口的USB设备
UINT8 InitDevOnHub(UINT8 HubPortIndex ); // 初始化枚举外部HUB后的二级USB设备
UINT8 EnumHubPort( ); // 枚举指定ROOT-HUB端口上的外部HUB集线器的各个端口,检查各端口有无连接或移除事件并初始化二级USB设备
UINT8 EnumAllHubPort( void ); // 枚举所有ROOT-HUB端口下外部HUB后的二级USB设备
UINT16 SearchTypeDevice( UINT8 type ); // 在ROOT-HUB以及外部HUB各端口上搜索指定类型的设备所在的端口号,输出端口号为0xFFFF则未搜索到
// 输出高8位为ROOT-HUB端口号,低8位为外部HUB的端口号,低8位为0则设备直接在ROOT-HUB端口上
UINT8 SETorOFFNumLock(PUINT8 buf);
#endif
UINT8 InitRootDevice( ); // 初始化指定ROOT-HUB端口的USB设备
void InitUSB_Host( void ); // 初始化USB主机