Forum: Mikrocontroller und Digitale Elektronik Anschluß einer SD-Karte an ATMega128


von Bernd E. (edi)


Angehängte Dateien:

Lesenswert?

Hallo,
ich versuche jetzt schon seit einigen Tagen eine SD Karte an meinem 
ATMega128L (mit 3,3V Betriebsspannung) zum Laufen zu bringen, aber bis 
jetzt ohne Erfolg!

Ich habe die Karte wie in dem Bild im Anhang verschaltet, hab ich da 
schon einen Fehler gemacht?
Wollte die Karte dann testen, aber ich habe immer ein Problem bei der 
Initialisierung, ich sollte beim Reset(CMD0) eigentlich den Wert 1 
zurück bekommen, bei mir wechselt der Wert aber ständig zwischen 5 und 
191, auf 1 kommt er nie! Vermute also das die Karte vielleicht schon 
falsch beschalten ist.

von holger (Gast)


Lesenswert?

Wenn der ATMega mit 3,3V läuft musst du natürlich
die Spannungsteiler weglassen.

von Bernd E. (edi)


Lesenswert?

Hi,
soll ich am besten alle Widerstände rausnehmen, oder nur die 1k8, oder 
3k3?

von John (Gast)


Lesenswert?

alle, die braucht man nicht wenn der uC mit 3,3V betrieben wird

von Weisnix (Gast)


Lesenswert?

Aber Achtung, wenn du alle Widerstände weg läst, hast du keine 
Verbundung mehr vom µC zur SD-Karte.
Bevor du dich mit µC beschäftigst, solltest du dir erstmal die 
Grundlagen von Spannungsteilern aneignen.

von Simon K. (simon) Benutzerseite


Lesenswert?

Weisnix wrote:
> Aber Achtung, wenn du alle Widerstände weg läst, hast du keine
> Verbundung mehr vom µC zur SD-Karte.
> Bevor du dich mit µC beschäftigst, solltest du dir erstmal die
> Grundlagen von Spannungsteilern aneignen.

Tja, da weiß wohl jemand wirklich nix.

Die Widerstände kommen natürlich ALLE raus. Die 1k8 Ohm Widerstände 
werden mit Drahtbrücken überbrückt. Und so wars auch gemeint von den 
Vorrednern hier.

Ist schon klar, dass es sonst keine Verbindung mehr gibt.

Und außerdem braucht man für SD-Karten Programmierung nicht zwangsläufig 
Wissen über Spannungsteiler.

von Weisnix (Gast)


Lesenswert?

Doch braucht man
1. Immer wenn man mit elektronik bastelt.
2. Sieht man ja oben am Beispiel. Wenn man nicht weis was ein 
Spannungsteiler macht, funktioniert die ganze Sache eben nicht.

Und der Hinweis das dei Widerstände nicht einfach weggelassen werden 
können und durch Brücker ersetzt werden müssen scheint mir bei solchen 
Leuten auch für angebracht.

von Bernd E. (edi)


Lesenswert?

@ Weisnix:
Mir ist auf jeden Fall klar, was ein Spannungsteiler so macht, aber da 
ich die Schaltung wie oben beschrieben übernommen habe, dachte ich er 
wird in diesem Fall schon einen "höheren Sinn haben"! Also spar dir 
bitte deine komplett sinlosen Kommentare!

von Weisnix (Gast)


Lesenswert?

Dann verstehe ich deine 2. Antwort nicht, wenn dir schon der Tipp 
gegeben wird den Spannungsteiler raus zu lassen.

von Gast (Gast)


Lesenswert?

Ja Moment, die Frage ist ja wohl nicht ganz unbegründet. Schließlich 
könnte man die 3k3 Widerstände als Pull Downs ruhig drin lassen.

von Bernd E. (edi)


Lesenswert?

@Gast: ...das mein ich doch auch!

von holger (Gast)


Lesenswert?

Schwachsinn......

Lass die 3k3 Widerstände weg. Die belasten die Portpins nur
unnötig.  U / R = I. Das ohmsche Gesetz gilt auch für Anfänger.

von Bernd E. (edi)


Lesenswert?

Werd ich machen, danke.

von Weisnix (Gast)


Lesenswert?

Hallo ihr Spannungsteiler-Helden.

Pull-Downs haben da nichts zu suchen, wenn schon dann Pull-Ups und dann 
auch etwas größere Werte z.B. 100k oder so.

von holger (Gast)


Lesenswert?

Nochmal Schwachsinn........

Pullup mit 3k3 belastet genauso wie Pulldown. Nur bei
Low Pegel halt.

SPI braucht keine Pullup/down. Das ist kein I2C.

@Weisnix
100k Pullup bei z.B. 4MHz SPI Speed ?
Schönen dank. Was bringt der da ?
Sagen wir mal 10pF Leitungskapazität wegen
schlechtem Layout.

3dB Frequenz: 1/(2*PI*R*C) = 159kHz.
Bei 4MHz zuckt da die GND Linie ein wenig.
Hilft also gar nicht. Ein Teil zu viel in der
Schaltung ;)

von Ulrich P. (uprinz)


Lesenswert?

Wow, was für ein Murks als Antwort, bis auf wenige Ausnahmen.

Also
1. Mal als Tip: Es gibt einige fertige SD-Card Projekte hier, da kann 
man abpinnen, testen und verstehen.

2. Innerhalb dieser Projekte hat sich bereits herausgestellt, dass man 
bei den SD-Cards die nicht genutzten Pinne mit 10k nach Vcc resp. GND 
klemmen sollte, da sonst einige Karten nicht sauber initialisieren und 
nicht in den SPI-Mode kommen. Welcher Pin wohin, weiß ich nicht 
auswendig, findet man aber in den Threads zu den unter 1) zu suchenden 
Projekten.

3. Gerade, wenn der SPI noch an weitere Bausteine geht, dann sind die 
schlappen ca. 22k Pullups im ATmega nicht ausreichend um saubere steile 
Flanken auf dem Bus zu erzeugen. Merkt man schnell daran, dass enteder 
SD-Cards nur unzuverlässig gelesen werden oder z.B. der AVRISP nur dann 
funktioniert, wenn die SD-Card aus dem Slot gezogen wurde. Das ganze 
wird durch freie Verdrahtungen noch schlimmer.

Gruß, Ulrich


von holger (Gast)


Lesenswert?

>Wow, was für ein Murks als Antwort, bis auf wenige Ausnahmen.

>Also
>1. Mal als Tip: Es gibt einige fertige SD-Card Projekte hier, da kann
>man abpinnen, testen und verstehen.

Danke, brauch ich nicht. Ich habe meine SD/MMC Routinen dann doch lieber
selber geschrieben. Den ganzen Mist mit Spannungsteilern auf
MISO,MOSI,SCK,CS als 5V->3,3V Konverter habe ich konsequent mit
richtigen Pegelwandlern gemacht. Z.B. 74LVX08. Die Wandlung 3,3V->5V
macht bei mir ein 74HCT125. Dann muss man den 3,3V SPI Slave nicht mit
einem Pullup am Ausgang quälen weil er den 5V CMOS Pegel für den
Atmega sonst nicht schafft. Der sorgt auch noch für Sicherheit bei ISP 
;)

>3. Gerade, wenn der SPI noch an weitere Bausteine geht, dann sind die
>schlappen ca. 22k Pullups im ATmega nicht ausreichend um saubere steile
>Flanken auf dem Bus zu erzeugen. Merkt man schnell daran, dass enteder
>SD-Cards nur unzuverlässig gelesen werden oder z.B. der AVRISP nur dann
>funktioniert, wenn die SD-Card aus dem Slot gezogen wurde. Das ganze
>wird durch freie Verdrahtungen noch schlimmer.

Schliess einen Pullup an alle CS Eingänge deiner SPI Chips an.
Wenn der Atmega resettet hängen die nicht in der Luft und dein
ISP funktioniert auch. Bei mir machen das die 74HCT125 Multiplexer.
Sie trennen die Ausgänge der SPI Chips von MISO.

Mit den oben genannten Dingen kann ich mit einem ATMega bei 10MHz
SPI Speed ohne Probleme MMC/SD Karten lesen und beschreiben.
Ohne Pullups ! Wo bitte schön steht im Datenblatt der AVR das
SPI ein Open Collector Bus ist ? Nirgends.

Gelegentlich hab ich dann auch noch einen VS1001K oder einen
ENC28J60 am SPI Bus mit dran. Aber Pullups brauchte ich dafür
bisher noch nicht.



von Weisnix (Gast)


Lesenswert?

LOL Holger

>Schliess einen Pullup an alle CS Eingänge deiner SPI Chips an.
>Wenn der Atmega resettet hängen die nicht in der Luft und dein

Erst mein Komentar als Schwachsinn abstempeln und dann in deinem 
nächsten Komentar, meinem Schwachsinn rechtgeben.

von holger (Gast)


Lesenswert?

@Weisnix
Du hast nichts verstanden. Dein Name ist Programm.
Rede ich von Pullups an MOSI,MISO,SCK ?
Nein, lass sie dort weg. Es funktioniert
wenn man es RICHTIG macht.

von Weisnix (Gast)


Lesenswert?

Ausserdem währen des Resets sind keine 4MHz auf der CS Leitung. 
Schonwieder schwachsinn deine Rechnung.

Erstmal schreiben alles Schwachsinn ist und dann später die 
Einschränkungen machen. Aber du hast natürlich immer Recht.

von Weisnix (Gast)


Lesenswert?

@Holder
Und da du ja der SD-Karten Superheld bist, hast du bestimmt schon mal 
ins Datenblatt der SD-Karten geschaut.

von holger (Gast)


Lesenswert?

Schau mal aus dem Fenster, die Sonne scheint.
Geh spielen !

von Mike (Gast)


Lesenswert?

Ey Leute lasst es sein ...

fast wie im Kindergarten, nur die Erzieherin fehlt.

Hab mal überlegt :-) kann man einen Thread nicht immer wenn er richtig 
gelöst ist zusammenfassen, den Müll rausmachen und dann schreibgeschützt 
bereitstellen?
Es gibt doch so viele Themen die immer wieder angesprochen werden, z.B. 
wie schließe ich eine SD-Karte an den ATMega.

;-) Dann bräuchte man sich bei Standard-Themen nicht mehr durch so viel 
Müll lesen.

Also Quasi das Tutorial erweitern.

von Ulrich P. (uprinz)


Lesenswert?

Na, dieser Thread ist aber gründlich entgleist. Was solls, zurück zum 
Thema.

holger wrote:
> Schliess einen Pullup an alle CS Eingänge deiner SPI Chips an.
> Wenn der Atmega resettet hängen die nicht in der Luft und dein
> ISP funktioniert auch. Bei mir machen das die 74HCT125 Multiplexer.
> Sie trennen die Ausgänge der SPI Chips von MISO.

Da ich von dem Multiplexer nix wusste, konnte ich das nicht einplanen. 
Ich habe auf einen solchen verezichtet, da die komplette Schaltung 
einschließlich ATmega32 mit 3.3V läuft. Da mein Player in einer 
Industrieanwendung steckt und diese ihn über einen Highspeed-Parallel 
Bus steuert, sitz dort dann ein XilinX CPLD mit 5V Core und 3.3V 
tolerant I/O dazwischen.
>
> Mit den oben genannten Dingen kann ich mit einem ATMega bei 10MHz
> SPI Speed ohne Probleme MMC/SD Karten lesen und beschreiben.
> Ohne Pullups ! Wo bitte schön steht im Datenblatt der AVR das
> SPI ein Open Collector Bus ist ? Nirgends.
>
Steht aber im Datenblatt, dass der ATmega FET-Driven weak pullups mit 
ca. 22kR an den Ports besitzt. Einer von uns beiden hat jetzt etwas 
übersehen, was aber nicht schlimm ist, wir schauen einfach noch mal 
beide im Datenblatt nach, die Lösung wird darin zu finden sein, sonst 
hilft ein Anruf bei Atmel.

Es ging mir aber bei den PullUps nicht nur um die MOSI/MISO/SCK, sondern 
vor allem um die im SPI-Mode nicht genutzten Pinne der SD-Card. Es gibt 
Hinweise aus anderen Threads hier, die sich damit befasst haben, dass es 
einzelne SD-Cards gibt, die nicht sauber in den SPI Mode starten, wenn 
die nicht genutzten Pinne in der Luft hängen. Ich habe diese Threads 
nicht mehr parat, da mein Projekt abgeschlossen ist und funktioniert. 
Dieses Forum hier war dafür ein ausgezeichnete Hilfe, ohne dass ich eine 
einzige Frage stellen musste. Ich habe den Hinweis gelesen, die 
Widerstände im Layout vorgesehen und nie wieder einen Gedanken daran 
vereschwendet.

> Gelegentlich hab ich dann auch noch einen VS1001K oder einen
> ENC28J60 am SPI Bus mit dran. Aber Pullups brauchte ich dafür
> bisher noch nicht.

Ich habe den VS1011 gewählt, weil dessen New-mode einfacher zu steuern 
ist und weniger Pinne benötigt. Da ich den Player mit den internen 8MHz 
des ATmega32 laufen lasse, spare ich einige Taktzyklen, weil ich BSYNC 
nicht nachführen muss.
Das Modul spielt MP3 bis 192kb Bitrate, höhere Bitraten kann ich mal 
testen, aber damit war die Anforderung an den Player ohnehin um Faktor 2 
übertroffen. Er muss nur Geräusche simulieren.

So, ich denke das war jetzt einfach und sachlich. Du magst meinen Rat 
annehmen oder nicht. Du kannst aus den Erfahrungen anderer lernen oder 
hälst es, wie mit Deiner Software und machst alle Erfahrungen neu.

Gruß, Ulrich

von gast (Gast)


Lesenswert?

Die Programierpins (ISP) für den Mega128 liegen nicht auf MISO und MOSI! 
(-->PDI und PDO)

von Dirk (Gast)


Lesenswert?

wäre jetz noch jemand bereit den Schaltplan so zu konfigurieren das es 
auch ein neuling sieht? Ich will es nicht bauen, versteh aber nur die 
hälfte von allem was ihr hier so schreibt! Mit Bild wäre es einfacher

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.