Forum: Mikrocontroller und Digitale Elektronik 2 µC an eine SD-Karte


von Andi S. (laserandi)


Lesenswert?

Hallo Forum,
ich möchte eine SD-Karte mit zwei Mikrocontrollern betreiben. CS, GND 
und VCC sind kein Problem. Meine erste Idee ist die Signale MISO (DO), 
MOSI (DI) und SCK (CLK) mit Reedrelais durch die CS Signale der 
Mikrocontroller um zu schalten. Gibt es dafür noch eine einfachere 
Lösung? Mein Problem ist, dass ich keine Reedrelais für 3,3 V VCC mit 
Wechselkontakt finden kann.
Gruß
Andi

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Andi S. schrieb:
> Meine erste Idee ist die Signale MISO (DO), MOSI (DI) und SCK (CLK)
> mit Reedrelais durch die CS Signale der Mikrocontroller um zu schalten.
Diese Idee ist wie die allermeisten allerersten Ideen Unsinn. Du mußt 
zuallererst mal festlegen, wann einer der beiden uCs auf die SD-Karte 
darf. Und wie sich die beiden uCs das gegenseitig mitteilen...
Denn wenn die Karte gerade im Schreibmodus befindet, wäre es eine 
ausgesprochen dumme Sache, wenn einfach so die Steuerleitungen 
umgeschaltet werden und der 2. uC zu Lesen beginnt...

Und wenn du jetzt weißt, welcher der beiden uC gerade auf die Karte 
darf, dann kannst du beim anderen ganz einfach die Portpins MISO (DO), 
MOSI (DI) und SCK (CLK) per Software auf "Eingang" schalten. Dann ist 
der hochohmig und nicht an der Kommunikation beteiligt.

von Frank B. (f-baer)


Lesenswert?

Alternativ kannst du einen der Controller an die SD-Karte anbinden, der 
zweite sendet und empfängt nur über den ersten Controller. Wird etwas 
langsamer, ist aber definitiv die sicherste Methode.

von Andi S. (laserandi)


Lesenswert?

Sorry, aber ich muss das wohl etwas genauer beschreiben.
Der erste µC ist ein ATMega, den ich natürlich frei programmieren kann.
An den zweiten µC komme ich nicht ran, da sich dieser in einer Kamera 
befindet. Dazu stecke stecke ich einfach eine Dummy-SD Karte mit Kabel 
in den SD-Karten Schacht. Mit dem ATMega schalte ich die Kamera ein, 
löse sie aus, warte bis das Bild auf die Karte geschrieben ist und 
Möchte dann wieder mit dem ATMega auf die Karte zugreifen.
Deshalb greifen zwei µC auf eine Karte zu, deren SCK, MOSI und MISO 
Leitungen nicht einfach verbunden werden können sondern umgeschaltet 
werden müssen.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Andi S. schrieb:
> Sorry, aber ich muss das wohl etwas genauer beschreiben.
Ja, das ist besser so. Dann hat die Raterei ein Ende.
Du kannst also irgendwie verhindern, dass beide gleichzeitig auf die 
Karte zugreifen. Das ist schon mal gut.
Warum nimmst du dann nicht einfach einen Multiplexer in der Art eines 
CD4053 bzw. neuere/aktuellere Nachfolgekandidaten? Der hätte genau 3 
Umschaltkontakte...

von Marcel S. (marcel_74)


Lesenswert?

Hallo!

Mache es doch so, wie von f-baer vorgeschlagen. Lasse den "Kamera-µC" 
durch Deinen ATMega auf die Speicherkarte zugreifen, vorausgesetzt deine 
Kamera macht die Signallaufzeitverzögerung mit. Dann hast Du die volle 
Kontrolle und weißt ja sofort, was der "Kamera-µC" mit der Karte machen 
möchte. Wenn Du nur von der Karte lesen möchtest kannst Du der Kamera ja 
auch eine höhere Priorität geben, sprich Deine Aktivität unterbrechen 
wenn die Kamera zugreifen möchte.


Viele Grüße
Marcel

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Marcel Sz schrieb:
> vorausgesetzt deine Kamera macht die Signallaufzeitverzögerung mit.
Das möchte ich sehr sehr ernsthaft bezwiefeln. SPI funktioniert so, dass 
wenn ein SCLK kommt schnellstmöglich die Datenleitungen reagieren. Ich 
würde schätzen, dass die Verzögerung durch einen uC hindurch etwa 
den Faktor 1000 zu lang ist. Insbesondere bei den aktuellen 
HiSpeed-Karten.

> Lasse den "Kamera-µC" durch den ATMega auf die Speicherkarte zugreifen
Wie stellst du dir das vor?

> Wenn Du nur von der Karte lesen möchtest kannst Du der Kamera ja
> auch eine höhere Priorität geben, sprich Deine Aktivität unterbrechen
> wenn die Kamera zugreifen möchte.
Wie stellst du dir das vor?

von Karl H. (kbuchegg)


Lesenswert?

Lothar Miller schrieb:
> Marcel Sz schrieb:
>> vorausgesetzt deine Kamera macht die Signallaufzeitverzögerung mit.
> Das möchte ich sehr sehr ernsthaft bezwiefeln. SPI funktioniert so, dass
> wenn ein SCLK kommt schnellstmöglich die Datenleitungen reagieren. Ich
> würde schätzen, dass die Verzögerung durch einen uC hindurch etwa
> den Faktor 1000 zu lang ist. Insbesondere bei den aktuellen
> HiSpeed-Karten.

Das müsste man ausprobieren.
In so einer Kamera erwarte ich eigentlich nicht einen 
Hochleistungsrechner zur Kommunikation mit der Karte

>> Lasse den "Kamera-µC" durch den ATMega auf die Speicherkarte zugreifen
> Wie stellst du dir das vor?

So wie ich das vestanden habe, löst der Mega die Kamera aus. D.h. der 
Mega weiß wann die Karte zugreifen wird. Ab diesem Zeitpunkt kümmert er 
sich nur noch um Portweiterleitung von der Kamera zur Karte und 
umgekehrt. Sollte eine enge Schleife sein, in der sonst nichts 
Gravierendes gemacht wird. Pin hier - Port dort
Kehrt nach einiger Zeit wieder Ruhe auf den Leitungen ein, dann holt 
sich der Mega selbst das Bild von der Karte

Ob sichs mit dem Timing ausgeht?
Hmmmmmmmmm

Vielleicht mit der Problembeschreibung noch weiter ausholen, damit man 
sich das zu lösende Problem noch besser vorstellen kann.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Karl heinz Buchegger schrieb:
> In so einer Kamera erwarte ich eigentlich nicht einen
> Hochleistungsrechner zur Kommunikation mit der Karte
Ich auch nicht, aber irgendwie erwarte ich eine spezialisierte Hardware 
für die wenigen Aufgaben (Bild aufnehmen und Abspeichern)...

> Ob sichs mit dem Timing ausgeht?
> Hmmmmmmmmm
Mal überschlägig und gefühlt: auch eine "langsame Kamera" bekommt ein 
3MB großes Bild in 5sec weggespeichert. Das ist also 0,6MB/sec oder 
5MBit/sec. Da müsste (um irgendwelche Setup- und Hold-Zeiten nicht 
allzusehr zu verletzen) das Signal mindestens mit dem Faktor 5 
überabgetastet werden. Das wären dann 25MHz "Durchreicherate" vom 
jeweiligen Eingangs- zum Ausgangspin...

Fazit:
Ich bleibe vorerst weiter bei meiner Mux-Lösung   ;-)

von Marcel S. (marcel_74)


Lesenswert?

Hallo zusammen,

ein erster Versuch sollte klären, ob man den Zugriff durch den µC 
hindurch hinbekommt.
Ich vermute, dass die Hardware (SD-Karten-Dummy mit Leitungen, echte 
SD-Karte, µC etc.) vorhanden ist.
Wenn die Kamera dann ordentlich lesen und schreiben kann und keinen 
Speicherkartenfehler anzeigt, kann man sich über den weiteren Weg 
Gedanken machen. Eine Multiplexlogik aufzubauen wäre auch eine gute 
Idee, die aber eben zusätzliche Hardware erfordert. Diese würde ich aber 
als nächstes testen.

Viele Grüße
Marcel

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Karl heinz Buchegger schrieb:
> Das müsste man ausprobieren.
Marcel Sz schrieb:
> ein erster Versuch ...
Dann ist bei Ausprobieren und einem Versuch nur bewiesen, dass es genau 
zu diesem Zeitpunkt funktioniert hat. Ich würde nicht versuchen das 
auszuprobieren, sondern erst mal die SCLK-Frequenz beim Speichern 
messen... :-o

Und die max. Updaterate von Pin zu Pin lässt sich anhand der 
Maschinenzyklen berechnen...

von Andi S. (laserandi)


Lesenswert?

Erstmal vielen Dank für die Anregungen.
Ich möchte die "SPI durch ATMega" Diskussion nicht abbrechen, aber eine 
MUX bzw. Umschalt- Lösung ist für meine Verhältnisse die einfachere 
Lösung.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Andi S. schrieb:
> Ich möchte die "SPI durch ATMega" Diskussion nicht abbrechen, aber eine
> MUX bzw. Umschalt- Lösung ist für meine Verhältnisse die einfachere
> Lösung.

Das schon, aber Du bist Dir darüber im Klaren, daß Dein außerhalb der 
Kamera untergebrachter µC nur lesend auf die Speicherkarte zugreifen 
darf?

von Andi S. (laserandi)


Lesenswert?

@ Karl heinz Buchegger
> Vielleicht mit der Problembeschreibung noch weiter ausholen, damit man
> sich das zu lösende Problem noch besser vorstellen kann.

Bei diesem Projekt handelt es sich um das AVR-Webmodul von Ulrich Radig. 
Das ist für eine Kamera vorgesehen, an die nicht mehr dran zu kommen 
ist. Es wäre toll, wenn man über die Kartenlösung Kameratyp unabhängig 
werden könnte.

@Rufus t. Firefly
>daß Dein außerhalb der Kamera untergebrachter µC nur lesend auf die Speicherkarte
>zugreifen darf?

Nein, ist mir nicht klar. Warum sollte das so sein?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Andi S. schrieb:
> Nein, ist mir nicht klar. Warum sollte das so sein?
Weil evtl. die FAT oder Teile davon lokal in der Kamera gespeichert 
werden? Und wenn du die dann extern änderst, passt das nicht mehr so 
richtig zusammen...

von Andi S. (laserandi)


Lesenswert?

Um das zu vermeiden schalte ich die Kamera ein und aus. Dann sollte 
eigentlich alles auf die Karte übertragen werden (meiner naiven 
Vorstellung nach). Schließlich kann ich die Karte ja auch aus der Kamera 
heraus holen und z.B. in einem Kartenlesegerät weiter verwenden.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Andi S. schrieb:
> Um das zu vermeiden schalte ich die Kamera ein und aus. Dann sollte
> eigentlich alles auf die Karte übertragen werden (meiner naiven
> Vorstellung nach). Schließlich kann ich die Karte ja auch aus der Kamera
> heraus holen und z.B. in einem Kartenlesegerät weiter verwenden.

Wenn Du so vorgehst, sollte es das Problem nicht geben.

Würdest Du die Kamera jedoch nicht abschalten bzw. den 
Kartenslot-Kontakt* betätigen, dann bestünde die Gefahr, daß das 
Dateisystem durcheinanderkommt.


Eine alternative Vorgehensweise übrigens bestünde darin, die Kamera per 
USB anzusteuern, das geht z.B. mit einem USB-Host wie dem Vinculum. 
Vorteil wäre hier, daß Du dich nicht um das Abschalten der Kamera 
kümmern müsstest, und daß Du auch nicht an das Kameramodell und die Art 
der Speicherkarte gebunden bist. Einzige Voraussetzung ist, daß die 
Kamera das "Mass Storage Device"-Protokoll unterstützt, aber das tut so 
gut wie jede Kamera.



*) Viele Kameras werten entweder den Kontakt im SD-Kartenslot aus, oder 
nutzen einen Taster, der beim Öffnen des Deckels vor dem SD-Kartenfach 
betätigt wird.

von U.R. Schmitt (Gast)


Lesenswert?

Rufus t. Firefly schrieb:
> Einzige Voraussetzung ist, daß die
> Kamera das "Mass Storage Device"-Protokoll unterstützt, aber das tut so
> gut wie jede Kamera.

Jepp, aber je nach Kamera musst Du an der Kamera dann noch bestätigen 
oder sogar auswählen wie die Kamera sich verhalten soll.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

U.R. Schmitt schrieb:
> Jepp, aber je nach Kamera musst Du an der Kamera dann noch bestätigen
> oder sogar auswählen wie die Kamera sich verhalten soll.

Nun, die kann man dann natürlich in die Kategorie "unbrauchbar" 
einsortieren, ebenso wie die, die kein "Mass Storage Device" sind.

Glücklicherweise ist mir so eine Kamera noch nicht untergekommen (bis 
auf meine erste Digitalkamera, aber die hatte noch nicht einmal einen 
USB-Anschluss, sondern eine serielle(!) Schnittstelle).

von Andi S. (laserandi)


Lesenswert?

Nichts für ungut, aber USB Host ist für meine Anwendung wie mit Kanonen 
auf Spatzen geschossen. Alleine das Vinculum Modul kostet wahrscheinlich 
mehr als der Webserver (von der Programmierarbeit mal ganz abgesehen).

von U.R. Schmitt (Gast)


Lesenswert?

Rufus t. Firefly schrieb:
> Glücklicherweise ist mir so eine Kamera noch nicht untergekommen

Meine  Ein Jahr alte Olympus Spiegelreflex bietet mir 3 oder 4 Optionen, 
wie sie sich am USB verhalten soll. Aber vieleicht könnte man ja im 
Setup irgendwo einen Default eintragen.

von frank (Gast)


Lesenswert?

Meine alpha100 macht solange der USB angeschlossen ist keine Bilder.
frank

von Marcel S. (marcel_74)


Lesenswert?

Lothar Miller schrieb:
> Karl heinz Buchegger schrieb:
>> Das müsste man ausprobieren.
> Marcel Sz schrieb:
>> ein erster Versuch ...
> Dann ist bei Ausprobieren und einem Versuch nur bewiesen, dass es genau
> zu diesem Zeitpunkt funktioniert hat. Ich würde nicht versuchen das
> auszuprobieren, sondern erst mal die SCLK-Frequenz beim Speichern
> messen... :-o
>
> Und die max. Updaterate von Pin zu Pin lässt sich anhand der
> Maschinenzyklen berechnen...

Hallo!

Sicher kann man das erst einmal nachmessen und ausrechnen. Aber dann ist 
auch nur ausgemssen, wie schnell diese Kamera mit dieser Speicherkarte 
kommuniziert. Interessant ist in diesem Zusammenhang eher, was die 
Spezifikationen hergeben. Sprich: Wie langsam darf die Kommunikation zu 
einer SD-Card überhaupt werden? Und jetzt kann man sich ausrechnen, obs 
mit dem ATMegaXX überhaupt gehen kann.

Viele Grüße
Marcel

von holger (Gast)


Lesenswert?

>Sprich: Wie langsam darf die Kommunikation zu
>einer SD-Card überhaupt werden?

Das ist beliebig. Bei SPI jedenfalls.
Ich wüsste nicht das es da Timeouts gibt.

von Frank K. (fchk)


Lesenswert?

Andi S. schrieb:
> Sorry, aber ich muss das wohl etwas genauer beschreiben.
> Der erste µC ist ein ATMega, den ich natürlich frei programmieren kann.
> An den zweiten µC komme ich nicht ran, da sich dieser in einer Kamera
> befindet. Dazu stecke stecke ich einfach eine Dummy-SD Karte mit Kabel
> in den SD-Karten Schacht. Mit dem ATMega schalte ich die Kamera ein,
> löse sie aus, warte bis das Bild auf die Karte geschrieben ist und
> Möchte dann wieder mit dem ATMega auf die Karte zugreifen.
> Deshalb greifen zwei µC auf eine Karte zu, deren SCK, MOSI und MISO
> Leitungen nicht einfach verbunden werden können sondern umgeschaltet
> werden müssen.

Stop!

Das geht so nicht!

Um die SD-Karte per SPI benutzen zu können, musst Du die Karte vom 
MMC-Modus in den SPI-Modus schalten. Aus dem SPI-Modus kommt die Karte 
nur wieder über ein Poweroff-Poweron wieder heraus. Dann gibts da nur 
den 4-Bit Modus.

Das heißt: Du brauchst einen Controller mit einem kompletten 
MCI-Interface (CLK, CMD, DAT0-DAT3) mit allen Features. Umschalten musst 
Du dann mit Analogschaltern, zumindest die vier Datenleitungen, weil die 
bidirektional sind. Analog Devices hat solche Teile.

fchk

von Marcel S. (marcel_74)


Lesenswert?

holger schrieb:
>>Sprich: Wie langsam darf die Kommunikation zu
>>einer SD-Card überhaupt werden?
>
> Das ist beliebig. Bei SPI jedenfalls.
> Ich wüsste nicht das es da Timeouts gibt.

Hallo!

Ja, ich habe gerade auch mal genauer nachgelesen. Die SD-Karten können 
wohl von "0" bis 25MHz getaktet werden. Da allerdings der Host, in 
diesem Fall die Kamera, den Takt vorgibt (der sich irgendwo im Bereich 
von 0-25Mhz bewegt), muss man nachmessen. Streng genommen müsste die 
externe Schaltung allerdings bis 25Mhz mitmachen können, damit sie 
kompatibel zu verschiedenen Kameras bleibt.
Da würde ich dann wohl auch Abstand von der "Durchreichemethode" nehmen 
:-)

Hier mal ein Link:
http://elm-chan.org/docs/mmc/mmc_e.html

von Andi S. (laserandi)


Lesenswert?

@ Frank K.
> Um die SD-Karte per SPI benutzen zu können, musst Du die Karte vom
> MMC-Modus in den SPI-Modus schalten.

Sehr guter Einwand. Das sollte man nicht vernachlässigen. Dadurch wird
das Ganze wesentlich aufwendiger als geplant :-(

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.