我一直在尝试挂载 SD 卡,将一些数据写入一些文件,然后卸载 SD 卡。安装一个单独的文件并写入更多文件(这是通过多路复用器和两个独立但相同的 SD 卡模块完成的)。我正在使用 STM32F3 和 SPI 接口,我可以毫无问题地挂载和写入文件,但我正在努力正确取消初始化 SD 卡之间的所有 FatFs 变量。
我正在采取以下步骤
用于f_close
关闭所有打开的文件。通过安装 NULL 驱动器来卸载驱动器f_mount(0, "", 0);
。然后我打电话FATFS_UnLinkDriver
。我的主要问题似乎是在所有这些步骤之后disk.is_initilized
仍然返回 1。
DSTATUS disk_initialize (
BYTE pdrv /* Physical drive nmuber to identify the drive */
)
{
DSTATUS stat = RES_OK;
if(disk.is_initialized[pdrv] == 0)
{
disk.is_initialized[pdrv] = 1;
stat = disk.drv[pdrv]->disk_initialize(disk.lun[pdrv]);
}
return stat;
}
因此,第二张 SD 卡不会调用我正在使用的 SPI 初始化代码。我可以通过手动调用 SPI 初始化来解决这个问题,但我想知道我是否遗漏了取消初始化的任何步骤。理想情况下,我想将所有 FatFS 堆栈恢复到默认状态,就好像微控制器在 SD 卡交换之间循环通电一样。