Ich versuche, mit Hilfe von FATFS R0.11 eine SD-Karte der Klasse 10 - 2 GBf_mount()
von STM32 zu lesen und zu schreiben, aber die Funktion gibt FR_NO_FILESYSTEM
einen Fehlercode zurück. Ich habe den gleichen Code auf einer SD-Karte der Klasse 4 - 2 GB und der Klasse 10 - 16 GB getestet , und es hat perfekt funktioniert. Was mache ich hier falsch für diese spezielle SD-Karte?
Code:
FIL filTest;
FATFS fs;
FRESULT initSD()
{
disk_initialize(0);
FRESULT res;
res = f_mount(&fs, "", 1);
if(res != FR_OK)
{
return res;
}
res = f_open(&filTest, "test.txt", FA_OPEN_ALWAYS | FA_WRITE | FA_READ);
return res;
}
Sie erhalten einen Rückgabecode FR_NO_FILESYSTEM, wenn ein Dateisystem nicht existiert ( LINK ). Formatiere einfach die SD-Karte und es sollte in Ordnung sein. Ich gehe davon aus, dass Sie die kostenlose Implementierung von FAT von Elm Chan verwenden.
Noch mehr Spaß: Wenn Sie tief genug in ff.c einsteigen, können Sie sehen, dass wir check_fs() innerhalb von find_volume() aufrufen. In check_fs() prüfen wir, ob die SD-Karte oder der Flash oder irgendein Speicher ein FAT-Dateisystem hat. Wir brauchen ein Dateisystem, um eine Festplatte zu mounten. Sie können f_mkfs verwenden, um ein System in FAT zu formatieren. ( VERKNÜPFUNG )
Ich hatte das Problem, dass 1 meiner 4 herumliegenden SD-Karten funktionierte. Bei den anderen bekomme ich FR_NO_FILESYSTEM beim Mounten mit f_mount. Wenn Sie Ihre Karte mit HxD in Sektor 0 überprüfen, sollten die letzten 2 Bytes 0x55 und 0xAA sein, wenn sie mit FAT formatiert sind.
Meine Karten waren korrekt formatiert, wurden aber nicht als FAT-Format erkannt und der Fehler lag tatsächlich in der Low-Level-Implementierung.
Auf STM32 (mit spi HAL-Bibliothek) muss beim Lesen von der SD-Karte ein 0xFF gesendet werden (MOSI muss für jedes Bit HIGH sein) und daher musste ich die Funktion HAL_SPI_TransmitReceive() verwenden, um beim Empfangen ein 0xFF zu senden.
Danach funktionierten die anderen Karten ohne Probleme.
Ich denke, einige Karten können ohne sie leben.
TurboJ
JimmyB