Mein Standard-SD-Kartenmodul verwendet vier Pins: SDCS, MOSI, SCK und MISO. Ich kann jedoch nur zwei Pins meines ATtiny85 für den Betrieb verwenden. Gibt es eine Möglichkeit, dies zu tun, ohne mehr ICs zu verwenden, z. B. einen zweiten, größeren Mikrocontroller?
Denk daran, dass:
Szenario 1:
Sie müssen immer noch die Dateizuordnungstabelle von der SD-Karte lesen, es sei denn:
Sie verwenden Ihr eigenes RAW-SD-Kartenformat
Dann brauchen Sie den MISO-Pin nicht. Statt vier Pins für die SD-Karte braucht man also drei. Es ist möglich, eine Sicherung in ATtiny85 zu setzen, die das tut
Drehen Sie den Reset-Pin in einen normalen I / O-Pin.
Jetzt haben Sie drei Pins, mit denen Sie mit der SD-Karte sprechen können. Danach können Sie keinen ICSP-Programmierer verwenden.
Szenario 2:
Teilen Sie SD-Karten-Pins mit GPS.
Verbinden Sie den RX-Pin mit SCK. Wenn Sie mit der SD-Karte sprechen, empfängt das GPS Müll und ignoriert es. Wenn Sie mit dem GPS sprechen, halten Sie den CS-Pin hoch und die SD-Karte wird ihn ignorieren. Verbinden Sie den TX-Pin über einen 10k-Widerstand mit dem MOSI-Pin. Wenn Sie mit der SD-Karte sprechen, verwenden Sie den MOSI-Pin als Ausgang. Die Kommunikation wird durch das GPS nicht gestört, da es sich hinter dem Widerstand befindet. Wenn Sie das GPS abhören müssen, halten Sie den MOSI-Pin als Eingang und CS hoch. Die SD-Karte ignoriert Daten, die vom GPS auf diesem Pin kommen.
Szenario 3:
Eine Kombination der oben genannten
Szenario 4:
Verwenden Sie einfach ATtiny84; Es ist fast dasselbe wie ATtiny85 mit mehr Pins und der gleichen Grundfläche in einem QFN-Gehäuse, wenn Sie sich für die Größe interessieren.
Dies wird wahrscheinlich nicht mit einer reduzierten SPI-Schnittstelle funktionieren. Möglicherweise können Sie einen I2C-zu-SPI-Brückenchip verwenden, aber die Teile sind nicht billig und wahrscheinlich "groß" für Ihr Design.
Einfache Methode:
Diese Art von SPI-Bus kann Pins mit anderen SPI-Geräten teilen. MISO, MOSI und SCK werden gemeinsam genutzt, und jede Komponente benötigt ihre eigene CS-Leitung. Haben Sie andere SPI-Geräte in Ihrem Design, die den Bus der SD-Karte teilen können?
Andere Methode:
Bei einigen SPI-Geräten kann die CS-Leitung niedrig gebunden werden, sodass der Bus immer aktiviert ist. Die meisten erfordern jedoch eine Abwärtsflanke auf der CS-Leitung, um den Beginn der Datenübertragung zu markieren, und eine Aufwärtsflanke, um das Ende eines Befehls zu signalisieren.
Wenn Sie den CS niedrig binden können, wird ein Stift weggelassen.
Wenn Sie nur schreiben, können Sie die MISO-Zeile weglassen. Aber schreibst du wirklich nur? Es gibt im Allgemeinen Lesevorgänge als Teil des Overheads, und sei es nur, um zu überprüfen, ob die SD-Karte verfügbar/sitzend/usw. ist.
SCK und MOSI sind immer notwendig.
Es könnte einfach funktionieren :) Aber wenn Ihr Gerät das CS-Umschalten benötigt, sehe ich keinen einfachen Weg, um das zu bekommen, was Sie wollen.
Lass den Kristall fallen. Der interne Oszillator ist ausreichend genau, um ein serielles 9600-Baud-Signal vom GPS abzutasten, und Sie beherrschen die Uhr auf der SPI-Schnittstelle, sodass das Timing auch dort nicht kritisch ist. Wenn Sie nach einem genauen Wanduhr-Zeitstempel für die Protokollierung suchen, ist ein GPS-Signal kaum zu übertreffen. Ja, Sie können es verwenden, um Drift zu korrigieren. Aber auch ohne das sind interne Oszillatoren normalerweise "gut genug", es sei denn, Sie machen einen Präzisions-Autopiloten oder ähnliches.
TurboJ
Karl Bielefeldt
AvidScifiReader