Forum: Mikrocontroller und Digitale Elektronik SD Karte mit 2 Mikrokontrollern auslesen


von Jumper M. (jumper1416)


Lesenswert?

Hallo zusammen,
ich habe mal eine Frage und finde darauf nicht so recht eine Antwort. 
Ich würde gerne eine SD Karte mit 2 mC auslesenen (nacheinander 
natürlich) und wollte fragen, ob ich dafür einfach alle Datenleitungen 
von beiden mC auf die SD Karte legen kann, oder ob es dann zu Problemen 
kommt. Ich würde natürlich den Lese Vorgang so setzen, dass sich beide 
mC nicht in die Quere kommen, aber trotzdem würde der eine mC die Pins 
des anderen mC mit Spannung beschalten.
Hat so etwas jemand schonmal gemacht und kann mir da weiterhelfen?
Danke schonmal!

von Kevin M. (arduinolover)


Lesenswert?

Die Datenleitungen sind meine ich alle open drain, die Clock Leitung 
aber nicht soweit ich informiert bin.

Was spricht gegen einen Multiplexer?

von Jumper M. (jumper1416)


Lesenswert?

An sich würde gegen einen Multiplexer nicht viel sprechen, aber ich 
würde gerne ohne weitere Bauteile auskommen und hatte gehofft über 
diesen Weg das Problem einfach und effizient zu umschiffen....

von Micha (Gast)


Lesenswert?

Und wenn du nun die SD-Karte mit einem Controller ausliest und die 
Controller per SPI oder I2C verbindest?

von Programmierer (Gast)


Lesenswert?

Die wichtigste Angabe fehlt: Verwendest du den SD-Bus ("SDIO") oder SPI?

von Jumper M. (jumper1416)


Lesenswert?

Danke schonmal!
ich habe leider an dem Atmega 328P nicht so viele SPI Schnitstellen 
dran, daher wollte ich das über eine regeln. Und ich verwende NUR SPI 
und keinen SD-Bus.

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


Lesenswert?

Kevin M. schrieb:
> Die Datenleitungen sind meine ich alle open drain
Sicher nicht, denn "Open Irgendwas" taugt nur für grauenhaft langsame 
Signale. Denn der "inaktive" Pegel muss mit Pullwiderständen erreicht 
werden.

> die Clock Leitung aber nicht soweit ich informiert bin.
Die Clock-Leitung geht ja zum Glück nur vom µC zur SD-Karte. Wenn da 
also der eine µC die Finger weglässt, darf der andere schalten und 
walten wie er will.

Jumper M. schrieb:
> würde natürlich den Lese Vorgang so setzen, dass sich beide mC nicht
> in die Quere kommen
Dafür sollten natürlich die Pins des inaktiven µC hochohmig geschaltet 
werden.

> aber trotzdem würde der eine mC die Pins des
> anderen mC mit Spannung beschalten.
Aber hoffentlich nicht, ohne dass der jeweils "Andere" ohne 
Versorgungsspannung wäre.

: Bearbeitet durch Moderator
von Theor (Gast)


Lesenswert?

Jumper M. schrieb:
> Danke schonmal!
> ich habe leider an dem Atmega 328P nicht so viele SPI Schnitstellen
> dran, daher wollte ich das über eine regeln. Und ich verwende NUR SPI
> und keinen SD-Bus.

Du benötigst an und für sich auch nicht mehrere SPI-Schnittstellen, 
falls Du  das im SPI-Bus übliche Chip-Select-Signal verwendest.
SD-Speicherkarten und AVRs haben ein CS-Signal.

von pegel (Gast)


Lesenswert?

An Stelle irgendwelcher Multiplexer würde ich lieben einen Euro für 
einen zusätzlichen µC investieren, der die Verwaltung der Karte 
übernimmt.

Dieser kann über eine beliebige Schnittstelle angesprochen werden und 
enthält die Dateiverwaltung der Karte, die so auch nicht doppelt 
vorhanden sein muss.

von Falk B. (falk)


Lesenswert?

Jumper M. schrieb:
> ich habe mal eine Frage und finde darauf nicht so recht eine Antwort.
> Ich würde gerne eine SD Karte mit 2 mC auslesenen (nacheinander
> natürlich)

Das halte ich für ein zweifelhaftes Konzept. Sieh zu, daß nur ein 
Mikrocontroller auf die SD-Karte zugreifen muss. Und warum überhaupt 2 
Controller? Machst du SOOOOO viel, daß das einer nicht schafft? Meistens 
liegt das eher am schlechten Konzept bzw. der schlechten Umsetzung als 
an der verfügbaren CPU-Leistung.

> und wollte fragen, ob ich dafür einfach alle Datenleitungen
> von beiden mC auf die SD Karte legen kann, oder ob es dann zu Problemen
> kommt. Ich würde natürlich den Lese Vorgang so setzen, dass sich beide
> mC nicht in die Quere kommen, aber trotzdem würde der eine mC die Pins
> des anderen mC mit Spannung beschalten.

Wenn man mit SPI arbeitet kann man das schon machen, allerdings muss der 
inaktive Controller ALLE SPI-IOs deaktiveren und auf Tristate bzw. 
Eingang schalten.

> Hat so etwas jemand schonmal gemacht

Ich nicht. Siehe oben.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Jumper M. schrieb:
> Ich würde gerne eine SD Karte mit 2 mC auslesenen (nacheinander
> natürlich) und wollte fragen, ob ich dafür einfach alle Datenleitungen
> von beiden mC auf die SD Karte legen kann, oder ob es dann zu Problemen
> kommt. Ich würde natürlich den Lese Vorgang so setzen, dass sich beide
> mC nicht in die Quere kommen, aber trotzdem würde der eine mC die Pins
> des anderen mC mit Spannung beschalten.

 Beim Reset oder Coldstart sind alle Pins inputs, von daher hast du
 keine Probleme, also die SPI-Pins (MISO, MOSI, SCK, SS) ruhig parallel
 schalten. SS und PortB.1 bei beiden miteinander verbinden und Pullup
 einschalten.
 Wenn einer von beiden uC SD-Karte auslesen will, prüft er zuerst PB.1,
 falls auf Log.1, prüft er danach SS und falls beide auf Log.1 sind,
 setzt er PB.1 als Ausgang und schaltet diesen auf Log.0.
 Falls aber einer von beiden Pins auf Log.0 ist bedeutet das, daß der
 andere uC schon die SD-Karte benutzt, also warten...

 Setzt natürlich voraus, daß die SPI-Schnitstelle nach beenden des
 Lese- oder Schreibvorgangs als erstes wieder deaktiviert wird, alle
 SPI-Pins wieder als Eingänge definiert werden und erst danach PB.1
 als Input mit Pullup gesetzt wird.

 P.S.
 Allerdings ist der Vorschlag von pegel:
 Beitrag "Re: SD Karte mit 2 Mikrokontrollern auslesen"
 weitaus besser und vorallem sicherer und codesparender.

 Oder, wie Falk vorgeschlagen hat:
 Beitrag "Re: SD Karte mit 2 Mikrokontrollern auslesen"
 lass einen uC die ganze Arbeit mit SD-Karte machen...

: Bearbeitet durch User
von Wolfgang (Gast)


Lesenswert?

Lothar M. schrieb:
> Die Clock-Leitung geht ja zum Glück nur vom µC zur SD-Karte. Wenn da
> also der eine µC die Finger weglässt, darf der andere schalten und
> walten wie er will.

"Finger weglassen" heißt dann aber wirklich High-Z und nicht einfach 
ruhig sein.

von oszi40 (Gast)


Lesenswert?

Wolfgang schrieb:
> "Finger weglassen"

Naja im Einschaltmoment oder bei Fehler sollte schon klar sein wer die 
Finger drauf haben darf. Weiterhin wäre zu klären was DER ANDERE 
überhaupt dort darf. Auf den gleichen Speicher schreiben kann auch "viel 
Spaß" zur Folge haben?

von Anita H. (anita1995)


Lesenswert?

Wie wäre es wenn man den CS-Pin nicht nur setzt, sondern vorher abfrägt 
ob er auch schon gesetzt wurde?

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


Lesenswert?

Anita H. schrieb:
> Wie wäre es wenn man den CS-Pin nicht nur setzt, sondern vorher abfrägt
> ob er auch schon gesetzt wurde?
Was, wenn beide µC diese Abfrage gleichzeitig machen?
Und zudem ist der CS-Pin ja nicht dauerhaft aktiv, sondern kann 
während eines Filetranfsers und/oder eines Kommandos auch mal wieder 
inaktiv werden. Und dann wirds interessant, wenn mittendrin der "Andere" 
mit seinem Zugriff anfängt.

Dieses "Aushandeln", welchem der beiden Delinquenten denn jetzt auf die 
Karte "gehört", muss auf einem anderen Weg erfolgen. Stupides "Mithören" 
auf der CS-Leitung wird da sicher nicht reichen.

Wolfgang schrieb:
> "Finger weglassen" heißt dann aber wirklich High-Z und nicht einfach
> ruhig sein.
Ja, so war das gemeint...  ;-)
Sonst gibts die klassische Buskollision mit undefinierten Pegeln und 
überraschenden Auswirkungen.

oszi40 schrieb:
> Weiterhin wäre zu klären was DER ANDERE überhaupt dort darf. Auf den
> gleichen Speicher schreiben kann auch "viel Spaß" zur Folge haben?
Das muss nicht mal das Schreiben auf den gleichen Speicher sein. Es 
reicht schon aus, wenn einer der beiden µC die gesamte oder auch nur 
Teile der FAT in seinem Speicher cached und der andere dann die FAT auf 
der Karte ändert. Mit ganz wenig Aufwand lassen sich da beliebige 
eigenartige, urige Effekte erzielen.

: Bearbeitet durch Moderator
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.