SD-Karte

Aus Ethersex_Wiki
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

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.