stm32 nor flash文件系统加载失败解决
- 问题现象
- 原因总结
问题现象
在使用STM32F407 + W25QXX nor flash + fats文件系统中发现,每次stm32 + nor flash复位后,第一次挂载文件系统总是失败,提示没有安装文件系统,看日志,复位之前是挂载成功的,为什么复位一下之后,就没有文件系统了呢?还以为是文件系统移植有问题,然后就追踪代码,发现文件系统有无的判断总体流程是这样子的:首先挂在文件系统的时候,文件系统会从默认的扇区0读取整个扇区数据,识别第510字节是否为0xAA55,如果识别到了,继续判断文件系统的字符串,都识别到了,就认为该flash已经有文件系统了,但问题是,每次复位后,第一次发送读取0扇区的指令,读取出来的数据全是0xFF,百思不得其解,还以为是文件系统做了擦除的动作,跟踪代码,发现没有擦除过,那么是什么原因呢?我就在挂载文件系统之前,调用读取0扇区的接口,发现读取出来的还是0xFF,但是关键来了,后续挂载文件系统又正常了,难道每次挂载文件系统之前,我都要先手动调用一次读取才行?后续经过多次测试,发现在挂载文件系统之前,发送任何指令,都能使得文件系统挂载成功,难道flash在正式使用之前需要激活一下?
原因总结
然后百度了一下,我觉得有一种说法比较靠谱,那就是:
通讯开始前需要先清空移位寄存器里面的数据,因为很有可能W25Qxx数据寄存器中保存了数据,所以先发送一个Dummy数据,让从机移位数据寄存器把数据发出来,然后再发送指令集,其他品牌flash估计也差不多,可能没仔细看数据手册,卡了一天。