Mehrere Arduino und eine SD-Card

So, nachdem ich nun brav seit heute Morgen herumprobiere und auch intensives gegoogle nicht weiter geholfen hat, möchte ich mein Problem gerne hier zur Diskussion stellen.

Ich habe zwei Arduino Amtel 328P und ein einfaches SD-Card Breakout 5V/3.3V umschaltbar, das bekannte blaue.

Ich nutze die alte SD-lib, mit der ich bislang immer gut gefahren bin.

Problem:
Von der SD-Karte möchte ich gerne mit mehreren Arduino lesen.
Bislang hatte ich einfach den Master die Daten lesen lassen und die Daten dann per I2C an die Slaves übertragen, was mir mittlerweile zu lange dauert.

Versucht habe ich heute eine Lösung mit Transistoren um MOSI/MISO/CLK zu unterbrechen, dabei CS einfach "hart" auf Ground da die SD-Karte das einzige SPI-Device bleibt. Ferner mit SPI.end() etc. und Tricks in der Logik. Leider klappt das alles nicht so Recht.

Hat vielleicht jemand einen Tipp für mich wie man so etwas löst?

Wie stellst Du sicher, dass immer nur ein Arduino auf die SD-Karte zugreift?

Ansonsten musst Du die Arduino-Ausgänge mittels Transistoren oder MOSFETS schalten (also SCLK, MOSI und SS).

Einfacher ginge es, wenn Du sicherstellen kannst, dass nur einer zugreifen kann. Jener darf dann die SPI-Hardware aktiviert haben, die anderen deaktivieren die Hardware und konfigurieren die SPI-Leitungen als Eingänge. Aber: ein Fehler in der Programmierung und die Arduino-Ports sind hin.

Vielen Dank für Deinen Tipp.

Sicherstellen werde ich es dadurch, dass ich einen Quasi-Master habe, der das Einlesen über einen Hardware-Interrupt der Reihe nach anstößt und über einfache Port HIGHs und LOWs überwacht.

Heute Nacht habe ich es übrigens noch mit Transistoren hin bekommen. Warum es nicht klappte war, dass der Strom den Arduino liefert, als Sperrstrom für (meine vorhandenen) drei Transistoren nicht ausreichte boing :blush: Tja, bin eben auch nur ein Hobbyist mit einer kleinen Allerlei-Gruschkiste.

Ich werde mir das heute nochmals genauer ansehen wie man die SPI-Hardware am besten deaktiviert, da blicke ich noch nicht ganz durch, denn das mit den Transistoren gefällt mir noch nicht so gut. Um die Ports zu schützen, könnte man ja vielleicht jeweils eine Diode setzen.

LG

Ich werde mir das heute nochmals genauer ansehen wie man die SPI-Hardware am besten deaktiviert,

Am einfachsten über SPI.end(), danach alle Ausgangspins auf Input schalten:

SPI.end();
pinMode(SS, INPUT);
pinMode(MOSI, INPUT);
pinMode(SCLK, INPUT);

Dann sollte der so stillgelegte Arduino die Signale auf dem Bus ignorieren.

Hallo,

mein Ansatz wäre die beiden Arduinos mit der Seriellen Schnittstelle zu koppeln und die SD-Karte nur an einem anzuschließen.
Dieser kann dann vom anderen Kommandos empfangen wie z.B.: "writesd $filename $content".

Je nach Anwendungsszenario geht das, habe ich selbst probiert.

LG
Sebastian

pylon:
Ganz herzlichen Dank für Deine Mühe - so klappt das nämlich prima :slight_smile:
... und ganz ohne die lästigen Transistoren.

7cookies:
Ja, wäre natürlich auch eine gute Option! Auch Dir ein Danke für diese Anregung.

LG