Forum: Mikrocontroller und Digitale Elektronik MMC Lin von Ulrich radig


von Jenzi (Gast)


Lesenswert?

Hallo.
Ich bin gerade dabei die eine MMC mit der LIB von Ulrich Radig
anzusteuern. Ich habe überall wo Mega32 steht Mega16 reingeschrieben
(sind ja PIN kompatibel)
(ich nutze die beispiel funktion)
Dann hab ich noch ein paar zusätzliche UART-Debug strings hinzugefügt.
(und eine funtkion die Wartet bis eine Taste gedrückt wird:
1
  //Initzialisierung der seriellen Schnittstelle
2
  IOInit();
3
  
4
  //öffnet einen kanal für printf
5
  fdevopen (uart_putchar, NULL, 0);
6
7
  DDRC = 0x00;
8
  PORTC = 0xFF;
9
  printf ("~");  //Debug String
10
  while ((PINC|0b11111110)==0xFF); //Warte bis taste gedrückt
11
12
  //Initialisierung der MMC/SD-Karte
13
  printf ("System OK\n\n");    //Debug String
14
  while ( mmc_init() !=0) //ist der Rückgabewert ungleich NULL ist ein
15
Fehler aufgetreten
16
    {
17
    printf("** Keine MMC/SD Karte gefunden!! **\n");  
18
    }
19
    
20
  printf("Karte gefunden!!\n");  //Debug String
21
  printf("0");  //Debug String
22
  Cluster_Data_Store();//laden Cluster OFFSET und Size ins EEPROM
23
  //Initialisierung der MMC/SD-Karte ENDE!
24
  printf("1");  //Debug String
25
  unsigned char Buffer[512];
26
  unsigned int tmp;
27
........

über den UART komt folgende rein: (solange ich die taste Drücke)
~System OK
Karte gefunden!!
0~System OK
Karte gefunden!!
0~System OK
Karte gefunden!!
0~

d.h nach der Funktion Cluster_Data_Store(); wird ein Reset ausgelöst (/
die funktion main beginnt von vorne)

Wodurch könnte das zu stande kommen ?

von Hannes L. (hannes)


Lesenswert?

Hat der Mega16 dafür überhaupt genügend SRAM???

...

von Jenzi (Gast)


Lesenswert?

ka....Kann schon sein, das der nicht reicht....wie kann ich das
feststellen ? und warum wird dann ein Reset ausgelöst (ich denk mal des
is n Reset)

von Jenzi (Gast)


Lesenswert?

OK, hab des Porgramm jetzt aufn mega32 geladen....und es geht ohne
probleme. Lag wahrscheilich wirklich am speicher. Wiso ist der Speicher
eigentlich zu klein ? /was ist an dem FAT16 System zu gross ?

von Hannes L. (hannes)


Lesenswert?

FAT16 erfordert, dass du immer einen gesamten Sektor im SRAM liegen hast
(wenn ich mich nicht irre, sogar zweimal). Und das sind schonmal 512
Bytes (je Sektor). Dann noch die Variablen, das läppert sich zusammen.

FAT ist nunmal nicht das optimale System, dafür leider das
verbreitetste. Ist nunmal die Rache von Onkel Bill...

...

von Manuel (Gast)


Lesenswert?

Der Grund da das FAT Dateisystem nicht auf jedem Controller funktioniert
 liegt tatsächlich an den Buffer - Variablen
FAT16 ---> Sektorgröße = 512Byte macht x2 1024Byte und ist somit zu
groß für zB Mega8 mit 1K SRAM-Speicher.


MfG

von Martin Thomas (Gast)


Lesenswert?

Fuer "die Kleinen" einen Test wert:
http://elm-chan.org/fsw/ff/00index_e.html in der "Tiny-FatFs"
Konfigration.

von Olaf (Gast)


Lesenswert?

Also 512Byte Buffer sind immer fuer SD-Ram/MMC Karte notwendig wenn man
sie beschreiben will. Egal ob mit Filesystem oder nicht. Es waere
qsicherlich auch denkbar sich ein FAT12/FAT16/FAT16BIG zu schreiben das
auch nur mit 512Byte Buffer und vermutlich so 100Byte fuer bestimmte
Variablen auskommt.
Es waer sicherlich grottenlahm und total ineffizient, aber machbar
sollte es sein. Es wird aber auch einiges an Flashrom brauchen.

Wollte ich bei Gelegenheit mal machen, allerdings reicht es in den
meisten Faellen doch aus ein einziges File zu beschreiben. Das kann man
dann auch direkt und linear und  spart sich viel Aufwand.

Olaf

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.