Hallo, ich versuche gerade eine SD Karte über SPI an den PIC16F887 anzuschließen. Ich habe schon einiges im Netz dazu gefunden und ein paar Versuche gemacht, jedoch will es nicht funktionieren. Ich bekomme bei der Initialisierung der SD Karte nie eine Antwort auf den CMD0 Befehl. Deswegen würde ich gerne ein paar Fehler ausschließen. Ich benutze dieses Speicherkartenmodul: http://www.pollin.de/shop/dt/MDQ2OTgxOTk-/Bausaetze_Module/Entwicklerboards/SD_Speicherkartenmodul.html So schließe ich den PIC an das Speicherkartenmodul an: - SD | PIC - -------------- SS -> VSS GND -> VSS 3.3V -> VDD MISO -> SDI MOSI -> SDO SCK -> SCK Ich betreibe den PIC und die SD Karte vom PIC Kit 3 aus mit 3.125V. Ich benutze diese SD Karte: http://www.amazon.de/Kingston-Technology-SD-Card-2GB/dp/B000EOMXM0 Und so sieht mein Programm Ablauf aus: 01. Setze SDO Tris auf Output 02. Setze SDI Tris auf Input 03. Setze SCK Tris auf Output 04. Setze SSPCON auf B'00100010' 05. Setze SSPSTAT auf B'11000000' 06. 8 mal: 01. B'11111111' in SSPBUF schreiben 02. 60ms warten 07. CMD0 schicken: 01. B'01000000' in SSPBUF schreiben 02. 60ms warten 03. B'00000000' in SSPBUF schreiben 04. 60ms warten 05. B'00000000' in SSPBUF schreiben 06. 60ms warten 07. B'00000000' in SSPBUF schreiben 08. 60ms warten 09. B'00000000' in SSPBUF schreiben 10. 60ms warten 11. B'10010101' in SSPBUF schreiben 12. 60ms warten 08. Auf Antwort warten: 01. B'11111111' in SSPBUF schreiben 02. 60ms warten 03. SSPBUF lesen 04. Gelesenen Wert testen nach B'00000001' 05. Test nicht erfolgreich auf Antwort warten Wie oben schon erwähnt bekomme ich nie die Antwort B'00000001'. Hat jemand eine Idee was schief laufen könnte?
Die SPI Clock Rate darf maximal 400 KHz sein, da SD Karten als "Open Drain" aus dem Power-up Reset kommen. Schau Dir mal die Spec genauer an. Deine Bitzuweisungen sind extrem schlecht lesbar, und ich schaue jetzt nicht ins DB ob Du da entsprechende Teiler setzt. Dafür müsste man mich bezahlen ;-) Ach ja: Wieso wartest Du 60 ms und nicht auf das entsprechende "SPI Busy" Bit? Bei Punkt 8 und nicht erfolgter Antwort 0x01 würde ich zurück zum Punkt 6 springen. Einige Karten brauchen zum "Hochfahren" etwas Zeit und sind erst danach ansprechbar. Ich sehe keinen Hinweis auf SS. Der muss da auch korrekt geschaltet werden, siehe Spec (auf sdcard.org).
Wie Du leicht sehen kannst, ist die SD Karten Ansteuerung nicht ganz trivial. Schau Dir lieber mal Beispielcode im Internet an.
Jim M. schrieb: > Ich sehe keinen Hinweis auf SS. Der muss da auch korrekt geschaltet > werden, siehe Spec (auf sdcard.org). Steht weiter oben: Osccon schrieb: > SS -> VSS
Den Vorteiler setze ich auf 64 und den PIC betreibe ich bei 4 MHz internal Oscillator. Ich habe es jetzt auch mal so gemacht, dass er wieder bei 6. Anfängt. Aber nach wie vor dasselbe.
Also, da gibts ein Beispiel dafür: http://elm-chan.org/fsw/ff/00index_e.html Das ist zwar für PIC24, aber der Unterschied ist gering. Man findet die Low-Level IO-Geschichten in diesem Zip "FatFs sample projects for various platforms September 5, 2015". Dabei interessant ist die "mmc..." irgendwas c-file, dieses enthält immer die Ansteuerung. Bei mir lief das auf Anhieb. Das selber zu schreiben macht nur dann Sinn, wenn du spass dran hast, oder wenn du das verstehen möchtest.
Route 6. schrieb: > Jim M. schrieb: >> Ich sehe keinen Hinweis auf SS. Der muss da auch korrekt geschaltet >> werden, siehe Spec (auf sdcard.org). > > Steht weiter oben: > > Osccon schrieb: >> SS -> VSS Das ist leider komplett falsch. SD Karten kommen im SD Modus hoch, da darf SS nicht auf VSS liegen. Die ersten 80 Dummy Bits sendest Du für einen SD Mode Reset, dabei muss SS High Pegel haben. Erst danach schaltest Du SS auf Low für das CMD0 Umschalten nach SPI Mode. SS will man auch sonst geschaltet haben, denn mit dem Übergang High->Low wird der SPI Bitzähler zurück gesetzt. Damit kann man z.B. überzählige Clock Pulse bei Störungen (oder beim Einschalten) abfangen.
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.