Difference between revisions of "SD CARD (Deutsch)"

From Ethersex_Wiki
Jump to: navigation, search
(Control6)
Line 64: Line 64:
 
== [[Control6_(Deutsch)|Control6]] ==
 
== [[Control6_(Deutsch)|Control6]] ==
  
Hier vielleicht ein kleines Beispiel, das die Daten per VFS_LOG in die Datei "temp.log" schreibt sobald sich die Temperatur um mehr als ein Grad zur letzten Messung verändert hat.
+
Das folgende Beispiel scrheibt Datum, Uhrzeit und Temperatur per VFS_LOG in die Datei "temp.log" schreibt sobald sich die Temperatur um mehr als ein Grad zur letzten Messung verändert hat. Für Datum und Uhrzeit muss CLOCK_SUPPORT aktiviert sein.
  
 
<pre>
 
<pre>
Line 79: Line 79:
 
     uint8_t sign = Temperatur<0;
 
     uint8_t sign = Temperatur<0;
 
     div_t res = div(abs(Temperatur),10);
 
     div_t res = div(abs(Temperatur),10);
     VFS_LOG("temp.log", "temperature changed %S%d.%d",sign?PSTR("-"):PSTR(""),res.quot,res.rem)
+
     VFS_LOG("temp.log", "%2d.%2d%2d %2d:%02d %S%d.%d", CLOCK_DAY, CLOCK_MONTH, CLOCK_YEAR, CLOCK_HOUR, CLOCK_MIN, CLOCK_SEC, sign?PSTR("-"):PSTR(""),res.quot,res.rem)
 
     Temperatur_alt = Temperatur;
 
     Temperatur_alt = Temperatur;
 
   END
 
   END

Revision as of 14:18, 6 June 2013

SD/MMC-Card Reader
Status
Stable
menuconfig I/O->SD/MMC-Card Reader
Pinning yes
Ecmd yes
Control6 yes
Code https://github.com/ethersex/ethersex/tree/master/hardware/storage/sd_reader

Das Modul basiert auf Roland Riegels MMC/SD/SDHC card library ergänzt um die Anbindung an das Ethersex Virtual File System.

Anschluss

SD-Card Adapter Schaltung
SD-Card Adapter Aufbau

MMC- und SD-Speicherkarten lassen sich im SPI-Modus relativ einfach mit einem Mikrocontroller ansteuern. Prinzipiell gibt es zwischen SD-Card und MMC nicht viele Unterschiede, allerdings sind SD-Karten weiter verbreitet, in der Regel schneller als MMCs, und haben ein besser implementiertes SPI-Interface. Es existieren diverse Varianten (miniSD, microSD), die zur normalen SD-Card weitgehend kompatibel sind.

Die Karte liest das anliegende Datenbit mit der steigenden Taktflanke ein, als SPI-Modi eignen sich somit Mode 0 und Mode 3. Bei MMCs ist der SPI-Modus nicht genau spezifiziert, somit kommt es durchaus mal vor, dass der SPI-Modus je nach Karte unterschiedlich gewählt werden muss.

SD-Karten werden typischerweise mit 3,3V und Microcontroller oft mit 5V betrieben. Das erzwingt eine Pegelanpassung, weil die Eingangsleitungen zur SD-Karte nicht 5V tolerant sind. Von einer Pegelanpassung mit Widerständen wird abgeraten.

Neben den Leitungen, die zur SD-Karte führen, gibt es noch zwei weitere Leitungen, die auf den SD-Karten-Sockel führen: nämlich die card-detect Leitung und die write-protect Leitung. Sie dienen dazu, wie die Namen schon sagen, das physische Vorhandensein einer Karte im SD-Sockel und die Stellung des Schreibschutzschiebers zu signalisieren.

Wird Hardware-SPI verwendet, muss nur die chip select Leitung konfiguriert werden. Die card-detect Leitung und die write-protect Leitung sind optional.

 ifdef(`conf_SD_READER', `
   /* port the sd-reader CS is attached to */
   pin(SPI_CS_SD_READER, PB2, OUTPUT)
   /* uncomment and edit this if you have connected the CD (card detect) signal */
   pin(SD_READER_AVAILABLE, PD4, INPUT)
   /* uncomment and edit this if you have connected the WP (write protected) signal */
   pin(SD_READER_WR_PROTECT, PD5, INPUT)
 ')

Konfiguration

 | |              I/O  --->                                              | |
 ...
 | |        [*] SD/MMC-Card Reader  --->                                 | |
 ...
 | |                  [ ] SDHC support                                   | |
 | |                  [*] VFAT LFN support                               | |
 | |                  [ ] Read-only mode                                 | |
 | |                  [*] Use read-timeout                               | |
 | |                  [*] Ping-read SD card every 10s                    | |
 | |                  --- Debugging Flags                                | |
 | |                  [ ] SD-Reader                                      | |
 
 
 | |              General Setup  --->                                    | |
 ...
 | |       [*] VFS (Virtual File System) support  --->                   | |
 ...
 | |                   [*] SD/MMC-Card Filesystem                        | |

ECMD

Control6

Das folgende Beispiel scrheibt Datum, Uhrzeit und Temperatur per VFS_LOG in die Datei "temp.log" schreibt sobald sich die Temperatur um mehr als ein Grad zur letzten Messung verändert hat. Für Datum und Uhrzeit muss CLOCK_SUPPORT aktiviert sein.

#include <stdlib.h>

int16_t Temperatur;
int16_t Temperatur_alt;

CONTROL_START

THREAD(read_temp)
  Temperatur = ONEWIRE_GET(10d85594010800eb);
  ON abs(Temperatur-Temperatur_alt)>10 DO
    uint8_t sign = Temperatur<0;
    div_t res = div(abs(Temperatur),10);
    VFS_LOG("temp.log", "%2d.%2d%2d %2d:%02d %S%d.%d", CLOCK_DAY, CLOCK_MONTH, CLOCK_YEAR, CLOCK_HOUR, CLOCK_MIN, CLOCK_SEC, sign?PSTR("-"):PSTR(""),res.quot,res.rem)
    Temperatur_alt = Temperatur;
  END
  WAIT(15);
THREAD_END(read_temp)

ON STARTUP DO
  Temperatur = Temperatur_alt = 0;
  THREAD_START(read_temp);
END

CONTROL_END