Forum: Mikrocontroller und Digitale Elektronik SD Card 328P SPI timeout


von martin s. (schmidtjr)


Lesenswert?

Hallo liebe Mikrocontroller Gemeinde,

ich verzweifle gerade mal wieder.
Ich habe mein Projekt soweit vorbereitet und mit dem Arduino UNO R3 
getestet. Softwareseitig passt es, die Schaltung bisher auch.

Nun wollte ich das Ganze auf einen eigenständigen 328P-PU bringen und 
letztendlich auf eine Platine. Also Bootloader auf den Chip, Programm 
drauf. Funktioniert soweit, nur die SD Karte wird nicht initialisiert. 
Es hängt bspw. auch ein 16x2 Display dran (via 4094 um Ausgänge zu 
sparen). Dieses funktioniert, wird korrekt initialisiert  und kann Daten 
anzeigen.

Aber bei der Initialisierung der SD Karte bekomme ich Fehler 1 = 
"timeout error for command CMD0 (initialize card in SPI mode)". Aber nur 
beim Standalone Chip! Baue ich denselben Chip in den Arduino und stecke 
die 4kabel entsprechend um, funktioniert die Initialisierung und das 
Ganze Programm! Außer den 4 Kabeln am 328p bzw. Arduino wird nichts 
umgebaut am Breadboard, die Verkabelung ist also quasi die Selbe.
Die Schaltung ist bisher testweise per Breadboard aufgebaut, noch nichts 
gelötet.
Da der Chip im Arduino Board funktioniert schließe ich falsche Fuses 
oder fehlerhafte Programmierung aus. Da das LCD Display funktioniert 
schließe ich ein generelles Versagen der Standalone Schaltung auch aus. 
Woran kann es liegen?


Noch ein paar Daten:
Standalone Schaltung ala: http://arduino.cc/en/Main/Standalone
- 16MHz Quartz an pin 9/10, jeweils 22pF richtung GND
- +5v an pin 7, 20, jeweils 100nF richtung GND
- GND an pin 8, 22
- 10K von pin1 auf GND

Stromversorgung:
- geplant war 7805, im Moment zapfe ich im Standalone aber auch einfach 
die 5V vom Arduino um Fehler auszuschließen

SD Kartenleser von "LC Studio" angeschlossen ala: 
http://forum.arduino.cc/index.php?PHPSESSID=1l183mgh8net2i5sbgvd1lnq72&topic=186379.msg1380090#msg1380090
- entweder an Pins 16,17,18,19 (328p) oder auf dem Arduino an Digital 
10,11,12,13 (was ja das Selbe sein sollte)
- verwendete Library: Arduino SdFat Library by William Greiman
- init Aufruf: sdCard.begin(10, SPI_FULL_SPEED) oder sdCard.begin(10, 
SPI_HALF_SPEED) oder... macht keinen Unterschied


Ich hoffe ich habe keine wichtigen Infos vergessen, Schaltplan hab ich 
grad nicht zur Verfügung, ein Foto vom Breadboard Aufbau kann ich 
nachreichen bei Interesse.
Also, die spannende Frage: Warum funktioniert es wenn der Chip auf dem 
Arduino Board steckt, aber sobald der Chip Standalone betrieben wird 
gibt es einen Timeout?

Vielen Dank,
Mit freundlichen Grüßen
Martin Schmidt

von holger (Gast)


Lesenswert?

>Also, die spannende Frage: Warum funktioniert es wenn der Chip auf dem
>Arduino Board steckt, aber sobald der Chip Standalone betrieben wird
>gibt es einen Timeout?

Falsch angeschlossen.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

martin schmidt schrieb:
> Also, die spannende Frage: Warum funktioniert es wenn der Chip auf dem
> Arduino Board steckt, aber sobald der Chip Standalone betrieben wird
> gibt es einen Timeout?

 Pullups ?

von martin s. (schmidtjr)


Angehängte Dateien:

Lesenswert?

Hi,

vielen Dank schonmal für die Antworten.

holger schrieb:
> Falsch angeschlossen.

Ja, das ist möglich, aber ich hab es jetzt gefühlte 100mal durchgeschaut 
und find es nicht. Ich habe nun doch mal das Breadboard Foto als Anhang 
beigefügt, bitte nicht erschrecken :). Beim Wechsel von Standalone zu 
Arduino versetze ich lediglich den 328p und die 4 Kabel vom SD Reader 
(im Bild die 3 blauen von oben rechts links zum 328p). Ich setze sie von 
pins 16,17,18,19 am 328p auf Digital 10,11,12,13 am Arduino. Selbe 
Reihenfolge... laut http://arduino.cc/en/Hacking/PinMapping168 sollte 
das passen.

Marc Vesely schrieb:
> Pullups ?

Wo vermisst du Pullups? In folgendem Diagram sehe ich am Arduino auch 
keine Pullups an den entsprechenden Pins: 
http://arduino.cc/en/uploads/Main/Arduino_Uno_Rev3-schematic.pdf


Mit freundlichen Grüßen
Martin Schmidt

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

martin schmidt schrieb:
> Wo vermisst du Pullups? In folgendem Diagram sehe ich am Arduino auch

 SS ?

von martin s. (schmidtjr)


Lesenswert?

Hi Marc,

an SS (=PB2, Pin16) hab ich folgende Pullups ausprobiert: 10K, 4,7K, 1K, 
220Ohm. Kein Erfolg.

Mit freundlichen Grüßen
Martin Schmidt

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

martin schmidt schrieb:
> - geplant war 7805, im Moment zapfe ich im Standalone aber auch einfach
> die 5V vom Arduino um Fehler auszuschließen

 5V <=> 3,3V ?

von martin s. (schmidtjr)


Lesenswert?

Hi,

der SD Card Reader von "LC Studio" (China Reader, Ebay) hat einen 5Volt 
Anschluss und läuft auch am Arduino direkt mit 5V, ohne dass ich auf 
3,3V herunterregeln muss.
Hier mal ein Bild des Readers: 
http://cdn.instructables.com/FZT/ULKU/H9G19FWD/FZTULKUH9G19FWD.LARGE.jpg
Allerdings habe ich gerade beim Bildsuchen gelesen, dass einige Leute 
die Signale wohl trotzdem auf 3.3V runterpegeln für diesen Reader, das 
schaue ich mir morgen mal noch genauer an.

Mit freundlichen Grüßen
Martin Schmidt

von martin s. (schmidtjr)


Lesenswert?

Hi

das mit dem runterpegeln "mal schnell anschauen" wird wohl länger 
dauern, die benötigte Hardware hab ich grad nicht griffbereit (z.b. 
CD4050).
Ich dächte aber, dass ich mit den vorgeschalteten Widerständen das 
nötigste getan habe, oder?
Beim Arduino Betrieb gehe ich ja auch nicht über die 3,3V Schiene, 
sondern ebenfalls über 5V.

Mit freundlichen Grüßen
Martin Schmidt

von Max H. (hartl192)


Lesenswert?

martin schmidt schrieb:
> - 10K von pin1 auf GND
Soweit ich weiß ist Reset beim ATmega low aktiv, der µC ist mit einem 
Pulldown also dauernd im Reset.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

martin schmidt schrieb:
> Ich dächte aber, dass ich mit den vorgeschalteten Widerständen das
> nötigste getan habe, oder?

 Wenn deine Widerstände 1/3 und 2/3 sind, ja.
 Auf der 5V Seite sollten 3,3V auf jeden Fall als High erkannt
 werden.

: Bearbeitet durch User
von martin s. (schmidtjr)


Angehängte Dateien:

Lesenswert?

Hi,

also im Dauerreset ist der Chip nicht, das angeschlossene LCD 
funktioniert ja Bestens. Aber... du hast mit deiner Aussage recht, ich 
habe mich oben verschrieben (siehe Breadboard Bild), die 10K gehen 
natürlich gegen +5V (ich zähle besser nicht mit wie oft ich mich an der 
Stelle schon vertan habe, aber diesmal stimmt es in der aufgebauten 
Schaltung :)).

Die Widerstandsbeschaltung (oben verilnkt) hier nochmal als Bild. So 
funktionert es wie gesagt per Arduino, nur per Standalone nicht.

Falls ich statt Spannungsregler-Schaltung per Widerstände auf eine 
Schaltung mit cd74hc4050e gehen würde... Wie kriege ich am effektivsten 
die benötigten 3.3V Input schaltung für den 4050? Auf dem Arduino ist 
ein lp2985-33dbvr verbaut, welchen ich nicht in "meinem" Standardraster 
finde, oder TO-220 Gehäuse oder so.

Mit freundlichen Grüßen
Martin Schmidt

: Bearbeitet durch User
von Max H. (hartl192)


Lesenswert?

martin schmidt schrieb:
> Wie kriege ich am effektivsten
> die benötigten 3.3V Input schaltung für den 4050?
3.3V Ausgang des SD-Karten Board?

von martin s. (schmidtjr)


Lesenswert?

hi

ja, das will ich prüfen sobald ich wieder in der nähe der hardware bin 
:). Die Aussagen die ich dazu gelesen habe waren widersprüchlich, sprich 
es war mir nicht klar ob der 3.3V Pin ein Ausgang ist.
Prüfe ich am Wochenende.

Viele Grüße
Martin Schmidt

von martin s. (schmidtjr)


Lesenswert?

Hallo zusammen,

ich konnts nicht lassen, es hat mich nicht locker gelassen das Problem. 
Also im Conrad nen paar cd4050 gekauft (der SD Card Reader stellt 3.3V 
zur Verfügung). Heim. Geht nicht!! an den Arduino--> geht...
erneut durchgemessen, alles OK... nach einer kurzen Pause die 
Erleuchtung. Statt die Messspitze in ein Loch des Breadboards zu 
stecken, nun mal direkt Chipbeinchen gegen Chipbeinchen gemessen. Siehe 
da, auf MISO kein Durchgang.

Im Bild schön zu erkennen, ich nutze 2 Breadboards. ein schönes und 
eines was so naja ist, war irgendwo dabei, alles lässt sich schwer 
stecken und wie ich nun feststellte fehl in F-11 (MISO Chip Beinchen) 
die Verbindung. Für das Verbindungskabel an sich hatte ich versch. Löche 
durchprobiert, natürlich nicht fürs Chipbeinchen, muss ja in die Mitte.
So kann einen so ein BilligBreadboard ganz schön aufhalten. Aua.

Also, wieder etwas gelernt: Man misst Kontakt-Kontakt und nicht 
Breaboard-Breadboard.

Ich Danke allen Lösungsvorschlägen und entschuldige mich zugleich für 
die Zeitverschwendung!

Vielen Dank
Mit freundlichen Grüßen
Martin Schmidt

P.S.: Eine Frage hätte ich nun doch noch. Es funktionieren ja nun sowohl 
die "Widerstand als Spannungsregler" Schaltung als auch die CD4050 
Schaltung. Welche ist die "bessere", welche sollte ich mir für die 
Zukunft einprägen. Ich denke mal die CD4050er, aber ist ja schließlich 
auch ein Baustein mehr...

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.