使用CH32V307的开发板,将freertos例程和USBHS设备模式的MSC-U-DISK例程结合,目的是类似将sdio方式的emmc变成u盘的功能,目前可以在freertos下将其变成u盘打开看到里面的文件,插拔多次都能识别到usb设备,但对里面文件进行复制粘贴和删除操作时,会卡住很久,然后就识别不到u盘,显示无法识别到usb设备。再重新插入时就无法识别了。
请问是中断方面需要怎么调整吗,或者有相关的例子吗
使用CH32V307的开发板,将freertos例程和USBHS设备模式的MSC-U-DISK例程结合,目的是类似将sdio方式的emmc变成u盘的功能,目前可以在freertos下将其变成u盘打开看到里面的文件,插拔多次都能识别到usb设备,但对里面文件进行复制粘贴和删除操作时,会卡住很久,然后就识别不到u盘,显示无法识别到usb设备。再重新插入时就无法识别了。
请问是中断方面需要怎么调整吗,或者有相关的例子吗
您好,注意程序中若用到延时,延时函数要换成FreeRTOS下的延时函数,调用vTaskDelay延时函数。关于中断的话,USB中断优先级一般默认是最高的。可以看一下中断声明方式,根据mstatus寄存器的值进行声明,采用软件压栈或者硬件压栈声明方式。暂时没有相关例程,若方便,可将例程发我邮箱(lzs@wch.cn)具体看一下。
碰到了同样的问题,移植USB+EMMC+DISK到FREERTOS中。USB MSC正常枚举,但写入或者读取的时候会卡在对应的读写函数中,TIMEOUT变量被置位了,在等待对应的写入读取完成标志位,可是一直都没有进入对应的SDIO中断。
我用了USB+SD+DISK的工程移植到FREERTOS中,也是同样的问题。
理论上来说,FREERTOS模版中使用了Systick定时器作为基准定时器,其他地方就不能在用这个定时器了,但对应的代码中我也没有看到有延时函数。直接就卡死在了USB中断->SDIO操作->读/写函数中了。感觉是SDIO中断回调出现了问题,可以帮忙查一下问题吗?
而且似乎官网给出的EMMC例子中,非DMA模式,流模式也有问题,使用流模式直接无法进行USBMSC的枚举。
问问各位技术大佬,这个DMA或者说SD操作不返回标志位的问题,有比较好的解决方法吗? 一般都是什么问题导致的呀,EMMC中甚至连轮询模式也不行。
我插入电脑,首次格式化都不成功0.0。更别说进行文件复制粘贴了,哎
感觉CH30x系列的SDIO支持会比EMMC好, EMMC可能维护的人不是很多, 使用的人也不是很多. 但是DMA库有问题好像真的不知道如何解决了哈哈..
今天仔细debug了一下, DMA2传输完成之后,理论上SDIO要进入中断,回复一下CMD24命令, 但SDIO的状态 STA->CMDACT一直置位, 正在传输命令, 感觉是IP里面状态没改过来, 剩下的也不知道怎么查了....
目前我也依然没调通,一步步的看似没得啥问题。更深一点,看不懂。我用的是V305,最奇怪的是,使用fatfs文件系统后,挂载正常,但只要有f_open这一句代码,编译的时候,flash占用直接超出最大限度,由本来30KB变为200多KB,完全找不到方向。还在等他们技术的回复,帮忙看看是什么原因