SD-Karte
Inhaltsverzeichnis
SD-Karten einbinden
Anschlussbelegung der SD-Karte
- 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-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.