SD-Karte

Aus Ethersex_Wiki
Version vom 14. Oktober 2010, 16:14 Uhr von C Classic (Diskussion | Beiträge)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

SD-Karten einbinden

Anschlussbelegung der SD-Karte

SD.jpg

  • 1 Chip Select = CS
  • 2 CMD/DI = MOSI
  • 3 GND
  • 4 VCC (2,9 - 3,6V)
  • 5 CLK/SCLK = SCK
  • 6 GND
  • 7 DAT/DO = MISO
  • 8 NC
  • 9 NC

Schaltung

Hinweise:
Zwischen die Stromversorgungspins der SD-Karte muss noch ein 10µF und ein 100nF Kondensator, da die Verbindung sonst sehr instabil bis gar nicht funktioniert.
[Schaltplan in Arbeit]

Steckverbinder

Eine günstige Art der Kontaktierung ist wohl das Ausschlachten eines billigen Cardreaders, wenn man keine Kabel direkt an die Karte löten will. Einzeln gekaufte Steckverbinder sind meist erheblich teuerer.
Man kann auch alte Floppy-Kabel als günstigen Steckverbinder benutzen. Beispiel: Link
Teile von AT-Slots oder Verbinder von 5,25-Zoll-Floppys gehen auch. Notfalls kann man die Karte zwischen 2 Reihen Stiftleiste einklemmen (oder anlöten).
Noch günstiger geht's wenn man Mikro- oder Mini-SD-Karten benutzt und den meist beigelegten Adapter anlötet.

Wer jedoch auf einen Selbstbau verzichten will, kann alternativ für relativ schmales Geld einen fertig aufgebauten SD-Adapter zum Anschließen an den µC unter folgender Adresse beziehen:
Link
Bei diesem Adapter ist bereits eine bidirektionale Pegelanpassung zwischen den 5V-Pegeln der Steuerleitungen des µC's und den 3,3V-Pegel der SD-Karte an Bord. (es geht auch mit den 5V aber nicht auf Dauer, da sonst die Karte irgendwann hinüber ist!)

Ich hatte anfangs selbst eine Platine mit einem MAX3378 entworfen, welche auch heute noch super funktioniert, der Aufwand hierfür war jedoch gegenüber dem Anschaffungspreis des Fertigteils enorm ;-)

Ein weiteres Problem bei den SD Karten ist die Initialisierung. Schafft man es nicht das ethersex in einer bestimmten Zeit zu syncen, so fällt die Karte in den normalen (nicht den SD) Betriebsmodus und kann vom esex nicht mehr angesprochen werden. Eine Lösung dafür ist, dass man der Karte eine Steuerbare Stromversorgung gibt, damit das esex die Karte selbst du einem Neustart überreden kann. Dazu definiert man im Pinning nur den Pin

   pin(SD_READER_POWERON, PB3, OUTPUT)

Und steuert damit die Stromversorgung der Karte. Zum Beispiel indem man die GND Leitung der Karte mittels eines N-Kanal Mosfets, dessen Gate am PB3 (im Beispiel) hängt. Das resetten macht natürlich nur Sinn, wenn Read Timeout und SD Ping Read eingeschaltet ist. Dann mault er im debug log zwar erstmal dass die Karte ne MMC ist und er überhaupt nit mit ihr mag, aber nach ein paar Versuchen geht's dann doch.

Welcher Port

Angeschlossen wird die Karte an das SPI interface. Für ethersex muss dann nur das Chipselect eingestellt werden:

Hier dazu mal das Beispiel aus der pinning/hardware/radig_web.m4

/* port the sd-reader CS is attached to */
pin(SPI_CS_SD_READER, PB1, OUTPUT)

Ethersex Einstellung

In der menuconfig folgendes einstellen

General
  => VFS
   => SD/MMC-Card Access

Dateisystem auf der SD-Karte

FAT16

Um ein FAT16 auf eine SD-Karte zu bringen ist folgender Befehl, natuerlich auf das richtige Device in /dev nötig

mkfs -t msdos /dev/sdd1

SD-Karte Schaltplan

Hier findet man einen Schaltplan und Software zur weiterentwicklung.

http://www.roland-riegel.de/sd-reader/index.html

Sd-adapter.jpg Sd-avr-net-io.jpg

SD-mini-Adapter auf lochraster.

SD-Karte (mini-SD) am AVR-NET-IO wie beschrieben in obenstehendem URL.

Am J11 liegt in mitten PB1. Am ISP Buchse ist Pin 3 frei.

Draht loeten zwischen J11 (mitten) und pin3 ISP-Buchse. (siehe Bild)

In pinning/hardware/netio.m4 sollte folgendes stehen.

/* port the sd-reader CS is attached to */
pin(SPI_CS_SD_READER, PB1, OUTPUT)

(PB1 statt PB2)

Vorsicht - Ein Adapter leidet schnell an Wackelkontakten. Und er ist mechanisch weniger stabil.


SD Karte und Control6

Um zum Beispiel eine Logging Funktion (Z.B für Temperaturen) mittels Control6 zu implementieren, reicht folgendes

THREAD(logging)
  static counter = 0;
  VFS_LOG("log", "data: %d\n", counter++);
  WAIT(5);
THREAD_END(logging)

ON STARTUP DO
  THREAD_START(logging);
END

Dies inkrementiert alle 5 Sekunden einen Counter und hängt eine Zeile an die Datei "log" an.

I/O-Zugriffe von Webseiten auf der SD-Karte

Um von HTML-Seiten auf der SD-Karte Zugriff auf die I/O-Ports zu erhalten, muss man ein Javascript mit den entsprechenden Funktionen im embed-Verzeichnis ablegen und VFS File Inlining unter General-->VFS einschalten. Nun kann man diese .js-Datei in seinem HTML-Dokumenten einfach einbinden (<script id="HardwareFunctions" src="hwa.js" />) und die Funktionen nutzen. (Die Funktions-Skripte sind bei der Beispiel-Website enthalten.)


Fehlersuche/Behebung

Der Server antwortet sehr langsam, nur manchmal oder gar nicht

Überprüfen Sie, ob die Stromversorgung der SD-Karte stabil ist. 10µF und 100nF sind zwischen den Stromversorgungspins der Karte für einen sicheren Betrieb erforderlich.

Dateien werden nicht übertragen

Dieser Fehler tritt vor allem bei eingebundenen Dokumenten (Stylesheets/...) auf bzw. wenn mehrere Dateien gleichzeitig geladen werden sollen.
Ändern Sie den Wert von USE_DYNAMIC_MEMORY (Zeile 42) in der Datei "hardware/storage/sd_reader/sd-reader_config.h" auf 1.

Die Style-Sheets werden nicht gelesen

Löschen Sie den Header (<!DOCTYPE ...) in der HTML-Datei und versuchen sie es erneut.

Die Dokumente werden teils falsch dargestellt (Bild als Text)

Aktivieren Sie in menuconfig Applications-->Webserver-->MIME-Type detection.

Der Server hängt sich beim Start auf

  • Wechseln/Entfernen Sie die SD-Karte
  • Stellen Sie sicher, dass die Karte mit FAT (msdos) formatiert ist.

Tipps zur Ursachenfindung

Aktivieren Sie in menuconfig General Setup-->Enable Debugging und unter Applications-->HTTP-Server-->HTTPD (Debugging flags)

Fehlermeldungen über RS232 (Debug)

sd_reader: fat_open_file: No slot in fat_file_handle available. ==> #Dateien werden nicht übertragen