Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
sdio [2017/03/17 18:00] huwaldtsdio [2021/01/11 18:08] (aktuell) – [Realisierung] huwi
Zeile 11: Zeile 11:
 Legen Sie ein neues Klassendiagramm an, wählen Sie die Sprache ARM C++ und stellen Sie die Hardware (STM32F407) ein. Beim Öffnen des Diagramms (rechte Maustaste, nach unten) laden Sie aus dem SiSy LibStore die Diagrammvorlage //Application Grundgerüst für PEC Anwendungen (XMC, STM32, AVR).// Weisen Sie das Treiberpaket für STM32F4 zu.  Legen Sie ein neues Klassendiagramm an, wählen Sie die Sprache ARM C++ und stellen Sie die Hardware (STM32F407) ein. Beim Öffnen des Diagramms (rechte Maustaste, nach unten) laden Sie aus dem SiSy LibStore die Diagrammvorlage //Application Grundgerüst für PEC Anwendungen (XMC, STM32, AVR).// Weisen Sie das Treiberpaket für STM32F4 zu. 
  
-{{:neueskldsdkarte.png?390|}} . {{:umlprojekt14gg.jpg?325|}}+>{{:neueskldsdkarte.png?390|}} . {{:umlprojekt14gg.jpg?325|}}
  
 ===== Lösungsansatz ===== ===== Lösungsansatz =====
 Wenn wir im vorhandenen //Framework// stöbern finden wir bereits fertige Klassen, um Dateien auf einer SD-Karte zu speichern.  Wenn wir im vorhandenen //Framework// stöbern finden wir bereits fertige Klassen, um Dateien auf einer SD-Karte zu speichern. 
  
->>><html><iframe width="640" height="400" src="https://www.youtube.com/embed/IDQAxS5fWqg" frameborder="0" allowfullscreen></iframe></html>+><html><iframe width="640" height="400" src="https://www.youtube.com/embed/IDQAxS5fWqg" frameborder="0" allowfullscreen></iframe></html>
  
 >{{:filesystem.jpg?600|}} >{{:filesystem.jpg?600|}}
Zeile 24: Zeile 24:
 Die ausgewählte Lösung für ein Dateisystem auf SD-Karte bietet uns ein schmales Interface zum Umgang mit unserer µSD-Karte. Von besonderem Interesse sind für uns die Klasse //PecSdCardSpi// selbst und die Klasse //File//. //PecSdCardSpi// ist abgeleitet von //Volume//. Das //Volume// wird intern durch einen //VolumeManager// verwaltet. Das geht uns eigentlich als Anwendungsentwickler solange nichts an, wie wir nur eine SD-Karte verwenden. Die SD-Karte meldet sich beim Initialisieren selbständig beim //VolumeManager// an. Die hier vorliegende Klasse //PecSdCardSpi// bildet ein FAT-Dateisystem ab und kann SD-Karten bis zu 1 GB verwalten. Die eigentliche Dateiarbeit erledigen die Klassen //FileFind// und //File//. Die ausgewählte Lösung für ein Dateisystem auf SD-Karte bietet uns ein schmales Interface zum Umgang mit unserer µSD-Karte. Von besonderem Interesse sind für uns die Klasse //PecSdCardSpi// selbst und die Klasse //File//. //PecSdCardSpi// ist abgeleitet von //Volume//. Das //Volume// wird intern durch einen //VolumeManager// verwaltet. Das geht uns eigentlich als Anwendungsentwickler solange nichts an, wie wir nur eine SD-Karte verwenden. Die SD-Karte meldet sich beim Initialisieren selbständig beim //VolumeManager// an. Die hier vorliegende Klasse //PecSdCardSpi// bildet ein FAT-Dateisystem ab und kann SD-Karten bis zu 1 GB verwalten. Die eigentliche Dateiarbeit erledigen die Klassen //FileFind// und //File//.
  
->>>{{:filefind.jpg?200|}}   {{:file.jpg?250|}}+>{{:filefind.jpg?200|}}   {{:file.jpg?250|}}
  
 Wir müssen eine Datei **anlegen** oder **finden**, können diese dann **öffen**, darin schreiben und zum Schluss auch wieder **schließen**. All das bieten uns diese Klassen. Jetzt bleibt nur noch die Frage wo wir die SD-Karte an unseren Controller anschließen. Der STM32F4 besitzt für den physischen Zugriff auf Speicherkarten einen speziellen Baustein //**SDIO**//. Diese Verbindung brauchen wir auf unserem Zusatzboard nicht mit Kabeln patchen.  Wir müssen eine Datei **anlegen** oder **finden**, können diese dann **öffen**, darin schreiben und zum Schluss auch wieder **schließen**. All das bieten uns diese Klassen. Jetzt bleibt nur noch die Frage wo wir die SD-Karte an unseren Controller anschließen. Der STM32F4 besitzt für den physischen Zugriff auf Speicherkarten einen speziellen Baustein //**SDIO**//. Diese Verbindung brauchen wir auf unserem Zusatzboard nicht mit Kabeln patchen. 
Zeile 36: Zeile 36:
 >{{:beispielsd1.jpg?750|}} >{{:beispielsd1.jpg?750|}}
  
->>>**//Controller::onStart://** +>**//Controller::onStart://** 
->>><code c>+><code c>
 // µSD-Karte initialisieren // µSD-Karte initialisieren
 // Baudrate für das Terminal einstellen // Baudrate für das Terminal einstellen
Zeile 47: Zeile 47:
 Zur Abwechslung binden wir die gewünschte Baudrate für unsere UART-Übertragung nicht als Template an, sondern initialisieren diese in der Startsequenz. Der Einfachheit halber legen wir unsere Datei erst mal in das Wurzelverzeichnis der Speicherkarte. Achten Sie darauf, dass Ihre Speicherkarte auch als [[http://de.wikipedia.org/wiki/File_Allocation_Table|FAT16]] formatiert ist. Zur Abwechslung binden wir die gewünschte Baudrate für unsere UART-Übertragung nicht als Template an, sondern initialisieren diese in der Startsequenz. Der Einfachheit halber legen wir unsere Datei erst mal in das Wurzelverzeichnis der Speicherkarte. Achten Sie darauf, dass Ihre Speicherkarte auch als [[http://de.wikipedia.org/wiki/File_Allocation_Table|FAT16]] formatiert ist.
  
->>>**//Controller::onWork://** +>**//Controller::onWork://** 
->>><code c>+><code c>
 // Analogwert erfassen // Analogwert erfassen
 // erfassten Wert als Textzeile für die CSV-Datei formatieren // erfassten Wert als Textzeile für die CSV-Datei formatieren
Zeile 61: Zeile 61:
 Wir schauen uns den Entwurf nochmal in Ruhe an und realisieren diesen dann Schritt für Schritt. Zur Sicherheit ergänzen wir Protokollausgaben über die UART. Wir schauen uns den Entwurf nochmal in Ruhe an und realisieren diesen dann Schritt für Schritt. Zur Sicherheit ergänzen wir Protokollausgaben über die UART.
  
->>>**Controller::onStart:** +>**Controller::onStart:** 
->>><code c>+><code c>
 sdCard.mount(); sdCard.mount();
-terminal.config(9600);+FileFind ff;
  
-if(!sdCard.findFirst("/log.csv"))+if(!ff.findFirst("/log.csv"))
 { {
  if (sdCard.logfile.create("/log.csv"))  if (sdCard.logfile.create("/log.csv"))
- terminal.sendString("\nDatei log.csv erzeugt!");+ terminal.writeString("\nDatei log.csv erzeugt!");
  else  else
- terminal.sendString("\nFehler beim Anlegen der Datei log.csv!");+ terminal.writeString("\nFehler beim Anlegen der Datei log.csv!");
 } }
 else else
 { {
- terminal.sendString("\nDatei log.csv gefunden!"); + terminal.writeString("\nDatei log.csv gefunden!");
 } }
 </code> </code>
  
->>>{{:seqsdio1.jpg|}}+>{{:seqsdio1.jpg|}}
  
->>>**Controller::onWork:** +>**Controller::onWork:** 
->>><code c>+><code c>
 String txt; String txt;
 int wert; int wert;
Zeile 91: Zeile 91:
  sdCard.logfile.append(txt);  sdCard.logfile.append(txt);
  sdCard.logfile.close();  sdCard.logfile.close();
- terminal.sendString("Daten angefügt="); + terminal.writeString("Daten angefügt="); 
- terminal.sendString(txt);+ terminal.writeString(txt);
 } }
 else else
 { {
- terminal.sendString("\nDatei konnte nicht geöffnet werden");+ terminal.writeString("\nDatei konnte nicht geöffnet werden");
 } }
 waitMs(1000); waitMs(1000);
 </code> </code>
  
->>>{{:seqsdio2.jpg|}}+>{{:seqsdio2.jpg|}}
  
 ===== Test ===== ===== Test =====
Zeile 111: Zeile 111:
 Stellen Sie im ControlCenter die Parameter für die Verbindung mit dem Board ein. Achten Sie auf den richtigen COM-Port und die korrekte Baudrate. Beachten Sie, dass der Controller mit korrekt formatierter SD-Karte eingelegt, mindestens einen Startzyklus (ggf. manuelles RESET) durchlaufen muss, um die Datei "log.csv" anzulegen. Beachten Sie die Verbindungen zur USB-UART-Bridge und zum Potentiometer. Stellen Sie im ControlCenter die Parameter für die Verbindung mit dem Board ein. Achten Sie auf den richtigen COM-Port und die korrekte Baudrate. Beachten Sie, dass der Controller mit korrekt formatierter SD-Karte eingelegt, mindestens einen Startzyklus (ggf. manuelles RESET) durchlaufen muss, um die Datei "log.csv" anzulegen. Beachten Sie die Verbindungen zur USB-UART-Bridge und zum Potentiometer.
  
->>>{{:analogdaten.png?310|}} {{:ccsd.jpg?320|}}+>{{:analogdaten.png?310|}} {{:ccsd.jpg?320|}}
  
 Nach der Aufzeichnung der Daten können Sie die SD-Karte mit einem entsprechenden [[http://shop.myavr.de/Zubeh%C3%B6r/MicroSD-Card%20zu%20USB%20Adapter.htm?sp=article.sp.php&artID=100071|Adapter]] über den PC auslesen und in einer Tabellenkalkulation auswerten. Nach der Aufzeichnung der Daten können Sie die SD-Karte mit einem entsprechenden [[http://shop.myavr.de/Zubeh%C3%B6r/MicroSD-Card%20zu%20USB%20Adapter.htm?sp=article.sp.php&artID=100071|Adapter]] über den PC auslesen und in einer Tabellenkalkulation auswerten.
Zeile 127: Zeile 127:
 Und natürlich diesen Abschnitt wiederum als Videozusammenfassung. Und natürlich diesen Abschnitt wiederum als Videozusammenfassung.
  
->>><html><iframe width="640" height="400" src="https://www.youtube.com/embed/RBpehoLUwxU" frameborder="0" allowfullscreen></iframe></html>+><html><iframe width="640" height="400" src="https://www.youtube.com/embed/RBpehoLUwxU" frameborder="0" allowfullscreen></iframe></html>
  
 ====== Übung ====== ====== Übung ======