Ich möchte mit einer microSD- Karte mit einem ATmega32 über SPI kommunizieren . Ich mache ein einfaches SPI-Loopback, und es funktioniert gut.
Wie kann ich nun mit der microSD-Karte kommunizieren, um einfache Bytes oder Zeichenfolgen zu schreiben und zu lesen?
Ich verwende ein benutzerdefiniertes Board, ATmega32 auf einem Steckbrett und ein SD-Kartenmodul von eBay . Ich habe gesucht, ob ATmegas mit FatFs kompatibel sind und ob sie Textdateien mit ASCII- Zeichen öffnen, lesen und schreiben können. Wie kann ich FatFs verwenden?
Wie auch immer Sie von dort aus vorgehen möchten, Ihr erster Schritt ist klar: Sie müssen eine Funktion erstellen, die einen Datenblock (512 Bytes) von der SD-Karte liest. Dazu müssen Sie SD- (oder MMC-) Befehle erteilen, um die Karte zu initialisieren und auszuwählen. Dabei handelt es sich um Befehle wie GEHE IN RUHEZUSTAND, GEHE IN NICHT-RUHEZUSTAND, BETRIEBSZUSTAND SENDEN. Lesen Sie dann das OCR-Register, um zu sehen, ob es sich um eine Karte mit hoher Kapazität handelt oder nicht (diese werden anders adressiert, bei einer alten Karte ist eine Adresse eine Byteadresse; bei einer HC-Karte ist eine Adresse eine Blocknummer (LBA)), und stellen Sie die Blocklänge ein 512 Byte. Dann können Sie den READ_BLOCK-Befehl geben, um die tatsächlichen Festplattendaten zu erhalten. Das sieht kompliziert aus (und ist es auch), aber Sie können mit den Befehlsnamen googeln, um viel Code zu finden, der SD-Karten initialisiert.
Lesen Sie zuerst den Block 0 (erste 512 Bytes) von der SD-Karte; es endet mit 0x55aa. Dann gehen Sie von dort aus weiter. Mir wurde gesagt, dass eine Codebibliothek namens fatfs die Arbeit mit FAT-Festplatten recht gut erledigen kann, aber nur zum Lesen von Dateien ist der Code zum Suchen und Lesen von Dateien in einem FAT-Dateisystem nicht so komplex. Aber schauen Sie sich fatfs an - mir wurde gesagt, dass Sie nur die Leseblock- und Schreibblockfunktionen bereitstellen müssen, und es kümmert sich um den Rest.
Eugen Sch.
MrBit
Eugen Sch.
davidcary