使用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"。
解决方案:
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))
file.close()
来关闭文件。修改后的代码段如下所示:
file.sync();
file.close();
修改代码后,重新编译并上传到ESP32S3开发板上运行,观察串口监视器是否能够显示"\"test.txt\"打开成功"和"写入成功",如果能够显示这两条信息,则说明问题解决。
如果以上解决方案不能解决该问题,请确保SD卡已正确插入并且可读写,并且尝试使用其他SD库来进行文件读写操作。