SD-Karte: Unterschied zwischen den Versionen
Habo (Diskussion | Beiträge) |
|||
(23 dazwischenliegende Versionen von 8 Benutzern werden nicht angezeigt) | |||
Zeile 2: | Zeile 2: | ||
− | |||
+ | === Anschlussbelegung der SD-Karte === | ||
− | + | [[Bild: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:'''<br> | ||
+ | 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.<br> | ||
+ | ''[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. <br> | ||
+ | Man kann auch alte Floppy-Kabel als günstigen Steckverbinder benutzen. Beispiel: [http://uanr.com/sdfloppy/ Link]<br> | ||
+ | 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).<br> | ||
+ | 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:<br> | ||
+ | [http://www.shop.display3000.com/wichtiges-zubehoer/experimentierplatinen/sd-speicherkartenplatine.html Link]<br> | ||
+ | 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 | ||
+ | |||
+ | [[bild:sd-adapter.jpg|400px]] [[bild:sd-avr-net-io.jpg|400px]] | ||
+ | |||
+ | 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 | ||
+ | |||
+ | <pre> | ||
+ | THREAD(logging) | ||
+ | static counter = 0; | ||
+ | VFS_LOG("log", "data: %d\n", counter++); | ||
+ | WAIT(5); | ||
+ | THREAD_END(logging) | ||
+ | |||
+ | ON STARTUP DO | ||
+ | THREAD_START(logging); | ||
+ | END | ||
+ | </pre> | ||
+ | |||
+ | 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.<br> | ||
+ | Ä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]] | ||
[[Category:Ethersex]] | [[Category:Ethersex]] | ||
[[Category:Hardware]] | [[Category:Hardware]] | ||
+ | [[Category:SD-Karte]] | ||
+ | [[Category:Control6]] |
Aktuelle Version vom 14. Oktober 2010, 15:14 Uhr
Inhaltsverzeichnis
- 1 SD-Karten einbinden
- 2 SD-Karte Schaltplan
- 3 SD Karte und Control6
- 4 I/O-Zugriffe von Webseiten auf der SD-Karte
- 5 Fehlersuche/Behebung
- 5.1 Der Server antwortet sehr langsam, nur manchmal oder gar nicht
- 5.2 Dateien werden nicht übertragen
- 5.3 Die Style-Sheets werden nicht gelesen
- 5.4 Die Dokumente werden teils falsch dargestellt (Bild als Text)
- 5.5 Der Server hängt sich beim Start auf
- 5.6 Tipps zur Ursachenfindung
- 5.7 Fehlermeldungen über RS232 (Debug)
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.
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