ESP32S3无法写入SD卡(语言-c语言/c++|开发工具-vscode/platformio)

ESP32S3无法写入SD卡

  使用SdFat库,串口监视器里显示SDCard mount succeed和"test.txt"打开失败,求解决。

void SD_Setup()
{
  SdFs sd;
  SPIClass hspi(HSPI);

  hspi.begin(45, 0, 35, 36);
  if (!sd.begin(SdSpiConfig(36, DEDICATED_SPI, 18000000, &hspi)))
  {
    Serial.println("SDCard mount failed");
    bool IS_SD_OK = 0;
    return;
  }
  else
  {
    Serial.println("SDCard mount succeed");
    Serial.print("cap: ");
    Serial.print(sd.card()->sectorCount() * 512e-9);
    Serial.println(" GB");
    bool IS_SD_OK = 1;

    // FsFile file = sd.open("\\", O_RDWR); // 这一句也不行
    FsFile file;
    if (!file.open("\\test.txt", O_CREAT | O_RDWR))
    {
      Serial.println("\"test.txt\"打开失败");
    }
    else
    {
      Serial.println("\"test.txt\"打开成功");
      if (file.write("test") == -1)
      {
        Serial.println("写入失败");
      }
      else
      {
        Serial.println("写入成功");
      }
    }
    file.sync();
    file.close();
  }
}

【以下回答由 GPT 生成】

问题分析:

根据提供的代码和问题描述,可以初步判断问题可能出现在文件路径的设置上。代码中使用的文件路径为"\test.txt",这是一个绝对路径,而在SD卡上,文件路径应该是相对路径,即"test.txt"。

解决方案:

  1. 首先,将文件路径修改为相对路径,即将if (!file.open("\\test.txt", O_CREAT | O_RDWR))修改为if (!file.open("test.txt", O_CREAT | O_RDWR))

修改后的代码段如下所示:

FsFile file;
if (!file.open("test.txt", O_CREAT | O_RDWR))
  1. 然后,同样要注意文件的关闭操作,即在文件操作完成后,调用file.close()来关闭文件。

修改后的代码段如下所示:

file.sync();
file.close();

修改代码后,重新编译并上传到ESP32S3开发板上运行,观察串口监视器是否能够显示"\"test.txt\"打开成功"和"写入成功",如果能够显示这两条信息,则说明问题解决。

如果以上解决方案不能解决该问题,请确保SD卡已正确插入并且可读写,并且尝试使用其他SD库来进行文件读写操作。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^