Forum: Mikrocontroller und Digitale Elektronik TI Example von SD Card Anbindung an MSP430 fehlerhaft?


von reflection (Gast)


Angehängte Dateien:

Lesenswert?

Salu zusammen

Habe ne Frage zu slaa281a. Kann es sein das die da SIMO und SOMI 
vertauscht haben, oder stehe ich jetzt da voll auf der Leitung?

Ach die Card Detection auf Pin6 ist mir schleierhaft. In allen andern 
Manuals steht das Pin6 GND ist. Was stimmt den nu?

Versuche den Code slaa281a auf meinen MSP zu laden. Hat das schon jemand 
geschafft? Muss ich da nur die Anschlüsse richtig definieren und es 
läuft? Habe hier eine neue 512MB SanDisk Karte liegen, muss ich die 
Formatieren (Fat16) oder ist die bereits richtig so wie sie ausgeliefert 
wird?

Danke schonmal im Voraus für die Mühe

Gruss reflection

von Daniel (Gast)


Lesenswert?

Moin reflection,

ohne jetzt das ganze PDF studiert zu haben, scheint es mir auch so, als 
hätten die Autoren Miso und Mosi vertauscht. DO (=Data out) von der MMC 
sollte logischerweise an MISO/SOMI (Master in, slave Out), da die MMC 
Slave ist und der Mikrocontroller Master.

Zur Card Detection kann ich Dir leider nichts sagen. Ich kenne sowas 
bisher nur als zusätzliche Pins vom Sockel, die Dir sagen, ob rein 
mechanisch eine Karte im Sockel sitzt oder nicht. Einen Pin von der MMC 
habe ich dafür noch nie benutzt.

Mit der Software hast Du nur Funktionen, um einen Sektor von der Karte 
zu lesen oder zu schreiben. Soweit ich das sehe, sind dort keine 
Funktionen dabei, die etwas mit einem Dateisystem (wie FAT16, etc). zu 
tun haben. Von daher kannst Du deine neue Karte direkt verwenden - egal 
was drauf ist. Du musst halt selbst per Software schauen, wie Du die 
Daten speicherst und ggf. selbst Routinen zum Schreiben/Lesen des 
Dateisystems implementieren.

Bye
  Daniel

von reflection (Gast)


Lesenswert?

Danke erstmal für die Antwort. Das Programm von TI stimmt mit der 
Belegung die sie im Manual angeben überein. Komisch ist, das ich diverse 
Beiträge gefunden habe wo es anscheinend läuft. Frage ist halt nur ob 
sie auch die Zuordnung geändert haben oder nicht.

Das mit dem FAT ist mir klar. Habe eben noch einen anderen Code für 
MSP430 gefunden bei dem ein FAT mit dabei ist. Muss sagen das ganze ist 
ziemlich komlex für mich. Muss mich da glaube ich länger mit 
auseinandersetzen. Vielleicht schreib ich auch gleich meine eigenen 
Routinen. Wird zwar ewig dauern, aber dafür lerne ich auch wirklich was

Gruss reflection

PS: Hat jemand ein funktionierendes Beispiel welches ich als Grundlage 
verwenden dürfte? Bei dem TI Zeugs weiss ich wieder nich ob es am Prog 
oder an der HW liegt :o(

von Sebastian K. (albatros82)


Lesenswert?

Die Frage habe ich mir auch schonmal gestellt..

Beitrag "APP Note TI. MSP430 MMC Card"

Inzwischen weiß ich das es tatsächlich so ist. MOSI und SOMI sind 
vertauscht. Nach meinen Unterlagen ist Pin 6 GND. Ich kann mir 
vorstellen das man pin 6 einfach abfragt ob er auf 0 liegt. Dann ist 
eine karte da. Vieleicht sollte man die leitung noch mit einem Pullup 
versehen das sie auch sicher auf 1 ist wenn keine Karte drinsteckt.
Das ist der Code von Ti zu dem Thema..
char mmc_ping(void)
{
  if (!(P5IN & 0x01))
    return (MMC_SUCCESS);
  else
    return (MMC_INIT_ERROR);
}

Den Code habe ich erfolgreich auf einen MSP4301611 gespielt und 
getestet. Schreiben und Lesen läuft Einwandfrei. (20ms für 512Byte)

von reflection (Gast)


Lesenswert?

Ah, ok, vielen Dank. Dann werde ich die Card Detection mal drin lassen 
(habe den Pin 6 ja direkt auf Masse gelegt). Mein SD-Sockel hat eben 
einen extra Pin für die Abfrage ob eine Karte drin ist oder nicht.
Ich schreibe ja mit diesem Prog ein Array von 512 Stellen an eine 
bestimmte pos. Muss ich nun selber dafür sorgen das er den nächsten 
Block bei der nächsten Adresse schreibt oder macht das das Dingens 
selber? Sorry für die blöde Frage, aber ich kappier das Prog einfach 
nicht...

Gruss

von Sebastian K. (albatros82)


Lesenswert?

Das ist garnicht so schwer. Da gibt es einen wunderbaren define.
Also von vorne. Bei mir sieht das so aus:
1
        //SD Karte
2
        //SD KArte initialisieren
3
        initMMC();        
4
        //Kartengröße auslesen
5
        mmcCardSize = MMC_ReadCardSize();
6
        //Maximale anzahl an buffern berechen
7
        mmcMaxSector = mmcCardSize / 512;

So jetzt kenne ich die MAximale Anzahl an 512 byte Blöcken die auf die 
Karte passt. Jetzt darf geschrieben werden.
1
//MMC Write buffer
2
unsigned char mmcbuffer1[512];
3
//schreiben
4
mmcWriteSector(mmcSector,mmcbuffer1);
5
//lesen
6
mmcReadSector(mmcSector,mmcbuffer1);

Den Sektor sollte man natürlich nach jedem schreiben erhöhen, sonst 
überschreibt man ja immer seine Daten.

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.