MicroSD-Karte SPI mit ATmega32 [geschlossen]

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?

Verwenden Sie Arduino mit dem SD-Schild? Wenn nicht - geben Sie die Hardware an. Wenn ja - Sie haben die SD-Bibliothek für Arduino.
Ich verwende ein benutzerdefiniertes Board, atmega32 auf einem Steckbrett und ein SD-Modul von ebay. Ich habe gesucht, dass Atmega mit Fatfs kompatibel ist und txt-Dateien mit ASCII-Zeichen öffnen, lesen und schreiben kann. Wie kann ich Fatfs verwenden?
Bevor Sie sich mit höherwertigen Dingen wie Dateisystemen befassen, stellen Sie sicher, dass Sie in der Lage sind, mit der Karte zu kommunizieren und sie wie im Protokoll beschrieben zu initialisieren, zum Beispiel hier: alumni.cs.ucr.edu/~amitra/sdcard/Additional/…
Haben Sie versucht, eine der SD- oder MultiMediaCard-Bibliotheken zu verwenden ?

Antworten (1)

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.

Ich habe eine FATFS-Bibliothek gefunden, aber sie funktioniert mit GPIO-Pins. Ich möchte mit dem SPI-Modul von atmega32 arbeiten
Dann sollten Sie f_read- und f_write-Funktionen implementieren, die das SPI-Modul verwenden, und FatFS diese Funktionen verwenden lassen, um auf die Karte zuzugreifen. Hmm, ich würde denken, jemand hätte diese Funktionen bereits implementiert. Ich würde es nicht wissen, ich habe meinen eigenen fetten Dateisystem-Handler von Grund auf neu geschrieben. Tut mir leid, ich kann Ihnen nicht weiterhelfen.
Ich suche nach Fatfs, die Spi-Funktionen verwenden, um auf die Karte zuzugreifen. irgendein beispiel?