tovax 发表于 2018-7-14 13:18:44

内部flash小u盘不能格式化

用STM32CubeMX配置USB Device的MSC来做U盘,使用STM32内部FLASH作为U盘存储空间;
完善了STORAGE_Read_FS和STORAGE_Write_FS两个函数,但是没有移植文件系统;
现在电脑上可以看到U盘图标,但是无法格式化,请问电脑进行格式化的操作需要在STM32固件中另外添加什么函数吗?还是需要移植文件系统后才能格式化呢?


eric2013 发表于 2018-7-14 14:13:57

无法格式化一般是因为你的USB接口函数,即操作Flash读写的函数有问题。

tovax 发表于 2018-7-14 15:57:18

eric2013 发表于 2018-7-14 14:13
无法格式化一般是因为你的USB接口函数,即操作Flash读写的函数有问题。

嗯嗯,刚才单独测试了一下“擦除”“读取”“写入”三个函数的功能,没发现异常。
在移植FatFs的时候,好像记得要求扇区数要大于128个,不知道Windows的格式化操作有没有这个要求呢?
我的PC系统是Win7 32bit,用默认的FAT进行的格式化,因为没有fat12和fat16可以选择;
单片机型号是STM32F103RBT6,内部128KB flash,20KB ram,前64KB做程序存储区,后64KB做U盘虚拟存储区,页大小是0x400,也就是只有64个扇区。

tovax 发表于 2018-7-14 15:59:27

eric2013 发表于 2018-7-14 14:13
无法格式化一般是因为你的USB接口函数,即操作Flash读写的函数有问题。

不知道怎么上传附件,方便的话,留个邮箱我发给你看看吧:handshake

tovax 发表于 2018-7-14 16:43:46

以下是STM32CubeMX工程中的配置:
USBD_MAX_NUM_INTERFACES (Maximum number of supported interfaces) ===> 1
USBD_MAX_NUM_CONFIGURATION (Maximum number of supported configuration) ===> 1
USBD_MAX_STR_DESC_SIZ (Maximum size for the string descriptors) ===> 512 bytes
USBD_SUPPORT_USER_STRING (Enable user string descriptor) ===> Disabled
USBD_SELF_POWERED (Enabled self power) ===> Enalbed
USBD_DEBUG_LEVEL (USBD Debug Level) ===> 0: No debug message
MSC_MEDIA_PACKET (Media I/O buffer Size) ===> 512 bytes

tovax 发表于 2018-7-14 20:46:47

又用STM32F429测试了一下,分配64KB的RAM,也是一样的“Windows无法完成格式化”;
F429是操作的RAM,按说读写应该不会出什么问题,可是异常状况还是一样的。

sanit 发表于 2018-7-14 22:12:40

直接上RL_USB吧,爽飞。主机和从机都比ST_USB好用,还稳定

tovax 发表于 2018-7-14 23:03:45

sanit 发表于 2018-7-14 22:12
直接上RL_USB吧,爽飞。主机和从机都比ST_USB好用,还稳定

好的,有空试试看:handshake

tovax 发表于 2018-7-14 23:05:46

“Windows无法完成格式化”的原因正如eric2013所说,我的读写不对,FAT扇区是512的,我按1024的STM32页大小在操作。现在STM32F429的RAM模拟U盘可以了。
页: [1]
查看完整版本: 内部flash小u盘不能格式化