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!
Die Datenleitungen sind meine ich alle open drain, die Clock Leitung aber nicht soweit ich informiert bin. Was spricht gegen einen Multiplexer?
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....
Und wenn du nun die SD-Karte mit einem Controller ausliest und die Controller per SPI oder I2C verbindest?
Die wichtigste Angabe fehlt: Verwendest du den SD-Bus ("SDIO") oder SPI?
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.
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
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.
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.
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.
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
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.
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?
Wie wäre es wenn man den CS-Pin nicht nur setzt, sondern vorher abfrägt ob er auch schon gesetzt wurde?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.