Forum: Mikrocontroller und Digitale Elektronik STM32 SDIO (Elm Chan Fat-Fs) FR_NO_FILESYSTEM


von Erwin L. (stm32fan)


Lesenswert?

Hallo!
Ich versuche gerade mit dem STM32F4Discovery Board die Fat-Fs von Elm 
Chan einzubinden. Und bekomme ständig den Fehler FR_NO_FILESYSTEM.
Ich kann die SD-Karte auslesen und beschreiben ohne FAT-System. Die 
Schaltung funktioniert also. Ich hab auch schon gefunden, wo es hängen 
bleibt, aber es hängt nicht am Programm, sondern an der SD-Karte.
Es ist nämlich diese Zeile:

if (LD_WORD(&fs->win[BS_55AA]) != 0xAA55)
/* Check record signature (always placed at offset 510 even if the 
sector size is >512) */
return 2;

bloß bei meiner "Micro SDHC 8GB" Karte sind die werte nicht bei 510/511, 
sondern bei 462/463 im Array.

wenn ich das Programm testweise so schreibe:


uint8_t Buffer_Block[512];

............

Buffer_Block[510]=0x55;
Buffer_Block[511]=0xAA;

if (LD_WORD(&Buffer_Block[BS_55AA]) != 0xAA55)
/* Check record signature (always placed at offset 510 even if the 
sector size is >512) */
return 2;

dann wird kein "return 2" zurückgegeben.

Ich hab die Karte mit FAT32 formatiert (mittlerweile mehrmals). Aber es 
ist immer gleich. Google hat mir auch nicht weitergeholfen.
Und Beispiele aus dem Internet scheitern auch an der selben stelle.
Hat vielleicht einer von euch schonmal dieses Problem gehabt?

von Thomas W. (diddl)


Lesenswert?

Wenn du DMA eingeschaltet hast, dann darfst du nur vielfache von 512 
Bytes lesen (was kein Problem ist bei ELM) und der Buffer muss!! bei 
geraden Adresse beginnen 4 Byte aligned!!


static BYTE  _attribute_ ((aligned))   diskbuf[BLOCK_SIZE *2];


Ich hab da auch lange gesucht. Jetzt prüf ich im diskio.c ob die Adresse 
aligned ist, sonst buffere ich den transfer.

1
if((int)buffer & 0x3) 
2
{
3
   // internen buffer verwenden ...


Übrigens, der zusätzliche RAM ab 0x10000000 ist auch nicht DMA fähig. 
Also am besten gleich:
1
if((int)buff & 0x3  || ((int)buff & 0xf0000000) == 0x10000000)
2
{
3
   // internen buffer verwenden ...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.