www.mikrocontroller.net

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


Autor: Peter Fischer (pefi1)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Fischer (pefi1)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du musst bei den Pin die Richtung mit den TRIS Registern passend 
einstellen, und SPI initialisieren:
SPI1CON1bits.CKE=1;
SPI1CON1bits.MSTEN=1;  // Master
SPI1CON1bits.SPRE=0;  // Divide by 8
SPI1CON1bits.PPRE=0;  // Divide by 64
SPI1CON2 = 0x0000;
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:
SPI1BUF = data;
while (!SPI1STATbits.SPIRBF);
return SPI1BUF;

Autor: Peter Fischer (pefi1)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.