SD-Karten
FLASH-Speicherkarten sind in verschiedenen Formaten aus heutigen Systemen kaum weg zu denken. Die am häufigsten verwendeten Kartentypen sind SD und mikroSD.
Als Schnittstellenspezifikation gibt es mehrere Standards die durch die verschiedenen SD-Karten unterstützt werden. Das ursprüngliche einfache SPI-Protokoll wird durch die meisten Karten nach wie vor unterstützt. Das neuere SDIO-Interface wird von 8-Bit AVR Controllern nicht in Hardware unterstützt. Es liegt also nahe die SD-Karten mit SPI anzusprechen. Die PEC Bibliotheken bieten für SPI leistungsfähige Treiberklassen an.
Des weiteren sollten externe Speichermedien mit einem Dateisystem versehen werden. Für die meisten Anwendungsfälle in eingebetteten Systemen mit 8-Bit Controllern reicht das gute alte FAT-Dateisystem absolut aus. Mit FAT16 können Speicherkarten mit bis zu 2GB verwalten. Auch für ein FAT-Dateisystem liegen entsprechende Treiberpaket und Klassen im PEC Framework vor.
Die Treiberklassen für FAT und SPI werden im Treiberpaket für die SD-Karten benutzt. Hier liegen hoch entwickelte SD-Karten Treiberklassen vor.
myAVR Hardware mit SD-Karten
Als fertige Hardwarelösungen mit SD-Karten sind im myAVR-Shop verschieden Module verfügbar. Dieses Kapitel werden wir mit einem myAVR MK3 PLUS bearbeiten. Die SD-Karte ist hier als Option auf der myAVR Stamp MK3 PLUS verfügbar. Ein weiteres Zielsystem in dem die MK3-Stamp verwendet wird ist das mySmartControl MK3.
Alle Vorgehensweisen und Lösungswege für die Anwendung von SD-Karten lassen sich auf auf die Ethernet-Produkte von myAVR anwenden. Das sind das myEthernet 64K und myEthernet 128K.
Für den etwas professionelleren Anwender gibt es noch Ethernetlösungen für den Einbau in Schaltschränken in Hutschienenmontage. Das ist das SimEthernet.
Firmwarelösungen auf der Basis des PEC-Framework werden für die Ethernetprodukte im entsprechenden Abschnitt näher behandelt.
Anwendungsbeispiel
Bevor Sie beginnen, benötigen Sie ein neues Klassendiagramm. Dazu müssen Sie ggf. zurück in die oberste Ebene gehen (rechte Maustaste / nach oben oder einfach Taste ESC). Dort legen Sie ein neues Klassendiagramm an. Beachten Sie, dass die Hardware jetzt ein MK3-Board mit einem ATmega2650 und 16Mhz Taktrate ist und entsprechend einzustellen ist. Zur Erinnerung:
<html><iframe width=„640“ height=„480“ src=„https://www.youtube.com/embed/falkps_b8nU“ frameborder=„0“ allowfullscreen></iframe></html>
Es soll für den Betrieb des eingebetteten Systems ein Protokolldatei „log.txt“ a8uf der SD-Karte erzeugt werden. Diese wird bei jedem Systemstart neu erzeugt und geschrieben. Pro Sekunde soll ein Eintrag in die Datei erfolgen. Da wir das MK3 Board zur Verfügung haben, können wir Statusmeldungen auf dem Grafikdisplay ausgeben. Bei anderen Systemen können diese per UART an eine PC-Konsole gesendet werden.
Wir benötigen neben der Display-Instanz einen SPI-Bus und als SPI-Device die SD-Karten-Instanz. Erstellen sie folgendes Klassenmodell:
Beachten Sie, dass bevor die SD-Karte benutzt werden kann die Zuordnung zum verwendeten SPI-Bus nötig ist und das Dateisystem hochgefahren werden muss (mounten).
Controller::onStart()
// boot sequence after start SysTik display.setPos(0,0); display.write("Start, "); sdCard.connect(spiBus); // Devive mit dem Bus verbinden !!! display.write("Mount, "); sdCard.mount(0); // Dateisystem hochfahren display.write("Open, "); if(sdCard.logDatei.open("log.txt",false,true)) { display.setPos(0,8); display.write("schreibe in Logdatei ..."); sdCard.logDatei.write("Systemstart\r\n"); sdCard.logDatei.write("Logdatei zurückgesetzt\r\n"); sdCard.logDatei.write("----------------------\r\n"); sdCard.logDatei.close(); display.setPos(0,16); display.write("Datei geschlossen."); } else { display.setPos(0,8); display.write("Fehler! "); }
Wenn Sie die Zeile richtig eingegeben und das Modell korrekt erstellt haben, können Sie aus dem Klassendiagramm, wie gehabt, den Quellcode generieren, diesen übersetzen und auf den Controller übertragen. Das erfolgt über das Aktionsmenü in der Objektbibliothek. Wählen Sie dort den Menüpunkt Erstellen, Brennen & Ausführen. Testen Sie die Anwendung.
Wer sich die Treiberklassen für das SPI genauer angesehen hat wird feststellen, dass es auch eine Treiberklasse gibt die nicht auf eine entsprechende SPI-Peripherie in der Hardware angewiesen ist. Mit dem Soft-SPI Treiber können Sie eine SD-Karte an beliebige Pins hängen. Hier die Soft-SPI Lösung für das MK3 Board. Beachten Sie dazu den Schaltplan der MK3 Stamp.
Die initialisierung des SPI-Leitungen muss an geeigneter Stelle erfolgen. In dieser Lösung zum Beispiel im Event onStart der Klasse SpiBus.
SpiBus::onStart()
spiMiso.config(PORTB,BIT3); spiMosi.config(PORTB,BIT2); spiSck.config(PORTB,BIT1);
Als nächstes noch die Erweiterunen für das protokollieren des Sekundenereignisses.
Controller::onEvent1s()
if(sdCard.logDatei.open("log.txt",false,false)) { display.setPos(0,24); display.write("schreibe Evebnt 1s ..."); sdCard.logDatei.write("Event 1s\r\n"); sdCard.logDatei.close(); display.setPos(0,32); display.write("Datei geschlossen."); } else { display.setPos(0,24); display.write("Fehler bei Event 1s! "); }
Videozusammenfassung
Und hier diesen Abschnitt als kurze Videozusammenfassung.
<html><iframe width=„640“ height=„480“ src=„https://www.youtube.com/embed/OOP6eskhwR4“ frameborder=„0“ allowfullscreen></iframe></html>
Nächstes Thema
- Ethernet (nur über eine SiSy-Lizenz verfügbar)