Forum: Mikrocontroller und Digitale Elektronik SD-Card Anbindung über SPI; Frage zu Serienwiderständen


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Hanns-Jürgen M. (yogy)


Bewertung
0 lesenswert
nicht lesenswert
Hallo Zusammen,

ich habe ein wenig Zeit und möchte die nutzen, um eine SD-Karte mit 
einem AVR auszulesen. Dazu gibt es ja genügend Hinweise und Libraries.

Ich habe es auch einigermaßen zum Laufen gebracht, die Signale sehen 
"eigentlich" gut aus. (125 kHz SPI-Clock) Da aber auch Fehler auftreten, 
Folgendes:

Ich benutze die Library und die Verschaltung gemäß:

http://www.dharmanitech.com/2009/01/sd-card-interfacing-with-atmega8-fat32.html

Dort sind bewußt die 1k Serienwidrtände weggelassen, die auf den 
üblichen "Arduino" Display in den MOSI/CS/CLK vorhanden sind. Ich habe 
diese entsprechend bei mir gebrückt.

Sind diese Widerstände zu irgendetwas nutze, soll ich sie also wiedr 
einlöten?

Danke und mfg

Yogy

von Marco G. (grmg2010)


Bewertung
0 lesenswert
nicht lesenswert
Unter anderem sind diese dafür da, dass andere SPI-Devices nicht 
dazwischen reden, wenn der uC über ISP programmiert wird. In diesem Fall 
kann die Programmierung oder der verify scheitern

von Falk B. (falk)


Bewertung
0 lesenswert
nicht lesenswert
@Hanns-Jürgen M. (yogy)

>Ich habe es auch einigermaßen zum Laufen gebracht, die Signale sehen
>"eigentlich" gut aus. (125 kHz SPI-Clock)

Klingt nicht so vertrauenserweckend.

> Da aber auch Fehler auftreten,

Wie sieht dein REALER Aufbau aus? Ein Bild sagt mehr als 1000 Worte.

>http://www.dharmanitech.com/2009/01/sd-card-interf...

>Dort sind bewußt die 1k Serienwidrtände weggelassen, die auf den
>üblichen "Arduino" Display in den MOSI/CS/CLK vorhanden sind. Ich habe
>diese entsprechend bei mir gebrückt.

Gut.

>Sind diese Widerstände zu irgendetwas nutze, soll ich sie also wiedr
>einlöten?

NEIN! Sie sind kontraproduktiv und man braucht sie nicht. Wenn der AVR 
per ISP programmiert wird ist die SD-Karte ruhig, denn das Chip Select 
wird dann per Pull-Up auf HIGH gezogen.

von Falk B. (falk)


Bewertung
0 lesenswert
nicht lesenswert
@ Marco G. (grmg2010)

>Unter anderem sind diese dafür da, dass andere SPI-Devices nicht
>dazwischen reden, wenn der uC über ISP programmiert wird. In diesem Fall
>kann die Programmierung oder der verify scheitern

Nur dann, wenn man es vermurkst!

https://www.mikrocontroller.net/articles/AVR_In_System_Programmer#ISP-Pins_am_AVR_auch_f.C3.BCr_andere_Zwecke_nutzen

von kyrk.5 (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hast du am SPI-bus etwas anderes als den SD-Karte auch noch?

Man muss ja beachten dass die SD-Karten mal so mal so implementiert 
sind. Zur Inizializiren starten die ja im SD-IO modus auf. Um 
umzuschalten muss man glaube ich den CS High halten und Clock geben und 
noch glaube ich den MOSI auch high (oder low). Wenn man hier gründlicher 
guckt ist dass doch fast der gleiche Use-Case wenn man mit einer SPI 
slave kommuniziert (wie zum Beispiel LCD). Daher am besten: SD-Karte 
sollte den SPI allein haben. Oder erst SD-Karte initializieren und dann 
alle weitere SPI slaves. Ich würde eher vorsichtig sein, wer weiss wie 
die SD Karte entwickelt wurde. Kleine Unterschiede können hier immer 
sein, die dann zu sehr sehr komische Fehler führen.

von Noch einer (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Benutzt du ein Steckbrett wie auf dem Foto?

Das gibt immer Störungen. Die Kabel dürfen nur wenige cm lang sein. Und 
der kleinste Wackelkontakt bringt alles komplett durcheinander.

von Hanns-Jürgen M. (yogy)


Bewertung
0 lesenswert
nicht lesenswert
Okay, verstehe ich, ich habe aber keinen Probs bislang (Diamex 
Programmer)

von Hanns-Jürgen M. (yogy)


Bewertung
0 lesenswert
nicht lesenswert
kyrk.5 schrieb:
> Hast du am SPI-bus etwas anderes als den SD-Karte auch noch?
>
> Man muss ja beachten dass die SD-Karten mal so mal so implementiert
> sind. Zur Inizializiren starten die ja im SD-IO modus auf. Um
> umzuschalten muss man glaube ich den CS High halten und Clock geben und
> noch glaube ich den MOSI auch high (oder low). Wenn man hier gründlicher
> guckt ist dass doch fast der gleiche Use-Case wenn man mit einer SPI
> slave kommuniziert (wie zum Beispiel LCD). Daher am besten: SD-Karte
> sollte den SPI allein haben. Oder erst SD-Karte initializieren und dann
> alle weitere SPI slaves. Ich würde eher vorsichtig sein, wer weiss wie
> die SD Karte entwickelt wurde. Kleine Unterschiede können hier immer
> sein, die dann zu sehr sehr komische Fehler führen.

Ja, der SPI-Bus dient bei mir auch zur Ansteuerung des TFT-Displays und 
der Touch-Funkzion. Alles ist zusammenmit dem Kartenadapter auf einer 
Platine (China). Funktional schalte ich jegliche Ansteuereung des 
Displays und des Touchcontrollers während des SD-Kartenzugriffs ab. Das 
funzt auch (kontrolliert mit Oszi).

Ja, zur Initialisierung einer "frischen" Karte muß mit CS-High eine 
Anzahl von Clocks gegeben werden. Dies ist der Fall.

Zudem schalte ich die SPI-Taktrate nach der Initialisierung (noch) nicht 
hoch, und 125 KHz sind eigentlich Peantus. Ich werre aber gleich einen 
zusätzlichen Block-Kondensator spendiren...

Leider habe ich nur eine einzige SD-Karte (4 GB), so daß ich keine 
andere testen kann.

von Hanns-Jürgen M. (yogy)


Bewertung
0 lesenswert
nicht lesenswert
Noch einer schrieb:
> Benutzt du ein Steckbrett wie auf dem Foto?
>
> Das gibt immer Störungen. Die Kabel dürfen nur wenige cm lang sein. Und
> der kleinste Wackelkontakt bringt alles komplett durcheinander.

Nein, kein Steckbrett, alles ist verlötet. Die Verbindung zwischen dem 
Display/Touch/SD-Modul zur Arduino HZ ist allerdings gesteckt. Aber das 
ist mit zieml. Sicherheit nicht das Problem.

Ich weiß auch nicht, ob ein HW-Problem vorliegt, ich werde später mal 
die Routinen von Roland R. anpassen und testen.

von Mitlesa (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hanns-Jürgen M. schrieb:
> Ich benutze die Library und die Verschaltung gemäß:
>
> http://www.dharmanitech.com/2009/01/sd-card-interfacing-with-atmega8-fat32.html

Der gute Autor verwendet in seinem Schaltplan (in der 5V Version)
Zenerdioden 3.6V an den SPI-Leitungen um die Spannung an der
SD-Karte zu begrenzen.

Wenn es da keine Serienwiderstände gibt dann darf der Controller
mächtig Stom liefern. Das ist eine äusserst unsaubere Methode
die sogar zu Betriebsunsicherheit führen mag.

Ich würde auf jeden Fall Serienwiderstände vorsehen.

von Hanns-Jürgen M. (yogy)


Bewertung
0 lesenswert
nicht lesenswert
Hmmm, ich sehe in der Schaltung keine Zenerdioden.

Mein AVR läuft zwar auch mit 5 V, die Pegelanpassung mache ich mit 
niederohmigen Widerständen.(390/560 Ohm, zusätzlich auf der 3,3 V Seite 
wie im Beispiel 47 k nach plus 3,3 V. Die Flanken sind okay.

Ich löte jetzt gleich den Blockkondensator an.

Ach ja, Denkbar wäre auch ein Kontaktproblem im Sockel???

von Mitlesa (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hanns-Jürgen M. schrieb:
> Hmmm, ich sehe in der Schaltung keine Zenerdioden.

Mitlesa schrieb:
> Der gute Autor verwendet in seinem Schaltplan (in der 5V Version)
-------------------------------------------------^^^^^^^^^^^^^^^^

Hanns-Jürgen M. schrieb:
> http://www.dharmanitech.com/2009/01/sd-card-interfacing-with-atmega8-fat32.html

von c-hater (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Falk B. schrieb:

> NEIN! Sie sind kontraproduktiv und man braucht sie nicht. Wenn der AVR
> per ISP programmiert wird ist die SD-Karte ruhig, denn das Chip Select
> wird dann per Pull-Up auf HIGH gezogen.

Vorsicht!

Das hängt vom Design des Interface ab. Insbesondere bei laienhaft 
designten Anbindungen an einen 5V-SPI-Bus neigt das CS-Interface zur 
SD-Karte dazu, im Falle der Nutzung im Rahmen von ISP zum reinen 
Pulldown zu mutieren...

Das passiert insbesondere dann, wenn man idiotischerweise ausgerechnet 
den \SS-Pin der Hardware-SPI als CS für die SD-Card benutzt. Ja, ich 
gebe zu, für den Laien ist das vermutlich naheliegend, insbesondere, 
wenn er keine weiteren SPI-Devices am Bus hat. Nichtsdestotrotz führt 
das dann zielsicher genau zu dem bewußten Problem...

Aber klar: der Angstwiderstand ist natürlich die denkbar schlechteste 
Lösung des Problems...

von Hanns-Jürgen M. (yogy)


Bewertung
0 lesenswert
nicht lesenswert
Mitlesa schrieb:
> Hanns-Jürgen M. schrieb:
>> Hmmm, ich sehe in der Schaltung keine Zenerdioden.
>
> Mitlesa schrieb:
>> Der gute Autor verwendet in seinem Schaltplan (in der 5V Version)
> -------------------------------------------------^^^^^^^^^^^^^^^^
>
> Hanns-Jürgen M. schrieb:
>> http://www.dharmanitech.com/2009/01/sd-card-interfacing-with-atmega8-fat32.html

Sry, ich hatt die als "normale" Dioden gesehen.   Brauche wohl ne 
Brille.. :-)

von Hanns-Jürgen M. (yogy)


Bewertung
0 lesenswert
nicht lesenswert
c-hater schrieb:
> Falk B. schrieb:
>

> Das passiert insbesondere dann, wenn man idiotischerweise ausgerechnet
> den \SS-Pin der Hardware-SPI als CS für die SD-Card benutzt. Ja, ich


Bei mir nutz die SD-Karte als /CS Signal nicht den Standard /SS Pin.

von Hanns-Jürgen M. (yogy)


Bewertung
0 lesenswert
nicht lesenswert
So, Der Blockondensator hat nichts gebracht. Ich vermute mittlerweie, da 
liegt ein Kontaktier-Problem der Kartenaufnahme vor. Ich werde mal 
umbauen und auch die SPI-Signaladaptierung neu und sauberer aufbauen..

Ob das heute noch etwas wird, glaube ich nicht...

Einstweilen vielen Dank.

von c-hater (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hanns-Jürgen M. schrieb:

> Bei mir nutz die SD-Karte als /CS Signal nicht den Standard /SS Pin.

Das ist schonmal gut, genügt aber nicht!

Das macht nur die korrekte Lösung zur Anbindung einer SD-Karte an einen 
mit 5V betriebenen HW-SPI-Bus, der auch für 5V-ISP genutzt werden soll, 
überhaupt erst möglich, ist also notwendige Voraussetzung für eine 
Lösung. Es ist aber noch längst nicht die Lösung...

von Chris F. (chfreund) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Falk B. schrieb:
> ie sieht dein REALER Aufbau aus? Ein Bild sagt mehr als 1000 Worte.
>
>>http://www.dharmanitech.com/2009/01/sd-card-interf...

Page you are looking for is either removed or temporarily down

von Mitlesa (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Chris F. schrieb:
> Page you are looking for is either removed or temporarily down

Verwende den Link des TO und du wirst gücklich.

von Hanns-Jürgen M. (yogy)


Bewertung
0 lesenswert
nicht lesenswert
c-hater schrieb:
> Hanns-Jürgen M. schrieb:
>
>> Bei mir nutz die SD-Karte als /CS Signal nicht den Standard /SS Pin.
>
> Das ist schonmal gut, genügt aber nicht!
>
> Das macht nur die korrekte Lösung zur Anbindung einer SD-Karte an einen
> mit 5V betriebenen HW-SPI-Bus, der auch für 5V-ISP genutzt werden soll,
> überhaupt erst möglich, ist also notwendige Voraussetzung für eine
> Lösung. Es ist aber noch längst nicht die Lösung...

Wie sieht Dein Deiner Meinung nach die "ideale" Lösung aus?

BTW: Auch wenn ich den ISP-Adapter abziehe ändert das nichts an der 
Teilfunktionalität.

von c-hater (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hanns-Jürgen M. schrieb:

> BTW: Auch wenn ich den ISP-Adapter abziehe ändert das nichts an der
> Teilfunktionalität.

Doch, natürlich: Dann ist nix mehr da, was den AVR in den Reset bringt 
und damit seine sämtlichen Pins hochohmig macht. Was an sich nicht 
schlimm ist, aber einen Spannungsteiler zur Anpassung an einen 
3.3V-SPI-Busteilnehmer eben zu einem Pulldown macht, weil es dann keine 
Spannung mehr zu teilen gibt, was den Busteilnehmer wiederum glauben 
läßt, es wäre irgendwas zu tun und er müßte sein SPI-Interface auf den 
Bus aufschalten. Womit dann wiederum MISO des 3.3V-Busteilnehmers gegen 
MISO des AVR arbeitet...

> Wie sieht Dein Deiner Meinung nach die "ideale" Lösung aus?

Das liegt doch klar auf der Hand: für \CS eines 3.3V-Busteilnehmers darf 
man eben keinen Spannungsteiler verwenden, sondern muß einen 
"active-low" Ausgang (high ist für diesen Ausgang nicht erlaubt!) mit 
einem Pullup hin zur 3.3V-Versorgung kombinieren.

Damit erklärt sich auch, warum der SS-Ausgang des Hardware-ISP nicht als 
CS-Ausgang für einen 3.3V-Teilnehmer geeignet ist. Man kann den nämlich 
nicht zwischen active-low und hochohmig toggeln lassen, ohne die 
SPI-Hardware aus der Rolle des SPI-Masters zu schmeissen. Diese 
Design-Entscheidung von Atmel ist sicher hochgradig fragwürdig, aber die 
Hardware ist nunmal so, wie sie ist...

Praktischerweise haben SD-Karten übrigens für ihren CS-Eingang bereits 
den nötigen Pullup eingebaut. Man muss also AVR-seitig bloß noch einen 
Ausgang zwischen den Zuständen "active-low" (SD-Karte selektiert) und 
hochohmig (SD-Karte nicht selektiert) umsteuern. Im Falle der 
ISP-Programmierung ist damit quasi nebenbei sichergestellt, dass die 
SD-Karte dann die Schnauze hält, denn der AVR-Ausgang wird ja in diesem 
Falle ebenfalls hochohmig, also: SD-Karte nicht selektiert.

Und das Sahnehäubchen für die ideale Ansteuerung ist dann lustigerweise 
ein zusätzlicher (ziemlich hochohmiger) Pull down. Baut man den auch 
noch ein, kann man nämlich den in die SD-Karte eingebauten Pullup zu dem 
Zweck nutzen, für den er eigentlich gedacht war: für einen 
card-detect-Mechanismus. Sprich: der CS-Ausgang des AVR ist ohne Karte 
hochohmig (also als Eingang konfiguriert). Ohne eingesteckte Karte zieht 
der hostseitige Pulldown diesen Eingang auf Low. Steckt man eine Karte 
ein, zieht der Pullup der Karte ihn hingegen auf High. Diese Flanke (in 
der Realität ist es natürlich zuerst mal ein Gewitter von Flanken) kann 
man detektieren und als Hinweis nehmen, dass jetzt eine Karte steckt und 
es vielleicht sinnvoll wäre, sich das Teil mal näher anzuschauen...

Und als letzte Anmerkung: steckt die Karte erstmal und ist sie 
initialisiert, kann man ihren internen Pullup per Kommando abschalten. 
Das sollte man aber natürlich keinesfalls tun, wenn man das Interface 
wie oben dargestellt umgesetzt hat...

von eProfi (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Den 5 / 3V3-Spannungsteiler kann man auch nur als Serienwiderstand 
realisieren, also ohne PullDown. Oder noch besser mit hochohmigen PullUp 
nach 3V3 oder auch 5V. Die "überschüssige Spannung" fließt über die 
Schutzdioden ab.

Außerdem haben Serienwiderstände dämpfende Wirkung gegen Ringing.
Das Ringing ist unabhängig von der SPI-Frequenz!
Das sieht man nur mit einem guten Oszi und kurzen Gnd-Clips.

von c-hater (Gast)


Bewertung
0 lesenswert
nicht lesenswert
eProfi schrieb:

> Den 5 / 3V3-Spannungsteiler kann man auch nur als Serienwiderstand
> realisieren, also ohne PullDown.

Das ist ziemlich gewagt. Klar, bei genauer Betrachtung ist auch das 
irgendwie ein Spannungsteiler, aber schön ist das Konstrukt nicht 
gerade...

> Oder noch besser mit hochohmigen PullUp
> nach 3V3 oder auch 5V. Die "überschüssige Spannung" fließt über die
> Schutzdioden ab.

Eben deshalb. Im SD-Standard wirst du keine Stelle finden, die 
dokumentiert, welchen Strom die Schutzdioden dauerhaft aufnehmen können. 
Das liegt einfach daran, dass sie halt Schutzdioden sind, deren Aufgabe 
ist eigentlich nur,  kurzzeitige ESD-Pulse von den Eingängen 
fernzuhalten.

Ein Design, was funktional die Existenz von Schutzdioden voraussetzt, 
ist also einfach nur eins: Bastlerscheisse. Kann durchaus funktionieren, 
aber niemand kann eine dauerhafte Funktion garantieren.

von Hanns-Jürgen M. (yogy)


Bewertung
0 lesenswert
nicht lesenswert
@c-hater (Gast)

Danke für die ausführliche Beschreibung, insbesondere die Möglichkeit, 
über das CS-Signal ein Card-Detect zu implementieren.

Zum Thema 3,3/5 Volt: Bislang hatte ich keine Probkemne mit dem 5V ISP, 
dem 5V AVR und den über Sapnnungsteulker angeschlossenen 3,3 V TFT und 
Touchcontroller.

Auch sehe ich kein Proebleme bezüglich des AVR-Resets OHNE ISP. Dafür 
gibt es  nicht nur den Power-Up Reset somdern auch eine RESET Taste. 
Außerdem kann ich per SW-Befehl einen Watchdog-Reset erzwingen.

(Der gestrige Versuch mit einer anderen Kontaktiereinheit für die 
SD-KArte hat ürbigens nichts gebracht.)

Nochmal zum Verstöndnis meines Problems:

Das AVR-System läuft.
Ich stecke die SD-Karte ein.
Ich rufe SD-INIT auf. Das gaht, manchmal aber nicht.
Ich wiederhole den INIT Befehl: Das geht dann, oder nicht.
Ich kann das beliebig wiederhoölen, und manchmal geht es, manchmal 
nicht, ohne daß ein Muster erkennbar ist.

Hat der INIT geklappt, kann ich den DIR Befehl (Auslesen dfer 
Dateiliste) starten. Das geht manchmal, manchmal aber auch bnicht.

Ursache: Keine Ahnung. Die Signale und die Signalsequenzen sehen alle 
gut aus. Ich kann also nicht klar feststellen, liegt es an der HW oder 
an der SW.

SW: Das System benutzt natürlich einen TIMER Interupt, der die Systemuhr 
und andere Time-Out Zähler bedient. Die Uhrrouine im Interrupt  geht 
allerdings nur bis zum Sekundenzähler, der Rest der Uhr ist om 
Hauptprogramm (Eventgesteuert). IRQ-Wiederholrate ist 1000 Hz.

Denkbar wäre es, daß während einer Befehlssequnz ein Timer-IQ 
"zuschlägt" und somit eine Zeitlücke zwischen den SPI-Bytes entsteht. 
Stellt das bei SD-Karten ein Probelem dar? (Time Out)

Ich will nun wie folgt vorgehen:

Ich werde mir in der Bucht aus China Pegelwandlerplatinchen bestellen 
bzw SD-Adapter mit aktiven Pegelwandler und ein oder zwei SD-Karten. 
Dann geht es weiter. Jetzt bringt weitere Bastelei eher nichts mehr, da 
ich ab Montag für einige Wochen stark beanspricht bin und nicht basteln 
kann.

Ich melde mich zurück, sobal ich Fortschritte melden kann.

von Hanns-Jürgen M. (yogy)


Bewertung
0 lesenswert
nicht lesenswert
Ach ja, noch eine Ergänzung:

Ich habe bei den Signalen ein leichtes Ringing, wie von
Autor: eProfi (Gast)  erwähnt, festgestellt. Es sind Undershoots im 
10...50mV  mV Bereich zu sehen. (Könnte aber auch alles ein Messfehler 
sein). Stellt das ein Problem für SD-Karten da?

von c-hater (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hanns-Jürgen M. schrieb:

> Zum Thema 3,3/5 Volt: Bislang hatte ich keine Probkemne mit dem 5V ISP,
> dem 5V AVR und den über Sapnnungsteulker angeschlossenen 3,3 V TFT und
> Touchcontroller.

Für MOSI und SCK kann man durchaus Spannungsteiler verwenden, am besten 
lastkompensierte, denn hier sind schnelle Signalwechsel gefragt, da käme 
man mit einer OpenDrain-Lösung nicht sehr weit. Eben so weit, wie auch 
I2C kommt, was etwas mau ist.

Nicht aber für CS, hier spielt Geschwindigkeit keine große Rolle, dafür 
aber eben die Sicherheit gegen Buskollisionen. Zumal die Anpassungen auf 
den von mir vorgeschlagenen Betrieb nur minimalen Aufwand erfordern: 
Einen Widerstand durch 0Ohm ersetzen, den zweiten durch 1MOhm und zwei 
Zeilen Software ändern...

> Auch sehe ich kein Proebleme bezüglich des AVR-Resets OHNE ISP.

Da hast du sicher Recht, ohne ISP funktioniert natürlich auch die 
Variante mit Spannungsteiler für das CS-Signal problemlos. Aber wer gibt 
schon ohne Not freiwillig den Vorteil der ISP-Programmierung auf?

> Nochmal zum Verstöndnis meines Problems:
>
> Das AVR-System läuft.
> Ich stecke die SD-Karte ein.
> Ich rufe SD-INIT auf. Das gaht, manchmal aber nicht.
> Ich wiederhole den INIT Befehl: Das geht dann, oder nicht.
> Ich kann das beliebig wiederhoölen, und manchmal geht es, manchmal
> nicht, ohne daß ein Muster erkennbar ist.
>
> Hat der INIT geklappt, kann ich den DIR Befehl (Auslesen dfer
> Dateiliste) starten. Das geht manchmal, manchmal aber auch bnicht.
>
> Ursache: Keine Ahnung.

Möglicherweise falscher SPI-Modus. Oder eine ungünstige Kombination von 
Signallaufzeiten.

Was genau kommt denn von der Karte zurück (im Vergleich der Fälle, in 
denen es geht mit denen, in denen es nicht geht)? Der Vergleich kann 
schonmal zeigen, ob das Problem bei MOSI liegt (also Karte versteht erst 
garnicht, was man von ihr will) oder bei MISO (AVR versteht die Antwort 
der Karte nicht).

> Denkbar wäre es, daß während einer Befehlssequnz ein Timer-IQ
> "zuschlägt" und somit eine Zeitlücke zwischen den SPI-Bytes entsteht.
> Stellt das bei SD-Karten ein Probelem dar? (Time Out)

Nein, eigentlich nicht. SPI ist ein synchrones Verfahren. Allerdings 
gibt es durchaus SPI-Slaves, die Untergrenzen für den Takt fordern. Ob 
das bei SD-Karten der Fall ist, weiss ich jetzt nicht, da müsste ich 
erst nochmal zielgerichtet nachlesen. Soweit ich mich erinnere, ist das 
aber nicht der Fall.

Da fällt mir ein: Ich habe schonmal was gebaut, was ein Videosignal 
mittels Zeileninterrupt produziert und in dieser Anwendung verwende ich 
ebenfalls einen SD-Card-Reader und zwar ohne jegliche Probleme. D.h.: 
Wenn es eine Untergrenze für den Takt geben sollte, dann muss diese auf 
jeden Fall noch unterhalb von ca. 15kHz liegen, denn der Zeileninterrupt 
blockierte den USI-Handler (war ein Tiny in der Anwendung) mit schöner 
Regelmäßigkeit immer wieder ca. 60µs lang, während der ungebremste 
USI-Takt ungefähr 4MHz beträgt. Also auch mit diesem extremen Wechsel 
des SPI-Takts kommen SD-Karten offensichtlich problemlos klar.

> Ich werde mir in der Bucht aus China Pegelwandlerplatinchen bestellen
> bzw SD-Adapter mit aktiven Pegelwandler

Das ist meiner Erfahrung nach nicht unbedingt nötig, kann aber 
andererseits natürlich auch nicht schaden. Für ein kommerzielles Produkt 
würde ich auf jeden Fall auch Spannungswandler einsetzen.

Bei privaten AVR-Projekten verzichte ich allerdings praktisch immer 
darauf. Hier benutze ich für die schnellen Ausgangsleitungen MOSI und 
SCK, wie oben erwähnt, lastkompensierte Spannungsteiler, also zwei 
Widerstände, von denen der "obere" durch einen kleinen Kondensator 
(wenige pF) gebrückt wird. Für CS die schon ausführlich beschriebene 
Variante und für MISO kommt's drauf an, ob ISP nötig ist und/oder auch 
5V-Busteilnehmer existieren oder nicht. Wenn nicht, gibt's garkeine 
Schaltung zur Anpassung, wenn ja, gibt's einen 470Ohm Längswiderstand 
zwischen 5V-MISO und 3.3V-MISO und eine 3.3V Z-Diode auf der 
3.3.V-Seite. Nicht gerade schön, aber bei den SPI-Frequenzen, die man 
mit dem AVR erreichen kann, gerade noch ausreichend schön. ;o)

von Hanns-Jürgen M. (yogy)


Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

wegen meines Urlaubes und des Wartns auf den China-Pegelwandler hat es 
etwas :-) länger gedauert.

Gestern habe ich einee neue Adapterplatine mit den aktiven Pegelwandlern 
zusammengelötet und heute heute dan getestet. Nun funktioniert das Ganze 
einwandfrei.

Und das mit "zusammengeknoteten" MISO/MOSI/SCK Signalen. Die /CS Signale 
natürlich alle getrennt...

So, damit ist das Prioblem gelöst. Ich danke Euche für Eure Komentare 
und Tips.

Jetzt gebe ich mich an ein anderes Thema: Eine Stütze meines Baggers ist 
offenbar festgerostet :-) Aber das gehört in ein anderes Forum...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.