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?
>wie soll das gehen mit Stromsparen?
Na, abschalten wenn kein Lese- oder Schreibvorgang stattfindet.
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.)
@Power hast du dir mal den stromverbrauch einer SD-Karte angeschaut, wenn CS auf high liegt?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.