Forum: Mikrocontroller und Digitale Elektronik AVR + SD Karte


von keksladen (Gast)


Lesenswert?

Hallo Community!

Ich kann mir denken, dass diese Geschichte schon jedem aus den Ohren 
hängt und er solche Threads (µC + SD Karten bezogen) liebend gerne 
verbieten möchte...
Ich komme aber im Moment wirklich nicht weiter.

Ich benutze einen ATMega8 und versuche eine SD-Karte im Software-SPI zu 
betreiben. Aufgebaut habe ich das ganze durch Spannungsteiler wie sie 
bei Ulrich Radig, dem Mr Midi Projekt, etc.. zu finden sind. ATMega8 
läuft mit 5V und SD-Karte mit 3V.
Ich habe nun das folgende Problem: Ich kann die Karte nicht 
initialisieren... Jedoch liegt das wohl kaum an der Karte oder eventl 
Software. Erlich gesagt habe ich keine Ahnung wo das Problem liegt. Vllt 
ist mein µC kaputt, mein Aufbau ist miserabel oder ich hab wirklich 
Fehler gemacht in der Software.

Ich nutze den PORTC (auch als Analogconverter benutzbar) und habe 
ChipSelect, DataInput (von der Karte) und CLOCK durch die 
Spannungsteiler auf 3V gebracht. DataOutput (von der Karte.. Also 
Karte->µC) ist ohne diesen angeschlossen. Die 3 Beine wurden als Ausgang 
deklariert (DDR = 1), wobei DataOutput Eingang (DDR = 0) mit 
ausgeschaltetem PullUp ist (PORT = 0)...

Problem ist: Sobald ich nur mit den Finger auf eben diesen Port 
(DataOutput) fasse wird er auf etwa 1,6V - 1,7V gezogen. Gleiches 
passiert selbstverständlich, wenn ich bei bereits eingeschalteten µC die 
Karte anschließe...

Ist das normal ?

(Schonmal im vorraus: Vielen Dank für die Hilfe!)

von Guest (Gast)


Lesenswert?

Ich hab schon die Erfahrung gemacht, dass dieser besagte Spannungsteiler 
für 3V an der SD-Karte einfach nicht okay ist, sondern miserabelst. Habe 
diesen dann durch einen Regler ersetzt der mit die Spannung (3,3V) für 
die SD-Karte sauber erzeugt.
Damit initalisiert er bei mir die meisten SD-Karten, aber trotzdem nicht 
jede. Kann weiter aber auch ein Software-Problem sein...

von TurboCity (Gast)


Lesenswert?

Welchen Slot benutzt Du ? Bei mir funktioniert die Karte auch nicht 
immer im Floppystecker bzw. Pinheader.

Schaltplan und Aufbau wären nicht schlecht ...

von Michael U. (Gast)


Lesenswert?

Hallo,

ich habe mal ein Projekt mit SD-Karte gebaut, von dem es ca. 10 
Exemplare gibt. Spannung war problematisch, ist dann ein 3,3V 
Festspannungsregler geworden. Pegelanpassung ist mit Widerstandteilern 
ohne Probleme gelaufen, allerdings habe ich nur 3 verschiedene Karten 
getestet, die benutzen sind fest in den Geräten geblieben und 
Geschwindigkeit war kein Kriterium.

Die Karten sind 128MB-Karten, hängen am SPI eines Mega8515 und werden 
eigentlich nur gelesen.

Beim Versuch hing Cardslot mit direkt angelöteten Spannungsteilern an 
ca. 15cm Leitungen zu einem STK200, lief auch da stabil.
Abblock-C am Cardslot nicht vergessen, Kontaktprobleme hatte ich beim 
fliegenden Aufbau allerdings auch öfter, die Cardslots waren freitragend 
nicht so sonderlich stabil. ;)

Gruß aus Berlin
Michael


von Obelix (Gast)


Lesenswert?

Bei mir funktionierten bis jetzt alle SD und MMC Karten von 16MB bis 
2GB, eine 4GB Karte werde ich demnächst testen.
Dazu ist natürlich ein vernümptiger Aufbau nötig, ich stehe nicht auf 
die Widerstandsgeschichte. Ich möchte hier jetzt aber keine Diskusion 
anfangen über pro und contra der Spannungsteiler, das wurde schon 
genügend durchgekaut.

Warum fangen alle Leute erstmal an zu jammern ... meine Schaltung oder 
Software funktioniert nicht.
Was sagt der Debugger, Oszi, Datenblatter und Tutorials? Damit sollte 
jeder zu einem funktionierenden Projekt kommen.


>Sobald ich nur mit den Finger auf eben diesen Port

Pullups! Oder nicht mit den Spannungsteilern arbeiten.

von Boxi B. (boxi)


Lesenswert?

Hallo,
ich habe mir auch gerade eine bzw. verschiedene SD-Karten an den 
ATmega32 gehängt. Die Spannungsteilersache hab ich garnicht erst 
probiert.
Ich verwende ganz einfach einen LM3940 3,3V als Spannungsregler für die 
Versorgung der Karte. Als Bustreiber habe ich einen 74LV245 vorgesehen. 
Da der aber relativ schwierig zu bekommen (5€ bei RS..., weiß jemand ne 
bessere Quelle?) ist, vor allem als DIL, habe ich mir aus den guten 
alten CMOS-Puffern HEF4049 einen 74245 nachgebaut. Die funktionieren 
nämlich auch noch bei 3V und sind dabei tollerant gegen 5V an den 
Eingängen. Besser wäre natürlich ein HEF4050 gewesen, hatte ich aber 
gerade nicht rumliegen. Taktmäßig sind die CMOS-Bausteine auch schnell 
genug, um mit dem SPI des ATmega mitzukommen.

@keksladen: ich würde dir vorschlagen, bau dir eine "vernünftige" 
Busumsetzung vom ATmega zur Karte. Teste die durch und du kannst die 
Ecke schonmal aus den vielen Fehlern, die man machen kann ausschließen.

Gruß
Boxi

von keksladen (Gast)


Lesenswert?

Hallo!
Danke erstmal für die Antworten!

Als Schaltung möchte ich die Minimalbeschaltung von Ulrich Radig 
anführen ( 
http://www.ulrichradig.de/site/atmel/avr_mmcsd/gfx/MMCSDSCH.JPG ), 
jedoch mit dem Unterschied, dass ich keine Dioden benutze für die 3V 
Vcc, sondern ebenfalls einen Spannungsteiler. Widerstände sind bei mir 
4,7k und 2,2k bei U=4,6V.
Die SD-Karte an sich ist in einem für sie vorgesehenen Slot, welcher von 
mir aus anderer Hardware ausgebaut wurde.

>Pullups! Oder nicht mit den Spannungsteilern arbeiten.
Pullups kann ich nicht einschalten, da die Leitung auf Masse hängen 
muss. Oder irre ich mich da? (DataOutput Leitung der SD-Karte)

Bezüglich Debugger oder Oszi kann ich auch nichts sagen, da ich weder 
mit JTAG arbeite noch einen Oszi besitze.

Notwendige CMOS-Bausteine um das ganze um zu bauen habe ich auch nicht.
Im Grunde wollte ich das ganze auch nur antesten und schauen, ob es mit 
dem Software SPI läuft und dann später unter Verwendung eines kompletten 
3V Systems auf SMD Basis nachbauen...

An die, bei denen die Arbeit mit der SD-Karte erfolgreich war:
Auf welchen Code basiert das ganze? Hat jemand den von Ulrich Radig 
erwendet?
Software oder Hardware SPI? (Ich nutze das Software SPI)

Danke!

von Obelix (Gast)


Lesenswert?

Man sollte beachten, dass MMC- und SD-Karten etwas anders initialisiert 
werden. Es mag zwar mit einigen Karten auf jeden Fall gehen, aber eben 
nicht unbedingt.

> jedoch mit dem Unterschied, dass ich keine Dioden benutze für die 3V
> Vcc, sondern ebenfalls einen Spannungsteiler.

Ist dir klar was du da machst? Die SD-Karte zieht in ihren verschiedenen 
Betriebsmodi unterschiedlich viel Strom.

> Bezüglich Debugger oder Oszi kann ich auch nichts sagen ...

Dann soltest du dich für einen anderen µC-Typ entscheiden, z.B. für 
einen der das debuggen auch per RS232 kann.

> Auf welchen Code basiert das ganze?

Auf eigenem mit Hardware SPI auf M16C.


@Boxi
74LVXirgendwas oder da gibts noch eine andere Serie ich glaube von TI.

von Michael U. (Gast)


Lesenswert?

Hallo,

"jedoch mit dem Unterschied, dass ich keine Dioden benutze für die 3V
Vcc, sondern ebenfalls einen Spannungsteiler. Widerstände sind bei mir
4,7k und 2,2k bei U=4,6V."

Man kann keine aktiven Bauteile über einen Spannungsteiler versorgen, 
weil deren Stromaufnahme nicht konstant ist!

Mit den Dioden geht das durchaus, weil die Flußspannung der Dioden 
relativ unabhängig vom durchfließenden Strom ist. Ist aber stark 
abhängig von den cerwendeten Dioden, der Änderung der Stromaufnahme der 
Karte und der Empfindlichkeit der Karte gegenüber Spannungsänderungen.

Kann gehen, muß aber nicht, lief bei mir etwas zu instabil.

Mit den Spannungsteilern habe ich da weniger Probleme, die 
Eingangsströme der Karte sind klein genug, der AVR treibt niederohmig 
genug, die Karten sind für Alltagsgebrauch entwickelt und stecken auch 
etwas unsaubere Flanken noch weg. Wenn man natürlich auf maximale 
Geschwindigkeit will (8MHz SPI), sind Pegelwandler sicher die bessere 
Lösung.

Software bei mir war eine eigene ASM-Lösung, es werden nur RAW-Daten 
gelesen und geschrieben.

War eine Parallelport-Druckertest-Sache, mehrere Testseiten von PC mit 
Copy to PAR: auf die Karte und dann das Ding an die Drucker gesteckt, 
eine der Testseiten gewählt und ausgedruckt.

Gruß aus Berlin
Michael

von Power (Gast)


Lesenswert?

Das mit den Dioden könnte man doch auch so machen (falls ich das oben 
nicht überlesen habe):
Vcc (also +5V) als Bezugspotential, die Masse der SD-Karte mit vier 
1N4148 in Reihe (Kathode gegen GND) um ca. 2V hochsetzen. Dann noch 
einen 3k9 Widerstand vom SD-GND gegen +5V.
Somit kann die SD-Karte an allen Ports ohne Spannungsteiler o.Ä. 
angesprochen werden, da die Spannungsdifferenz zwischen IO-Pin und 
SD-GND immer nur 3V beträgt. Durch den 3k9-Widerstand bleiben die 3V 
auch recht stabil. Die Spannungsversorgung der SD-Karte (Vcc) kann aus 
Stromspargründen auch mittels AVR-Ausgangspin versorgt werden 
(abschaltbar).

Ich habe das noch nicht getestet, - nur so als Denkanstoß -

von holger (Gast)


Lesenswert?

Du kannst eine SD Karte nicht aus einem Ausgangspin
versorgen. Der liefert zu wenig Strom. Die Dioden
auf der GND Seite sorgen dafür das der AVR von der
Karte (SO) dann immer mindestens 2V bekommt. Damit ist
kein Lowpegel mehr möglich. Und wenn z.B. SCK
auf Low geht hast du an der Karte -2V liegen.
Da brauchst du auf jeden Fall schon mal wieder
einen Widerstand zum begrenzen und am besten noch
eine Diode, die die -2V auf -0,7V klemmt.

von Power (Gast)


Lesenswert?

Stimmt geht wohl nicht!

von Obelix (Gast)


Lesenswert?

>Die Spannungsversorgung der SD-Karte (Vcc) kann aus
>Stromspargründen auch mittels AVR-Ausgangspin versorgt werden

Wie Holger schon schrieb liefert der Ausgangspin zu wenig Strom. Aber 
selbst wenn der genur Strom liefern könnte, wie soll das gehen mit 
Stromsparen?

von Power (Gast)


Lesenswert?

>wie soll das gehen mit Stromsparen?
Na, abschalten wenn kein Lese- oder Schreibvorgang stattfindet.

von keksladen (Gast)


Lesenswert?

Danke für die Erklärung Michael!
Es würde aber gehen, wenn noch ein Transistor hinter dem Ausgangsport 
hängt, oder? Dann könnte die Karte so abgeschaltet werden zum 
Stromsparen (Ohne sie jetzt in den Standby Modus fahren zu müssen. Muss 
sie lediglich beim wieder verwenden neu initialisiert werden.)

von Obelix (Gast)


Lesenswert?

@Power hast du dir mal den stromverbrauch einer SD-Karte angeschaut, 
wenn CS auf high liegt?

von Power (Gast)


Lesenswert?

Neien, habe ich nicht. Bin grade an zwei anderen Projekten (ohne 
SD-Karte), Messaufbau kommt später. ;-)

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.