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!)
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...
Welchen Slot benutzt Du ? Bei mir funktioniert die Karte auch nicht
immer im Floppystecker bzw. Pinheader.
Schaltplan und Aufbau wären nicht schlecht ...
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
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.
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
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!
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.
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
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ß -
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.
>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?
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.)