Günstig auf SD-Karte schreiben

Also, hier ist das Szenario:

Ich habe einen Arduino und eine SD-Karte. Leider habe ich keinen der schicken Schilde, und ich habe keine Zeit, einen zu bestellen. Wie wir wissen, laufen Arduinos mit 5 V und SD-Karten mit 3,3 V. Ich dachte, ich könnte eine Reihe von Spannungsteilern verwenden, um die Daten vom Arduino zur Karte (MOSI, Clock, SS) auf die richtige Spannung zu bringen, aber ich bin mir nicht sicher, ob ich eine Aufwärtsschaltung zusammenstellen soll .

Brauche ich überhaupt eine Aufwärtsschaltung für die MISO-Leitung oder könnte ich sie einfach direkt in den Arduino einspeisen? Hat jemand noch andere Ideen als die von mir genannten?

Ein Widerstandsteiler funktioniert nicht für die VCC-Leitung. SD-Karten können bis zu 100 mA ziehen.
@TurboJ, ich hatte nie vor, einen Teiler für die VCC-Leitung zu verwenden. Arduinos haben eine dedizierte 3,3-V-Versorgungsleitung, falls Sie es nicht wussten.

Antworten (2)

Wenn Sie den SPI-Takt nicht schnell laufen lassen und die Arduino-Referenz verwenden, um die Taktteilung für das SPI-Peripheriegerät auf einen ziemlich niedrigen Wert einzustellen (Sub-MHz wäre gut), können Sie definitiv mit einer einfachen Spannungspegelverschiebung mit Widerständen davonkommen.

Machen Sie sich keine Sorgen, dass Signale, die zum Arduino zurückkehren, nur 3,3 V betragen, es wird als logisch HIGH erkannt (nur gerade, aber es funktioniert).

Ich habe das persönlich mit einem Arduino Uno und einem SD-Karten-Breakout von Sparkfun gemacht. Ich benutzte ein Steckbrett und einige Widerstände. Kabel natürlich kurz halten.

Dies ist der billigste und beschissenste Weg, den Sie tun können, aber ehrlich gesagt empfehle ich eine Art Level-Shifter / Übersetzer, den Sie mit sehr wenig Recherche im Internet finden können.

EDIT: Wenn es hilft, habe ich Widerstände mit weniger als 5K Ohm verwendet. Wie ich bei Adafruit herausgefunden habe, sind 10K zu hoch. Insbesondere 1,8K und 3,6K

Danke schön. Ich habe vor, später zurückzugehen und es richtig zu machen, aber wenn Sie in ein paar Stunden nur einen einfachen Datenlogger für etwas brauchen, werden die Dinge viel hackiger und billiger. Wir haben Widerstände herumliegen, aber ich glaube nicht, dass wir irgendwo nur einen Pegelumsetzer herumliegen haben.
@ user38168 Ich habe die von mir verwendeten Widerstandswerte hinzugefügt, falls das hilft. Stellen Sie sicher, dass der 3,3-V-Ausgang Ihres Arduino zur Stromversorgung verwendet wird.
Danke auch für die Angabe der Widerstandswerte. Und nur um zu bestätigen, dass es funktioniert, haben Sie die standardmäßigen SD-Kartenbibliotheken von Arduino verwendet, richtig?
ATMega bei 5V akzeptiert wahrscheinlich 3,3V-Pegel, muss es aber nicht. Diese SD-Spezifikation garantiert eine minimale hohe Ausgangsspannung von 0,75 Vdd = 2,475 V, während ATMega 0,6 * Vdd = 3 V benötigt.
@ user38168 ja, Standard-SD-Kartenbibliotheken. Ich habe es geschafft, seine ID und Spezifikationen über den SPI-Bus korrekt zurückzugeben und auf dem seriellen Monitor in Arduino IDE zu drucken.
@venny richtig, aber aus meinen einfachen Tests, solange es genug Spannung liefert und nichts Seltsames passiert, ist der IO der volle VCC-Pegel (3,3 V)

schematisch

Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan

Verwenden Sie einfach Dioden, um den Pegel zwischen einem 5-V-AVR und einem 3,3-V-SD-Kartenleser/-schreiber umzuschalten. Die 10K-Widerstände sollten sich auf dem SD-Kartenmodul befinden, aber wenn dies nicht der Fall ist, müssen Sie sie hinzufügen.

Nein, keine gute Idee. Die Pullups liefern einen wesentlich schwächeren Antrieb als das Beispiel des Vorwiderstands.