CH582 双 USB 奇怪问题

我开发了一个涉及 SD 卡和闪存的项目,并模拟了运行良好的 UDisk。我已经做了一个 if 定义来选择在编译时使用哪个 USB 端口,并且一切正常。现在我测试了 UFI 库 EXAM1 项目,它单独运行良好。当我将 EXAM1 代码结合到我现有的项目中时,无法检测到 pendrive,因此它无法执行文件写入。如果我将 USB2 连接到 PC,则模拟的 UDISK 功能也能正常工作,EXAM1 代码也能正常工作。我的意思是,只有当 USB2 连接到 PC(模拟 udisk)时,USB 驱动器才会被检测到并工作。可能是什么问题?

USB_HostInit();
CHRV3LibInit();


????????s?=?ERR_SUCCESS;
????????if(R8_USB_INT_FG?&?RB_UIF_DETECT)
????????{
????????????R8_USB_INT_FG?=?RB_UIF_DETECT;
????????????PRINT("Analyse?RootHub\r\n");DelayMs(200);
????????????s?=?AnalyzeRootHub();
????????????if(s?==?ERR_USB_CONNECT){FoundNewDev?=?1;}
????????}

????????if(FoundNewDev?||?s?==?ERR_USB_CONNECT)
????????{
????????????FoundNewDev?=?0;
????????????mDelaymS(200);
????????????s?=?InitRootDevice();
????????????if(s?==?ERR_SUCCESS)
????????????{
????????????????CHRV3DiskStatus?=?DISK_USB_ADDR;
????????????????for(i=0;i!=10;i++)
????????????????{
????????????????????PRINT("Wait?DiskReady\r\n");
????????????????????s?=?CHRV3DiskReady();
????????????????????if(s?==?ERR_SUCCESS){break;}
????????????????????else{PRINT("%02x\r\n",?(uint16_t)s);}
????????????????????mDelaymS(50);
????????????????}

????????????????if(CHRV3DiskStatus?>=?DISK_MOUNTED)
????????????????{
????????????????????PRINT("Create\r\n");
????????????????????strcpy((PCHAR)mCmdParam.Create.mPathName,?"/WCH-045.TXT");
????????????????????s?=?CHRV3FileCreate();
????????????????????mStopIfError(s);
????????????????????PRINT("ByteWrite\r\n");
????????????????????i?=?sprintf((PCHAR)buf,?"This?file?is?generated?through?wch-ufi?library...\xa\xd");
????????????????????for(c=0;c<2;c++)
????????????????????{
????????????????????????mCmdParam.ByteWrite.mByteCount?=?i;
????????????????????????mCmdParam.ByteWrite.mByteBuffer?=?buf;
????????????????????????s?=?CHRV3ByteWrite();
????????????????????????mStopIfError(s);
????????????????????}
????????????????????PRINT("Close\r\n");
????????????????????mCmdParam.Close.mUpdateLen?=?1;
????????????????????i?=?CHRV3FileClose();
????????????????????mStopIfError(i);
????????????????}
????????????}
????????}


上述代码是当 USB2 未连接到 PC 时不会执行的考试 1 代码。

确认一下你是不是一个USB口模拟Udisk,一个做HOST用CHRV3Lib库操作Udisk?那么这样的话,你的代码中需要有两套USB的代码。


您好,感谢您的回复。我已经设法解决了这个问题,现在一切都正常了。我的意思是两个 USB(1 作为设备,1 作为主机)都可以正常工作。现在我几乎没有疑问了……

当我想使用单个 USB MCU 时,我想使用外部引脚或命令随时将 USB 配置为设备/主机模式。在这种情况下,例如从设备模式到主机模式或反之亦然,我们是否需要硬重置 CPU?是否可以在不重置 MCU 的情况下随时更改 USB 模式?随时更改 USB 模式的正确步骤是什么?

CHRV3UFI 文件系统库是否有重命名文件的选项?


可以不进行重置MCU。

先将USB断开连接,在关闭USB功能后延时一段时间,比如说10ms,让主机确定从机断开后,再初始化另一个模式。

文件系统重命名的功能,可以参考USB HOST的操作。


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