在peripheral例程上添加usb host,对应usb部分有点疑问,对usb协议不是很熟悉,之前用libusb写过上位机,看usb host例程不是很清楚,流程可能有点差别,所以,请问usb host的收发是怎么样的,CH357有个例程倒是跟其他usb device通信的,非U盘之类。
// 获取透传数据 __align(4) const UINT8 GetTranData[] = { 0xc0,0x33,0x00,0x00,0x00,0x00,0x09,0x00 }; // 发送透传数据 __align(4) const UINT8 SetTranData[] = { 0x40,0x35,0x00,0x00,0x00,0x00,0x09,0x00 }; // USB Host检测设备连接 UINT8 UsbDectConn(void) { UINT8 s; s = ERR_SUCCESS; if ( R8_USB_INT_FG & RB_UIF_DETECT ) // 如果有USB主机检测中断则处理 { R8_USB_INT_FG = RB_UIF_DETECT ; s = AnalyzeRootHub( ); if ( s == ERR_USB_CONNECT ) FoundNewDev = 1; } if ( FoundNewDev || s == ERR_USB_CONNECT ) // 有新的USB设备插入 { FoundNewDev = 0; // 由于USB设备刚插入尚未稳定,故等待USB设备数百毫秒,消除插拔抖动 mDelaymS( 200 ); s = InitRootDevice(); // 初始化USB设备 if((ThisUsbDev.DeviceVID == 0x1213)&&(ThisUsbDev.DevicePID == 0x3435)) { ThisUsbDev.DeviceType = DEV_TYPE_OTHER; s = ERR_SUCCESS; UsbConnStatus = 1; } else { s = ERR_USB_UNKNOWN; UsbConnStatus = 0; } } return s; } // Usb host接收 UINT8 UsbHostRecv(void) { PUINT8 len; *len = MYUSB_RX_LEN; memset(myUsbRxBuf,0,sizeof(myUsbRxBuf)); CopySetupReqPkg( (PCHAR)GetTranData ); // 设置控制请求包 // 执行控制传输 if(ERR_SUCCESS == HostCtrlTransfer( (PUINT8)myUsbRxBuf, len, 10000000)) { return 1; } return 0; } // Usb host发送 UINT8 UsbHostSend(void) { UINT8 s; PUINT8 len; *len = MYUSB_TX_LEN; CopySetupReqPkg((PCHAR)SetTranData); s = HostCtrlTransfer((PUINT8)myUsbTxBuf, len, 200000/20 ); // 执行控制传输 if ( s != ERR_SUCCESS ) { return 0; } return 1; }