Forum: Mikrocontroller und Digitale Elektronik dsPIC33 und MMC/SD-Karte via SPI


von Peter F. (pefi1)


Lesenswert?

Hallo!

Hat jemand von Euch schon mal an einem dsPIC33FJ128GP710 MMC/SD-Karten 
zum Laufen gebracht, die via SPI angebunden ist?

Hintergrund: Ich verwende hier ein Mikroelektronika LV24-33A-Board. 
Dieses wird mit einem PIC24FJ96GA010 ausgeliefert. Ein Beispiel für den 
Mikroelektronika C-Compiler für dsPICs läuft auf diesem MC relativ 
problemlos (Beispiel MMC_Fat15_Example.c, frisch-formatiertes 
FAT-Dateisystem auf der Karte notwendig). Wenn ich den dsPIC33 verwenden 
will, bekomme ich keine SD-Karte initialisiert.

Danke und Gruß
PeFi

von Benedikt K. (benedikt)


Lesenswert?

Peter Fischer schrieb:

> Hat jemand von Euch schon mal an einem dsPIC33FJ128GP710 MMC/SD-Karten
> zum Laufen gebracht, die via SPI angebunden ist?

Ja.

von Peter F. (pefi1)


Lesenswert?

Hallo Benedikt!

Das war eine kurze und knappe Antwort. :-)

O.k., anders formuliert: Was ist zu tun, damit ich a) die CPU richtig 
konfiguriert habe und b) SPI korrekt angesprochen wird.  Ich bitte um 
Lösungsbeispiele.

An der CPU ist ein externer 10MHz-Quarzoszillator angeschlossen.

Gruß
PeFi

von Benedikt K. (benedikt)


Lesenswert?

Du musst bei den Pin die Richtung mit den TRIS Registern passend 
einstellen, und SPI initialisieren:
1
SPI1CON1bits.CKE=1;
2
SPI1CON1bits.MSTEN=1;  // Master
3
SPI1CON1bits.SPRE=0;  // Divide by 8
4
SPI1CON1bits.PPRE=0;  // Divide by 64
5
SPI1CON2 = 0x0000;
6
SPI1STAT = 0x8000;  // enable SPI

Nach dem Init der SD Karte kann man die Taktfrequenz erhöhen indem man 
den Prescaler verkleinert.

Das Senden/Empfangen eines Bytes sieht so aus:
1
SPI1BUF = data;
2
while (!SPI1STATbits.SPIRBF);
3
return SPI1BUF;

von Peter F. (pefi1)


Lesenswert?

Hallo Benedikt!

Danke für Deine Antwort, die mir mit geholfen hat!

Auf dem Mikroelektronika-Board LV24-33A ist im Handbuch angegeben, dass 
alle DIP-Schalter für den MMC/SD-Zugriff gesetzt müssen. So geht z.B. 
dann das SD-Signal SCK auf RG6 und RB6. Nachdem ich nun die Verbindung 
zu RB6 ausschaltete und mit Deiner Initialisierungshilfe die 
SPI2-Schnittstelle startete, konnte ich auf SD- und MMC-Karten 
zugreifen.

Mikroelektronika C Compiler für dsPIC bietet Funktionen an, die die 
SPI-Schnittstelle initialisieren. Das scheint aber nur dann zu 
funktionieren, wenn das SPI-Modul disabled ist.

Danke!

Gruß
PeFi

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.