STM32
直播中

123

11年用户 889经验值
擅长:可编程逻辑
私信 关注
[问答]

请问MSC+FATFS不兼容吗?

目前在做一个USB导出LOG的功能,使用文件系统 FATFS 将日志写入文件(用的内部flash,后512k),再用USB MSC虚拟U盘,连接PC可以直接将LOG文件拖出来,目前功能都已经实现并测试通过,但只有第一次下载程序可以正常执行,再次复位后程序直接不跑了,  影响到了flash?看一些帖子,多主机操作文件系统会出问题(STM32 与PC同时操作文件系统),我在使用USB MSC就已经把文件系统卸载了,并做了以下测试
测试:     1.usb虚拟u盘地址 与 文件系统地址 使用相同地址:0x08080000   只有第一次可以启动成功 系统复位不可用    2.usb虚拟u盘地址包括 文件系统地址  usb msc add:0x0807A000   disk fatfs address:0x08080000  系统复位不可用   3.文件系统地址包括USB虚拟u盘地址   usb msc add:0x08080000   disk fatfs address:0x0807A000  系统复位不可用
不知道啥问题了,各位大佬给点建议~~~

回帖(1)

王飞

2024-9-26 17:06:53
从您的描述来看,您在使用MSC(USB Mass Storage Class)和FATFS(Fat File System)时遇到了一些问题。在这种情况下,我们需要分析可能的原因并提供解决方案。

1. 确保USB MSC和FATFS的地址空间不冲突:您提到已经将USB虚拟U盘地址和文件系统地址设置为相同的地址(0x08080000),这可能导致地址冲突。请尝试将它们设置为不同的地址空间,以避免冲突。

2. 确保在USB MSC连接时不操作FATFS:您提到在使用USB MSC时已经将文件系统卸载,这是一个好的做法。但是,请确保在USB MSC连接期间,您的程序不会尝试访问或操作FATFS。这可以通过在USB MSC连接期间禁用FATFS操作或使用标志位来实现。

3. 检查Flash写入次数:内部Flash的写入次数是有限的,如果频繁写入可能会导致Flash损坏。请确保您的程序在写入Flash时遵循正确的擦写周期,以延长Flash的使用寿命。

4. 确保USB MSC和FATFS的初始化顺序正确:在您的程序中,确保先初始化FATFS,然后再初始化USB MSC。这样可以确保在USB MSC连接之前,FATFS已经正确初始化。

5. 检查USB MSC和FATFS的中断优先级:确保USB MSC和FATFS的中断优先级设置正确,以避免中断冲突。

6. 使用调试工具检查程序运行情况:使用调试工具(如ST-Link)检查程序在复位后是否正常运行。这可以帮助您找到问题所在。

7. 考虑使用双缓冲区:为了避免在USB MSC和FATFS之间发生冲突,可以考虑使用双缓冲区。这样,您可以在USB MSC连接期间将数据写入一个缓冲区,然后在USB MSC断开连接后将数据写入FATFS。

8. 检查USB MSC和FATFS的配置:确保USB MSC和FATFS的配置正确,包括块大小、块数等。

通过以上步骤,您应该能够找到问题所在并解决它。如果问题仍然存在,请提供更多详细信息,以便我们进一步分析。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分