ch32v203 usb模拟U盘,格式化成功,但写文件会破坏U盘FAT系统,求解决

使用官方例程CH32V20xEVT\EVT\EXAM\USB\USBD\UDisk_Flash,能够识别出U盘,也能够正常读写。但该U盘扇区大小为4096字节,单片机加载FATFS文件系统的话,扇区大小是512字节的。我自己对SW_UDISK.c文件里的void UDISK_Up_OnePack( void );和void UDISK_Down_OnePack( uint8_t *pbuf, uint16_t packlen );函数进行修改。可以识别出U盘,扇区大小也改成了512字节。但,一旦写入文件(文件没写成功),会破坏U盘的FAT系统,导致下次再插入USB的时候,电脑就弹出来是否需要格式化。通过打印UDISK_Cur_Sec_Lba(扇区指引),发现当写入文件时,UDISK_Cur_Sec_Lba会跳到0,即对FAT盘0扇区进行写入。感觉是写入的时候,UDISK_Cur_Sec_Lba乱跳,并没有按照文件系统要求进行指引。希望能帮忙解决,谢谢!

您好,

        在这个例程中存在两种模拟U盘的方式,一是使用芯片内部Flash作为存储空间,二是使用外挂的SPI Flash作为存储空间,按照您的描述,文件没有写入成功,我想知道您是使用了那种方式开辟的存储空间?

        USB上传和下载函数具体做了哪些修改呢,U盘扇区大小有相关的定义可以直接修改,如果方便的话,您可以将修改内容或工程文件发送至我的邮箱,周一上班后第一时间协助您排查问题。lbw@wch.cn

        另,在使用例程测进行试时,您可以选择使用FAT32进行测试,查看是否可以解决该问题。


你好,使用外挂W25Q128,直接修改DEF_CFG_DISK_SEC_SIZE 为512会出现无法格式化问题。我已经将工程发到你邮箱了。希望能帮忙分析一下,甚是感谢!


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