STM32Cube SDIO FatFs Interface

FatFs ist ein Software Modul für embedded systems. Es ermöglicht das interagieren mit FAT und exFat Datensystemen. So können wir zum Beispiel eine Datei auf einer microSD Karte erstellen und bearbeiten. Dafür verwenden wir die SDIO Schnittstelle, die manche STM32 besitzen. Es ist auch möglich anstelle der SDIO die SPI Schnittstelle zu verwenden. Dies wird hier aber nicht gezeigt.

Die Hardware

Um eine microSD Karte an den STM32 zu schliessen, benötigt man nicht viel. Die Karte benötigt +3.3 V Speisung. An dieser sollte so nahe an der Kartenbuchse wie möglich ein 100nF Kondensator platziert werden.
Die restlichen Leitungen können direkt mit dem STM32 verbunden werden. Sie benötigen aber je einen Pullup Widerstand. Diese sollten zwischen 50 kΩ und 100 kΩ liegen. Dafür kann man aber auch die internen Widerstände des STM32 verwenden.
Um zu erkennen ob ein Karte vorhanden ist besitzt die Kartenbuchse einen Schalter. Dieser wird gegen Gnd geschlossen sobald eine Karte eingeschoben wird.

Die Leiterbahnen sollten möglichst gleich lang sein.

STM32Cube Einstellungen

Wir verwenden den SD 4 bits Wide bus. Warum? Weil wir es können. Unten die Einstellungen. Diese kann man auf dem Standardwert lassen. Den Takt kann man ändern. Ich verwende 48 MHz.

Wir benötigen den RX und TX DMA. Dafür einfach auf add klicken und das entsprechende auswählen

Zudem müssen wir noch den SDIO Interrupt aktivieren.

In den GPIO Einstellungen muss man wenn nicht hardwaremässig vorhanden die Pullup Widerstände aktivieren.

Unter Middleware muss man zum Schluss noch das FatFs Modul aktivieren. Dafür SD Card auswählen. Zudem muss man noch den Pin für die Karten Erkennung auswählen. Abgesehen davon kann man alles auf den Standardwerten lassen.

Jetzt haben wir alles eingestellt was wir benötigen und können den Code generieren.

Die Software

Ein Paar Variablen sind bereits in der fatfs.c Datei Deklariert.

Wir benötigen für unser Beispiel hier zwei zusätzliche Variablen.

Anschliessend kann man bereits Daten auf die Karte schreiben.
Mit f_mount wird die Karte geöffnet, mit f_open wird eine neue Datei geöffnet, mit f_puts kann man die Datei beschreiben und mit f_close wird die Datei geschlossen.

Ein wichtiger Tipp für die Verwendung von f_mkfs. Finger Weg. Bei mir endet die Funktion in einem Timeout bis eine 16 Bit Variable überläuft. Ich habe es nicht ganz genau untersucht. Aber ich vermute, dass eine 16 Gb Karte ein bisschen viel für den STM32 ist.