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
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
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(
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)
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.