AdvaBoard RPi1 - Anleitung
Stand: | 2015-01-09 |
---|
- Produkt:
- AdvaBoard RPi1
- Produktnummer:
- 1160
- Produktseite:
- http://www.advamation.de/produkte/embeddedpc/advaboard_rpi1/
Inhalt
- 1 Hinweise
- 2 Lieferumfang
- 3 Kontaktinformationen / Support
- 4 Übersicht
- 5 Inbetriebnahme
- 6 Hardware-Konzept
- 7 Software
- 8 Funktionsbeschreibungen
- 8.1 Stromversorgung
- 8.2 Batterie
- 8.3 Initialisierung
- 8.4 Systeminformationen
- 8.5 LED
- 8.6 Power-Management
- 8.7 Echtzeituhr
- 8.8 Digital-/Analog-I/O
- 8.9 E-SPI
- 8.10 I2C / SMBus
- 8.11 RS-485 / RS-232
- 8.12 Raspberry Pi
- 8.13 TFT-Display / Touchscreen
- 8.14 JTAG/C2-Ausgang
- 8.15 EEPROM
- 8.16 Ereignisgesteuerte Automatisierung
- 8.17 Locking / gleichzeitiger Zugriff mehrerer Programme
1 Hinweise
1.1 Bestimmungsgemäße Verwendung
Das AdvaBoard RPi1 ist eine Erweiterungsplatine für den Raspberry Pi. Es handelt sich dabei um ein elektronisches Produkt, dessen Verwendung gewisses Fachwissen voraussetzt, und das deshalb nur von sachkundigen Personen eingesetzt werden darf.
Beim Anschluss anderer Geräte an das AdvaBoard RPi1 ist unbedingt darauf zu achten, dass diese zu den Spezifikationen (z.B. max. Spannungen, max. Ströme, Steckerbelegungen usw.) des AdvaBoard RPi1 passen, und die Hinweise zu den entsprechenden Schnittstellen beachtet werden. Insbesondere dürfen ohne Rücksprache mit uns an die RPi-Schnittstelle nur ein Raspberry Pi, und an die TFT-Display-Schnittstelle nur die von uns dafür vertriebenen Displays angeschlossen werden. Als Stromversorgung dürfen nur geregelte Netzteile mit 5V DC verwendet werden.
Lesen Sie vor der Benutzung diese Anleitung sowie die weitere Dokumentation sorgfältig durch, bewahren Sie sie auf und reichen Sie das Produkt nur zusammen mit dieser Anleitung an dritte Personen weiter.
1.2 Sicherheitshinweise
Bei Schäden, die durch Nichtbeachten dieser Anleitung verursacht werden, erlischt die Gewährleistung/Garantie! Für Folgeschäden übernehmen wir keine Haftung!
Bei Sach- oder Personenschäden, die durch unsachgemäße Handhabung oder Nichtbeachten der Sicherheitshinweise verursacht werden, übernehmen wir keine Haftung. In solchen Fällen erlischt die Gewährleistung/Garantie.
Trotz sorgfältiger Arbeit kann leider nicht ausgeschlossen werden, dass das Produkt, die Software oder die Dokumentation Fehler enthält. Anwender sollten daher in jedem Fall überprüfen, ob das Produkt für ihre Anwendung geeignet ist und in ihrer Anwendung korrekt funktioniert.
Für eventuelle Schäden, die durch fehlerhafte oder fehlende Information, Softwarefehler oder andere Fehler im Produkt verursacht werden, kann unabhängig von ihrer Ursache keine Haftung übernommen werden. Da wir zudem keinen Einfluss auf die Installation und Verwendung des Produkts haben, deckt die Gewährleistung nur das Produkt selbst ab.
Das AdvaBoard RPi1 darf nicht für Anwendungen eingesetzt werden, bei denen eine Fehlfunktion oder ein Produktversagen zu Personenschäden, Tod, relevanten Sach- oder Umweltschäden oder anderen schwerwiegenden Folgeschäden führen kann.
Soll das AdvaBoard RPi dennoch für einen derartigen Zweck verwendet (oder in ein anderes derartiges Produkt eingebaut) werden, so ist sicherzustellen, dass durch eine Fehlfunktion oder ein Produktversagen unseres Produkts keine derartigen Schäden auftreten können!
- Das AdvaBoard RPi1 ist ein elektronisches Produkt. Es darf deshalb nur von fachkundigen Personen eingesetzt werden, da bei unsachgemäßer Verwendung Schäden am Produkt und evtl. an damit verbundenen Geräten auftreten können. Es ist zudem stets auf entsprechenden ESD-Schutz zu achten.
- Das Produkt darf nicht extremen Temperaturen, starken Temperaturschwankungen, direktem Sonnenlicht, starken Erschütterungen, Feuchtigkeit, Nässe, Dämpfen, Schmutz, brennbaren Gasen oder übermäßiger mechanischer Beanspruchung ausgesetzt werden.
- Das Produkt darf nicht bzw. nur nach Rücksprache verndert oder umgebaut werden.
- Das Produkt ist kein Spielzeug und sollte außerhalb der Reichweite von Kindern aufbewahrt werden! Das Produkt und dessen Zubehör kann zudem verschluckbare Kleinteile beinhalten; bewahren Sie diese Teile unbedingt außerhalb der Reichweite von Kindern auf. Lassen Sie ebenso niemals Verpackungsmaterial unachtsam herumliegen, da insbesondere Plastikfolien für Kinder zu einem gefährlichen Spielzeug werden können. Es besteht Erstickungsgefahr!
- Wenn anzunehmen ist, dass ein gefahrloser Betrieb nicht mehr möglich ist, so ist das Produkt außer Betrieb zu setzen und gegen unbeabsichtigten Betrieb zu sichern. Dies ist insbesondere dann der Fall, wenn das Produkt sichtbare Beschädigungen aufweist.
- Sollten Sie Zweifel oder Fragen zum korrekten Gebrauch des Produkts oder bezüglich der Sicherheit haben, so wenden Sie sich bitte an uns oder an qualifiziertes Fachpersonal.
2 Lieferumfang
(zum Vergrößern anklicken)
AdvaBoard RPi1
1 Flachbandkabel:
- für Raspberry Pi B/A: 26-polig (Länge 3.5cm, 12cm oder andere), oder
- für Raspberry Pi B+/A+: 40-polig auf 26-polig (Länge 8cm, 12 cm oder andere)
optional: AdvaBoard RPi1-Zubehörset, bestehend aus:
(zum Vergrößern anklicken)
- Befestigungsset für einen Raspberry Pi Rev. 2
(2 Abstandsbolzen 18mm, 2 Muttern, 2 Schrauben) - Befestigungsset für das AdvaBoard RPi1 bzw. ein 3.2" TFT-Display
(4 Abstandsbolzen 12mm, 4 Muttern, 4 Schrauben) - Batteriehalter CR2032 inkl. Anschlusskabel (2pol.)
- Netzteil-Anschlusskabel (3pol., ca. 30cm)
- RS-485-Anschlusskabel (4pol., ca. 30cm)
- RS-232-TTL-Anschlusskabel (5pol., ca. 30cm)
- Befestigungsset für einen Raspberry Pi Rev. 2
optional: Befestigungskit für einen Raspberry Pi B+/A+, bestehend aus:
(zum Vergrößern anklicken)
- 1 Adapterplatte
- 4 Kunststoffschrauben M3, Länge 8mm
- 8 Kunststoffmuttern M3
- 4 Kunststoffschrauben M2.5
- 4 Kunststoff-Abstandshalter
3 Kontaktinformationen / Support
Sollten Sie Fragen oder Beanstandungen zum Produkt haben, bzw. Ihr Gerät einen Defekt aufweisen, so wenden Sie sich bitte an uns.
Bei Fragen bzw. Problemen, die Ihr Gerät betreffen, würden wir Sie bitten, uns die entsprechende Seriennummer mitzuteilen. Die Seriennummer finden Sie auf dem gelben Aufkleber auf dem Produkt. Zudem würden wir Sie bitten – falls möglich – die Ausgabe von sudo am_rpi_advaboard_tool -m info bei entsprechenden E-Mail-Anfragen dazuzuschreiben.
Bitte senden Sie Ihr Gerät nicht ohne Aufforderung an uns Anschrift. Viele Probleme können gelöst werden, ohne dass ein Versand erforderlich ist.
- E-Mail:
- support@advamation.de
- Mailinglisten:
- http://www.advamation.de/community/
- Webseite:
- http://www.advamation.de
- Anschrift:
- Advamation GmbH & Co. KG- Advamation -Südendstr. 186517 Wehringen
4 Übersicht
Das AdvaBoard RPi1 ist eine Erweiterungsplatine für den Raspberry Pi, die den Raspberry Pi zu einem universellen Steuerungsrechner aufwertet, und u.a. folgendes beinhaltet:
- TFT-Display-Schnittstelle
(für ein 3.2" (81mm) / 4.3" (109mm) / 5.0" (126mm) / 7.0" (176mm) TFT-Display inkl. Touchscreen) - Echtzeituhr (optional batteriegepuffert)
- erweiterte Schnittstellen (I2C, erweiterter SPI, Digital- und Analog-I/Os, RS-232, RS-485) auf getrennten Steckverbindern
- 5V-tolerante Ein-/Ausgänge (außer I2C)
- Power-Management / Batteriebetrieb
- Softwarebibliothek + Beispielprogramme
- Framebuffer- und Touchscreen-Treiber für Linux
- JTAG-/C2-Programmer
- optionale Peripherie: Sensoren, Erweiterungsplatinen, Displays, Automatisierungskomponenten (z.B. Motoren), Messtechnik, ...
Das AdvaBoard RPi1 kann damit zusammen mit einem Raspberry Pi z.B. als kleiner Industrie-PC, als Bedien- oder Anzeigegerät (zusammen mit einem TFT-Display), als Steuerung für unseren Automatisierungs-Baukasten, als Ausbildungsplatform usw. dienen.
Statt an einen Raspberry Pi kann das AdvaBoard RPi1 prinzipiell auch an andere Mini-Computer (z.B. Cubieboard), die entsprechende GPIOs zu Verfügung stellen, angeschlossen werden. Allerdings ist dann eine Anpassung der Linux-Software an den entsprechenden Mini-Computer notwendig.
4.1 Hardware
- Maße:
- Platinengröße: ca. 96.6mm × 64.8mm
- 2 Befestigungsbohrungen für den Raspberry Pi Rev. 2, Durchmesser 3.15mm
- 4 Befestigungsbohrungen in den 4 Ecken, Durchmesser 3.15mm, Abstand 85.4mm × 59.0mm
- weitere Maße: siehe Maßzeichnung (PDF)
- Steckverbinder:
Beschriftung Beschreibung +5V 5V-Netzteil-Anschluss I2C I2C-Schnittstelle ANALOG-/DIGITAL-I/O Analog- und Digital-I/Os E-SPI erweiterte SPI-Schnittstelle DISPLAY TFT-Display-Schnittstelle RPi Raspberry Pi-Anbindung RS232 TTL RS-232-Schnittstelle mit TTL-Pegeln RS485 RS-485-Schnittstelle BATT 3V-Batterie-Anschluss Masse-Anschluss zusätzlicher, niederohmiger Masse-Anschluss Die Details zu den einzelnen Steckverbindern finden Sie in den entsprechenden Abschnitten dieser Anleitung.
- Jumper / Steckbrücken:
RPi5V: Raspberry Pi-Stromversorgungs-Jumper
Dieser Jumper verbindet die AdvaBoard RPi1-Stromversorgung mit der Raspberry Pi-Stromversorgung, und überbrückt damit den Power-Schalter für den Raspberry Pi.Er muss immer gesteckt sein, wenn das AdvaBoard RPi1 vom Raspberry Pi mit Strom versorgt wird!
Er sollte nicht gesteckt sein, wenn das AdvaBoard RPi1 den Raspberry Pi mit Strom versorgt, und das AdvaBoard den Raspberry Pi ein-/ausschalten soll.
Zudem kann er verwendet werden, um bei fehlerhafter Power-Management-Konfiguration den Raspberry Pi wieder mit Strom zu versorgen, um dann über den Raspberry Pi die Konfiguration korrigieren zu können.
geschlossen Raspberry Pi-Stromversorgung und AdvaBoard-Stromversorgung verbunden offen Raspberry Pi-Stromversorgung von AdvaBoard-Stromversorgung getrennt
(=Raspberry Pi-Stromversorgung vom AdvaBoard aus schaltbar)TERM: RS-485-Terminator
Position Bedeutung links / entfernt RS-485-Terminator deaktiviert rechts / "1" RS-485-Terminator aktiviert PROGRAMMER: JTAG-/C2-Schnittstelle / Firmware-Update
Dieser Jumper ist nur für Firmware-Updates des AdvaBoard RPi1 notwendig. Im normalen Betrieb muss er sich entweder in der Aufbewahrungsposition befinden, oder komplett vom AdvaBoard RPi entfernt sein.Wird das TFT70-Display auf das AdvaBoard RPi1 gesteckt, so sollte dieser Jumper entfernt (und separat aufbewahrt) werden, da er sonst mit dem Display kollidiert.
Position Bedeutung links / entfernt Aufbewahrung mitte / "PROC" Firmware-Update Mikrocontroller rechts / "CPLD" Firmware-Update CPLD
- Seriennummer:
- Auf der Rückseite des AdvaBoard RPi1 befindet sich auf einem gelben Aufkleber die Seriennummer des AdvaBoard RPi1.
Das AdvaBoard RPi1, die TFT-Displays, der Raspberry Pi usw. enthalten höchst empfindliche IC-Chips. Um die Platinen und andere Komponenten vor Beschädigung durch statische Elektrizität (ESD) zu schützen, sollten Sie bei allen Arbeiten am AdvaBoard RPi1, TFT-Display, Raspberry Pi usw. einige Vorsichtsmaßnahmen beachten:
- Trennen Sie alle Komponenten vom Stromnetz, bevor Sie eine Komponente an- oder abstecken.
- Achten Sie auf entsprechenden ESD-Schutz, bevor Sie mit elektronischen Bauteilen arbeiten. Hierzu sollte ein geerdetes Schutzarmband angelegt werden.
- Fassen Sie die Platinen nur an den Rändern an, und berühren Sie möglichst nicht die IC-Chips und die Anschlüsse.
- Verwenden Sie immer eine stabile, antistatische, nichtleitende Unterlage für die Platinen.
4.2 Montage
AdvaBoard RPi1 Befestigungslöcher und Befestigungsset |
Das AdvaBoard RPi1 besitzt 6 Montagelöcher:
- 4 Löcher an den Ecken, z.B.
- zur Montage des AdvaBoards in einem Gehäuse oder auf einer Grundplatte
- zur direkten Befestigung des TFT32-Displays
- zur Befestigung anderer Displays mittels Adapter, bzw. zur Befestigung an einem TFT-Display-Einbaurahmen
- zur Befestigung eines Raspberry Pi B+/A+ (mittels Adapter)
- 2 Löcher passend zum Raspberry Pi-Modell B bzw. A, um einen Raspberry Pi B Rev. 2 (bzw. A) am AdvaBoard RPi1 zu befestigen
Die Löcher besitzen einen Durchmesser von ca. 3.1mm, die genauen Positionen
können der Maßzeichnung entnommen werden. Zur Befestigung sollten
M3 Kunststoffschrauben bzw. Kunststoff-Abstandsbolzen verwendet werden.
Werden stattdessen Metallschrauben verwendet, so müssen jeweils über und
unter der Platine zusätzliche Kunststoff-Beilagscheiben verwendet werden,
um Kurzschlüsse und Beschädigungen der Platinen zu verhindern.
Zudem ist auf ausreichende Abstände bzw. ausreichende Isolation zwischen
dem AdvaBoard RPi1, dem Raspberry Pi, einem evtl. Gehäuse usw. zu achten,
um Kurzschlüsse zu vermeiden.
Das AdvaBoard RPi1 kann sowohl an den Raspberry Pi-Modellen B und A, als auch (mit zusätzlichem Befestigungskit) an den neueren Modellen B+ und A+ befestigt werden.
Raspberry Pi B und AdvaBoard RPi1 | Raspberry Pi B+ und AdvaBoard RPi1 |
(zum Vergrößern anklicken) |
(zum Vergrößern anklicken) |
4.2.1 Montage eines Raspberry Pi B / A
Um einen Raspberry Pi B (bzw. A) am AdvaBoard RPi1 zu befestigen, wird folgendes Material benötigt (siehe Foto):
- AdvaBoard RPi1
- Raspberry Pi B Rev. 2 (bzw. A)
- Flachbandkabel 26-polig, 3.5cm
- aus dem AdvaBoard RPi1-Zubehörset:
- 2 Kunststoff-Abstandsbolzen M3, Länge 18mm
- 2 Kunststoff-Schrauben**, M3, Länge 6mm
- 2 Kunststoff-Muttern**, M3
Montage: erforderliches Material |
Zur Montage sind folgende Schritte notwendig (siehe Fotos):
- Abstandsbolzen in die Löcher des AdvaBoard RPi1 stecken und mit Muttern fixieren.
- Kabel am Raspberry Pi anstecken.
- Kunststoff-Schrauben durch die Löcher des Raspberry Pi stecken.
- Raspberry Pi so auf die Abstandsbolzen legen, dass die Schrauben in die Abstandsbolzen greifen; Raspberry Pi festschrauben.
- Kabel am AdvaBoard RPi1 anstecken.
Schritt 1 + 2: Abstandsbolzen befestigen, Kabel anstecken |
Schritt 3 + 4: Kunststoffschrauben einstecken und anziehen |
Schritt 5: Kabel anstecken |
AdvaBoard RPi1 mit montiertem Raspberry Pi B |
4.2.2 Montage eines Raspberry Pi B+ / A+
Um einem Raspberry Pi B+ (bzw. A+) am AdvaBoard RPi1 zu befestigen, wird folgendes Material benötigt (siehe Foto):
- AdvaBoard RPi1
- Raspberry Pi B+ (bzw. A+)
- Flachbandkabel 40-polig auf 26-polig, 8cm
- zusätzliches Befestigungskit:
- 1 Adapterplatte
- 4 Kunststoffschrauben M3, 8mm
- 8 Kunststoffmuttern M3
- 4 Kunststoffschrauben M2.5
- 4 Kunststoff-Abstandshalter
Mit den M3-Schrauben wird das AdvaBoard RPi1 an der Adapterplatte befestigt, mit den M2.5-Schrauben der Raspberry Pi B+ bzw. A+.
Montage: erforderliches Material |
Folgende Schritte sind notwendig (siehe Fotos):
M3-Schrauben von oben in die 4 Eck-Löcher des AdvaBoard RPi1 stecken und jeweils 1 Mutter aufschrauben. Die Muttern dienen im Folgenden als Abstandshalter.
Soll am AdvaBoard RPi1 zudem ein 3.2"-TFT-Display befestigt werden, so müssen statt der M3-Schrauben die 12mm-Abstandsbolzen aus dem Zubehörset verwendet werden.
Soll das AdvaBoard RPi1 an einem TFT-Einbaurahmen befestigt werden, so müssen die Muttern weggelassen, und stattdessen Kunststoffscheiben und die TFT*_MOUNT-Alu-Winkel aufgesteckt werden. Genauere Informationen hierzu finden sich in der TFT-Display-Einbaurahmen-Anleitung
Adapterplatte auf diese Schrauben legen. Hierbei auf die Ausrichtung der Adapterplatte achten (siehe Foto).
Adapterplatte mit 4 M3-Muttern am AdvaBoard RPi1 befestigen.
Raspberry Pi B+ (bzw. A+) auf die Adapterplatte legen, und nacheinander mit den M2.5-Schrauben und den Abstandshaltern an der Adapterplatte festschrauben (siehe Foto).
Kabel am Raspberry Pi und danach am AdvaBoard RPi1 anstecken.
Schritt 1: M3-Schrauben + Muttern am AdvaBoard RPi1 befestigen |
Schritt 2 + 3: Adapterplatte am AdvaBoard RPi1 befestigen |
Schritt 4: Raspberry Pi an der Adapterplatte befestigen |
Schritt 5: Kabel anstecken |
AdvaBoard RPi1 mit montiertem Raspberry Pi B+ |
4.2.3 Montage eines TFT-Displays
Das 3.2"-TFT-Display (TFT32) kann mit den Abstandsbolzen (12mm) des AdvaBoard RPi1-Zubehörsets direkt auf das AdvaBoard RPi1 aufgeschraubt werden. Hierzu werden die 4 12mm-Abstandsbolzen zunächst an den Ecken des AdvaBoard RPi1 befestigt, dann das TFT32-Display auf das AdvaBoard RPi1 aufgesteckt und anschließend verschraubt.
Raspberry Pi B + AdvaBoard RPi1 | Raspberry Pi B + AdvaBoard RPi1 + TFT32-Display |
Das AdvaBoard RPi1 kann ebenfalls mit entsprechenden Halterungen an anderen Displays bzw. TFT-Display-Einbaurahmen befestigt werden. Weitere Informationen hierzu finden sich in der TFT-Display-Einbaurahmen-Anleitung.
4.3 Raspberry Pi-Anschluss
Das AdvaBoard RPi1 wird mit einem 26-poligen Flachbandkabel an den Raspberry Pi angeschlossen. Dieses Kabel dient sowohl der Daten- als auch der Stromübertragung zwischen Raspberry Pi und AdvaBoard RPi1.
Dieses Kabel sollte aus technischen Gründen möglichst kurz gehalten werden.
- Raspberry Pi-Modelle B+ und A+:
Es wird ein Flachbandkabel mit einem 40-poligen und einem 26-poligen Steckverbinder verwendet. Der 40-polig Steckverbinder muss hierbei am Raspberry Pi, und der 26-polige Steckverbinder am AdvaBoard RPi1 angesteckt werden (siehe Foto). Pin 1 des Kabels (rot markiert) muss zum Rand des Raspberry Pi zeigen.
Die Standard-Kabellängen betragen hierbei:
- 8cm, falls das AdvaBoard RPi1 auf den Raspberry Pi B+/A+ montiert werden soll
- 12cm, falls das AdvaBoard RPi1 direkt neben den Raspberry Pi B+/A+ montiert werden soll
Verbindung zwischen Raspberry Pi B+ und AdvaBoard RPi1 - Raspberry Pi-Modelle B und A:
Die Standard-Kabellängen betragen hierbei:
- 3.5cm, falls das AdvaBoard RPi1 auf den Raspberry Pi B/A montiert werden soll
- 12cm, falls das AdvaBoard RPi1 direkt neben den Raspberry Pi B/A montiert werden soll
Hier wird ein 26-poliges Flachbandkabel mit zwei etwas unterschiedlichen Enden genutzt:
- Auf der einen Seite besitzt der Flachkabelstecker einen zusätzlichen "Bügel" als Zugentlastung; diese Seite sollte ans AdvaBoard RPi1 angeschlossen werden.
- Der Flachkabelstecker der anderen Seite besitzt keine Zugentlastung (da sonst der Stecker zu hoch wäre, um das AdvaBoard RPi1 auf dem Raspberry Pi zu montieren). Diese Seite sollte an den Raspberry Pi angeschlossen werden. Hierbei ist unbedingt auf richtige Polung zu achten! (Pin 1 zur Platinenaußenseite, "Nase" zur Platineninnenseite, siehe Bild)
Flachbandkabel-Enden: für Raspbery Pi (links), für AdvaBoard RPi1 (rechts) Verbindung zwischen Raspberry Pi und AdvaBoard RPi1 - Stromversorgung:
- Zusätzlich muss das AdvaBoard RPi1 mit Strom versorgt werden. Informationen hierzu finden Sie weiter unten im Abschnitt Stromversorgung.
4.4 Software-Überblick
Zum Betrieb des AdvaBoard RPi1 am Raspberry Pi ist ein funktionsfähiges Linux-System auf dem Raspberry Pi erforderlich. Wir empfehlen hierbei Raspbian, jedoch sollte auch jedes andere auf dem Raspberry Pi funktionsfähige Linux-System mit dem AdvaBoard RPi1 funktionieren. Aktuelle Linux-Systeme für den Raspberry Pi, sowie Installationsanleitungen, erhalten Sie auf den Raspberry Pi-Webseiten.
Zusätzlich muss die AdvaBoard RPi-Software auf dem System installiert werden. Diese Software stellen wir für einige Systeme bereits vorkompiliert in Binärform, sowie zusätzlich als Quellcode zur Verfügung. Die notwendigen Informationen zur Installation finden Sie in der Readme-Datei der Software.
Alternativ können Sie von uns SD-Karten mit fertig installiertem Linux-System (Raspbian) und installierter und konfigurierter AdvaBoard RPi1-Software beziehen.
Weitere Informationen finden Sie im nachfolgenden Abschnitt Software
5 Inbetriebnahme
Für die Inbetriebnahme des AdvaBoard RPi sind mindestens folgende Komponenten notwendig:
- Raspberry Pi, inkl. SD-Karte mit lauffähigem Linux (z.B. Raspbian)
- AdvaBoard RPi1
- 26-poliges Flachkabel, zum Anschluss des Raspberry Pis am AdvaBoard RPi1
- geregeltes 5V-Netzteil, z.B. Steckernetzteil mit Micro-USB-Anschluss und 5V DC / 1.0A
- Netzwerkkabel und ssh-Zugriff auf den Raspberry Pi
– oder –
USB-Tastatur, HDMI-Display und HDMI-Kabel - optional: TFT-Display, TFT-Verlängerungskabel
Inbetriebnahme:
Lesen Sie die oben stehenden Hinweise sorgfältig durch, und achten Sie im Folgenden immer wie oben beschrieben auf ausreichenden ESD-Schutz. Verbinden Sie die Komponenten nur im ausgeschalteten, stromlosen Zustand!
Raspberry Pi-Vorbereitung:
- Verbinden Sie den Raspberry Pi mit dem Netzwerk, bzw. verbinden Sie die USB-Tastatur und das HDMI-Display mit dem Raspberry Pi.
- Stellen Sie sicher, dass der Raspberry Pi ein funktionsfähiges Linux-System besitzt, und auf dieses per Netzwerk (ssh) oder USB-Tastatur und HDMI-Display zugegriffen werden kann.
- Installieren Sie die AdvaBoard RPi-Software auf dem Raspberry Pi (siehe README-Datei der Software).
- Fahren Sie danach das Linux-System des Raspberry Pi herunter, und stecken Sie das Netzteil des Raspberry Pi aus.
AdvaBoard RPi1-Vorbereitung:
- Jumper "RPi5V": Setzen Sie den (roten) "RPi5V"-Jumper auf dem Raspberry Pi.
Dieser sorgt dafür, dass die Stromversorgung des Raspberry Pi mit der Stromversorgung des AdvaBoard RPi1 verbunden ist. - Steckbrücke "PROGRAMMER": Stecken Sie die 10-polige Steckbrücke in die Aufbewahrungsposition.
- sichere Position:
Platzieren Sie das AdvaBoard RPi1 auf einer stabilen, nichtleitenden
Unterlage vor dem Raspberry Pi. Es wird empfohlen, die 4 Abstandsbolzen
des Zubehörsets als "Füße" zu verwenden.
– oder –
Stecken Sie das 26-polige Flachkabel am Raspberry Pi an (siehe Raspberry Pi-Anschluss), und montieren Sie das AdvaBoard RPi1 (mit den langen Abstandshaltern des Zubehörsets) auf dem Raspberry Pi. Platzieren Sie den Raspberry Pi anschließend auf einer stabilen, nichtleitenden Unterlage.
- Jumper "RPi5V": Setzen Sie den (roten) "RPi5V"-Jumper auf dem Raspberry Pi.
Verbinden von AdvaBoard RPi1 und Raspberry Pi:
Verbinden Sie das AdvaBoard RPi per 26-poligem Flachkabel mit dem Raspberry Pi (siehe Raspberry Pi-Anschluss). Achten Sie darauf, dass vorher das Netzteil des Raspberry Pi ausgesteckt ist!Erster Start:
- Schließen Sie ein Netzteil an den Raspberry Pi an.
(Alternativ kann ein 5V-Netzteil an den Netzteil-Anschluss das AdvaBoard RPi1 angeschlossen werden. Es darf aber immer nur 1 Netzteil an AdvaBoard RPi1 und Raspberry Pi zusammen angeschlossen sein!) - Schalten Sie das Netzteil ein. Die grüne LED des AdvaBoard RPi1 sollte nun leuchten.
- Warten Sie, bis der Raspberry Pi gebootet hat.
- Loggen Sie sich (per Netzwerk oder direkt) auf dem Raspberry Pi ein.
- Schließen Sie ein Netzteil an den Raspberry Pi an.
Erste Tests:
Initialisierung:
sudo am_rpi_advaboard_tool -m init
Systeminformationen abfragen:
sudo am_rpi_advaboard_tool -m info
LED einstellen:
sudo am_rpi_advaboard_tool -m LED 0x02
Die grüne LED des AdvaBoard RPi sollte nun blinken. Durch andere Werte können Sie das Blinken verändern bzw. ausschalten (0x00 = aus, 0xff = immer an, 0x01 .. 0x08 = verschiedene Blinkgeschwindigkeiten)
Weitere Tests:
- TFT-Display: siehe Inbetriebnahme in der TFT-Display-Anleitung
- Lesen Sie diese Anleitung bzw. die Software-Dokumentation, und testen Sie die benötigten Funktionen per am_rpi_advaboard_tool und/oder am_rpi_tft_tool.
6 Hardware-Konzept
(zum Vergrößern anklicken)
Das AdvaBoard RPi1 nutzt den Raspberry Pi-GPIO-Steckverbinder, um verschiedene Schnittstellen und Funktionen an den Raspberry Pi anzubinden. Die zentralen Elemente bilden hierbei ein CPLD und zwei Mikrocontroller:
CPLD:
Der CPLD ist für die Anbindung des (optionalen) TFT-Displays, der E-SPI-Schnittstelle, einiger Digital-I/Os und der Diagnose-LED zuständig. Zudem enthält er einen RS-232-/RS-485-Umschalter, um wahlweise die RS-232- oder die RS-485-Schnittstelle zu verwenden.
Power-Management-Mikrocontroller: (F912)
Der Power-Management-Controller beinhaltet das komplette Power-Management (d.h. das zeit- und ereignisgesteuerte Ein- und Ausschalten der verschiedenen Stromkreise auf dem AdvaBoard RPi1), sowie eine Echtzeituhr.
Falls an das AdvaBoard RPi1 eine Batterie angeschlossen ist, wird dieser Mikrocontroller (inkl. Echtzeituhr) bei abgeschaltetem Netzteil von der Batterie versorgt.
Der Mikrocontroller ist per I2C an den Raspberry Pi angebunden, und verwendet zur Kommunikation das Advamation RS-485-/I2C-Protokoll. Zudem kann er einige Aufgaben zeit- und ereignisgesteuert selbständig erledigen (siehe Ereignisgesteuerte Automatisierung). Der Mikrocontroller kann seine Konfiguration speichern, so dass Einstellungen nur einmal vorgenommen werden müssen, und nach jedem Neustart automatisch geladen werden.
I/O-Mikrocontroller: (F353)
Der I/O-Mikrocontroller ist v.a. für die Analog- und Digital-I/Os (inkl. PWM) des AdvaBoard RPi1, sowie für die Konfiguration des CPLDs zuständig.
Er ist per I2C an den Raspberry Pi angebunden, und verwendet zur Kommunikation das Advamation RS-485-/I2C-Protokoll. Zudem kann er ereignisgesteuert einige Aufgaben selbständig erledigen (siehe Ereignisgesteuerte Automatisierung). Der Mikrocontroller kann seine Konfiguration speichern, so dass Einstellungen usw. nur einmal vorgenommen werden müssen, und nach jedem Neustart automatisch geladen werden.
Die Schnittstellen des AdvaBoard RPi1 wurden (außer I2C) 5V-tolerant ausgelegt, und dienen verschiedenen Zwecken:
TFT-Display/Touchscreen: An die TFT-Display-Schnittstelle können TFT-Displays inkl. Touchscreen von 3.2" (81mm) bis 7.0" (176mm) angeschlossen werden, um z.B. einen Linux-Desktop, eine Benutzeroberfläche oder Messdaten anzuzeigen, und per Touchscreen zu bedienen. Weitere Informationen zu den TFT-Displays finden sich in der TFT-Display-Anleitung.
Analog-/Digital-I/O: An die Analog- und Digital-I/Os des AdvaBoard RPi1 können z.B. Analog-Sensoren, Potis, Schalter, Taster, Relais usw. angeschlossen werden. Die I/Os umfassen dabei 16-Bit Analog-Eingänge, 8-Bit Analog-Ausgänge, PWM- und Frequenz-Ausgänge sowie Digital-I/Os mit und ohne Pull-Up und in Open-Collector- oder Push-Pull-Konfiguration.
Die Digital-I/Os sind dabei nicht direkt an die Raspberry Pi-GPIOs angeschlossen, sondern an den CPLD bzw. den I/O-Mikrocontroller. Damit kann zum einen der Mikrocontroller selbständig auf sich ändernde Eingänge reagieren (siehe Abschnitt Ereignisgesteuerte Automatisierung), zum anderen ist (mit einer modifizierten Firmware) eine hardwareunterstützte Vorverarbeitung einiger I/Os per CPLD möglich (z.B. 2-Phasen-Counter).
Falls mehr oder speziellere I/Os notwendig sind, oder die I/Os weiter vom AdvaBoard RPi1 entfernt sind, so ist es oft sinnvoll, hierfür eine Erweiterungsplatine zu verwenden, die dann per E-SPI, I2C oder RS-485 an das AdvaBoard RPi1 angeschlossen wird.
E-SPI: Der erweiterte SPI ist primär für die schnelle Anbindung von Peripherie gedacht, die sich im gleichen Gehäuse wie das AdvaBoard RPi1 befindet. Durch die Verwendung von 4 Adressleitungen können bis zu 16 E-SPI-Geräte bzw. bis zu 5 "normale" SPI-Geräte direkt angeschlossen werden.
Zudem enthält der E-SPI eine Interruptlogik, so dass spezielle Geräte hierüber z.B. signalisieren können, dass Daten zur Abholung bereitstehen, ohne dass ein ständiges "Polling" notwendig ist.
Einige entsprechende E-SPI-Erweiterungsplatinen können von uns bezogen werden.
I2C: Der I2C-Bus ist mittlerweile die Schnittstelle für digitale Sensoren. Sie ist insbesondere für Peripherie geeignet, die sich im gleichen Gehäuse wie das AdvaBoard RPi1 befindet und keine hohe Datenübertragungsraten und keine niedrigen Latenzzeiten benötigt.
Für externe Peripherie ist sie ebenfalls geeignet – da der I2C jedoch nicht störsicher ist, sollten dann entsprechende Maßnahmen gegen elektrische Störungen ergriffen werden (z.B. mehrfaches Auslesen eines Sensors, CRC zur Erkennung von Übertragungsfehlern, Abschirmung). Zusätzlich können eine galvanische Trennung, ein Verstärker/Buffer, ein I2C-Switch oder ein aktiver I2C-Pull-Up zur Leitungsverlängerung sinnvoll sein (demnächst bei uns erhältlich).
Alle von uns vertriebenen I2C-Platinen, I2C-Geräte usw., die einen Mikrocontroller enthalten, verwenden deshalb standardmäßig einen CRC [1] am Ende jeder Übertragung. Zudem verwenden diese zur Kommunikation unser Advamation RS-485-/I2C-Protokoll.
Darüber hinaus enthält der I2C auf dem AdvaBoard RPi1 eine Interruptleitung, so dass entsprechende I2C-Geräte einen Interrupt auslösen können, sobald z.B. Daten zur Abholung bereitstehen, oder in einem Sensor eingestellte Grenzwerte überschritten werden.
Für die störsichere Anbindung von Peripherie, bzw. die Anbindung über größere Entfernungen, sollte statt I2C die RS-485-Schnittstelle verwendet werden. Für die Anbindung entfernter I2C-Sensoren bieten wir hierzu einen RS-485-I2C-Umsetzer an.
RS-232-TTL: An die RS-232-TTL-Schnittstelle kann ein Gerät, das eine serielle Schnittstelle besitzt (wie z.B. ein GPS oder ein Funkmodul), angeschlossen werden. Die Schnittstelle verwendet TTL-Pegel, ein passender RS-232-TTL-Wandler ist jedoch verfügbar.
Standardmäßig kann an die RS-232-Schnittstelle gleichzeitig nur 1 Gerät angeschlossen werden.
RS-485: Die RS-485-Schnittstelle ist eine störfeste Industrieschnittstelle, an die als Bus (evtl. mittels Hubs) mehrere Geräte angeschlossen werden können, und die auch für die Überbrückung langer Distanzen geeignet ist. Eine automatische Richtungsumschaltung und ein per Steckbrücke aktivierbarer Leitungs-Terminator sind ebenfalls enthalten.
Sie ist somit die bevorzugte Schnittstelle für externe Automatisierungskomponenten (z.B. Sensoren, Messtaster, Motoren, Linearachsen usw., wie z.B. unseren Automatisierungs-Baukasten oder Modbus-Geräte) und für die störfeste berbrückung längerer Distanzen.
Die von uns vertriebenen Geräte mit RS-485-Schnittstelle besitzen hierbei einen Steckverbinder, der sowohl die Datenleitungen als auch die Stromversorgung enthält, so dass nur 1 Stecker notwendig ist. Zudem verwenden unsere Geräte unser Advamation RS-485-/I2C-Protokoll.
Weitere Schnittstellen können mit programmierbaren Erweiterungsplatinen (z.B. E-SPI + programmierbarer CPLD, I2C + programmierbarer Mikrocontroller) individuell ergänzt werden.
Für spezielle Anwendungszwecke und bei größeren Stückzahlen kann von uns zudem die Firmware (CPLD, Mikrocontroller) des AdvaBoard RPi1 angepasst werden.
[1] | Der verwendete CRC entspricht dem "PEC" der SMBus-Spezifikation. |
7 Software
Die AdvaBoard RPi1-Software umfasst:
- Programmbibliotheken in C und Python (>= 2.6/3.x) für das AdvaBoard RPi1, den Raspberry Pi und die TFT-Displays
- Programmbibliothek in Java für das AdvaBoard RPi1
- Kommandozeilen-Programme für nahezu alle Bibliotheksfunktionen
(ideal zur Inbetriebnahme, zur Verwendung in Shell-Skripten, für Tests oder als Basis für eigene Anwendungen) - Grafische Benutzeroberfläche AdvaBoard-GUI für nahezu alle
Bibliotheksfunktionen
(ideal zur Inbetriebnahme und für Tests) - Framebuffer-Treiber, mit dem das TFT-Display als Standard-Linux-Display verwendet werden kann
- Touchscreen-Treiber für den TFT-Touchscreen
- JSON-RPC-Anbindung, um auf alle Funktionen des AdvaBoard RPi1 entfernt ber ein Netzwerk zugreifen zu können.
- Beispielprogramme
- weitere Hilfprogramme/Tools
Der Großteil dieser Software ist Open Source unter einer MIT/X11-artigen Lizenz, d.h. der Quelltext ist frei zugänglich und darf auch in proprietäre Software eingebunden werden. Damit können die mitgelieferten Beispielprogramme als Basis für Ihre eigenen Anwendungen dienen.
Im Detail ist die Software in den folgenden Abschnitten, auf der Software-Seite und in der Software-Dokumentation beschrieben.
Kundenspezifische Anpassungen, kundenspezifische grafische Benutzeroberflächen und kundenspezifische Software für das AdvaBoard RPi1 nach Ihren Anforderungen ist auf Anfrage erhältlich.
7.1 AdvaBoard-GUI
Die "AdvaBoard-GUI" ist eine grafische Benutzeroberfläche, mit der auf die meisten Funktionen des AdvaBoard RPi1 auf einfache Art und Weise zugegriffen werden kann. Dabei kann diese Benutzeroberfläche:
- entweder direkt auf dem Raspberry Pi laufen
- oder auf einem PC laufen, der dann mittels JSON-RPC über das Netzwerk mit dem Rasbperry Pi kommuniziert.
Weitere Informationen hierzu finden Sie in der Software-Dokumentation.
Screenshots des Programms:
(zum Vergrößern anklicken)
7.2 am_rpi_advaboard_tool
Neben den Programmbibliotheken sind die Kommandozeilenprogramme ein wichtiger Bestandteil der Software. Diese Kommandozeilenprogramme enthalten nahezu die komplette Funktionalität der entsprechenden Bibliotheken, und sind einfach zu verwenden.
Es wird daher empfohlen, die Funktionen des AdvaBoard RPi1 zuerst mit dem Kommandozeilenprogramm am_rpi_advaboard_tool auszuprobieren, und sie erst danach in eigene (C-/Java-/Python-)Programme einzubauen. Da die Funktionsnamen und Parameter des Kommandozeilenprogramms nahezu identisch mit den Bibliotheksfunktionen sind, können die Kommandozeilenaufrufe später einfach in C-/Java-/Python-Funktionsaufrufe überführt werden.
Ebenfalls wird empfohlen, AdvaBoard-Funktionen, die im eigenen Programm nicht wie erwartet funktionieren, mit dem Kommandozeilenprogramm zu testen.
Diese Vorgehensweise kann zu deutlichen Zeiteinsparungen führen und die Fehlersuche deutlich erleichtern, da hiermit das AdvaBoard RPi1 und der eigene Programmcode getrennt getestet werden können.
Die Kommandozeilenprogramme sind darüber hinaus geeignet, um das AdvaBoard RPi1 in Shell-Skripten zu verwenden.
Eine Übersicht über die Funktionen erhalten Sie per am_rpi_advaboard_tool --help:
Usage: am_rpi_advaboard_tool [OPTION...] - AdvaBoard RPi1 commandline-interface Help Options: -h, --help Show help options Application Options: -m, --mode=MODE parameters ... Generic modes: INIT - init the AdvaBoard RPi1 INFO - print system information LED 0x00..0xFF - set LED TEMPERATURE - get temperature of microcontrollers Power modes: VOLTAGES - get voltages POWER PART ONOFF - power-on/off POWER_READ - read power-on/off PINS PINS EN - enable/disable pins PINS_READ - read pin-enable/disable TFTBL_PWM 0x00..0xFF - set PWM for TFT_BACKLIGHT TFTBL_PWM_READ - get PWM of TFT_BACKLIGHT PART: PWR, CPLD_3V, PERIPHERAL_5V, RPI, TFT, TFT_BACKLIGHT ONOFF: ON, 1, OFF, 0 PINS: ESPI, RPI, TFT EN: ENABLE, 1, DISABLE, 0 Note: TFT_BACKLIGHT is only used by 3.2" and 7.0" TFT display. TFTBL_PWM can be used to control the brightness of 3.2" TFT, and should be 0xFF for 7.0" TFT. RTC modes: RTC_STATUS - read RTC-status RTC_CONTROL CONTROL ... - control RTC RTC_READ - read RTC-time RTC_SET TIME - set RTC-time CONTROL: 8-bit control value, or one or more of: RTC_STOP, RTC_START, RTC_SET, RTC_CLRFLAGS, RTC_ALARM0_OFF, RTC_ALARM0_ON, RTC_ALARM1_OFF, RTC_ALARM1_ON TIME: time in 32-bit seconds (usually since epoch) Do not set to < 0x10000000 if you use alarms. Power-/RTC-automatization modes: EVENTPWR_FLAGS - read event-handler-flags EVENTPWR_CLEAR FLAGS - clear event-handler-flags EVENTPWR_TRIGGER h_pwr - trigger event-handler EVENTPWR_POWER_WRITE h_pwr PWRON CPLD_3V PERIPHERAL_5V RPi TFT TFT_BL - configure power-on/off @ handler EVENTPWR_POWER_READ h_pwr - read power-on/off @ handler EVENTPWR_OUTPUT_WRITE h_pwr MASK0 OUTPUT0 - configure outputs @ handler EVENTPWR_OUTPUT_READ h_pwr - read outputs @ handler EVENTPWR_ANALOGCONTROL_WRITE h_pwrr CONTROL0 CONTROL1 CONTROL2 - configure analog-control @ handler EVENTPWR_ANALOGCONTROL_READ h_pwr - read analog-control @ handler FLAGS: flag-bitmask to clear, 0x00..0xff h_pwr: power-event-handler number, 0..7 0 is reset event-handler 1 is switch-to-battery-handler event-handler 2 is power-supply-switched-on event-handler PWRON CPLD_3V PERIPHERAL_5V RPi TFT TFT_BL: 0=power-on, 1=power-off, -1=don't change MASK0: bitmask for outputs, 0=do not set this bit, 1=set this bit OUTPUT0: output-value, 0=low, 1=high CONTROL0..2: control-bits EVENTPWR_I2CINT_WRITE h_pwr_en - configure I2C-interrupt-event EVENTPWR_I2CINT_READ - read I2C-interrupt-event RTC_ALARM_SET i h_pwr TIME [PERIODIC] - set+enable RTC-alarm RTC_ALARM_READ i - read RTC-alarm-configuration h_pwr: handler to trigger, 0..7 h_pwr_en: like h_pwr, but highest bit (0x80) enables the event i: RTC-alarm number, 0/1 TIME: alarm-time, if < 0x10000000 it is relative to now PERIODIC: periodiciy of the alarm, 0=non-periodic alarm Digital-/Analog-I/O modes: IO_CONFIG IOCFG [CPLDIOCFG] - config digital-I/Os IO_CONFIG_READ - read digital-I/O-configuration IO_STATUS - read digital-status IO_CONTROL CONTROL ... - control digital-I/Os IO_WRITE OUTPUT0 [OUTPUT1] - write I/Os IO_READ - read I/Os IO_SET i - set I/O to high IO_CLR i - clear I/O to low IOCFG: i|o|p * 4 (or 0/-1=don't change) i=input, o=opendrain-output, p=pushpull-output CPLDIOCFG: i|o * 8 (or 0/-1=don't change) i=input, o=output CONTROL: 16-bit control-value, or one or more of: CPLDINUPDATE_DISABLE, CPLDINUPDATE_ENABLE EVENT0_DISABLE, EVENT0_ENABLE EVENT1_DISABLE, EVENT1_ENABLE EVENT2_DISABLE, EVENT2_ENABLE EVENT3_DISABLE, EVENT3_ENABLE i: I/O-number (0x04..0x07, 0x10..0x17) OUTPUT0/1: I/O-values (0x00..0xff, -1=don't change) ANALOG_STATUS - read analog-status ANALOG_CONTROL CONTROL ... - control analog-I/Os / PWM ANALOGIN_READ [i] - read analog-input(s) ANALOGOUT_WRITE i VALUE SCALE - write analog-I/Os ANALOGOUT_READ [i] - read analog-output(s) PWM_CONTROL PWMCONTROL ... - control PWM PWM_CLK CLKDIV PRESCALER - set PWM-speed PWM_CLK_READ - get PWM-speed PWM_WRITE i VALUE - write PWM PWM_READ [i] - read PWM CONTROL: 32-bit control-value, or one or more of: ADC0_STOP, ADC0_ONESHOT, ADC0_CONTINUOUS, ADC1_STOP, ADC1_ONESHOT, ADC1_CONTINUOUS, ADC2_STOP, ADC2_ONESHOT, ADC2_CONTINUOUS, ADC3_STOP, ADC3_ONESHOT, ADC3_CONTINUOUS, ADC4_STOP, ADC4_ONESHOT, ADC4_CONTINUOUS, IDA0_DISABLE, IDA0_ENABLE, IDA1_DISABLE, IDA1_ENABLE PWMCONTROL: 8-bit control-value, or one or more of: PWM0_DISABLE, PWM0_PWM8, PWM0_PWM16, PWM0_FREQ PWM1_DISABLE, PWM1_PWM8, PWM1_PWM16, PWM1_FREQ i: analog-in-number (0..3) or PWM-number (0..1) VALUE: 16-bit value for PWM / 8-bit value for IDA SCALE: scale for IDA, 0=0..0.25mA, 1=0..0.5mA, 2=0..1mA, 3=0..2mA CLKDIV: clock-divider 1..256 PRESCALER: clock-prescaler 1,4,12,48 PWM-speed: - PWM8: repeating-frequency = 95.7kHz / CLKDIV / PRESCALER - PWM16: repeating-frequency = 373.84Hz / CLKDIV / PRESCALER - FREQ: frequency = 12.25MHz / CLKDIV / PRESCALER / VALUE - the speed can differ +- 2% PWM-value: - 0x0000 is 100% high, 0xFFFF is nearly 100% low, to get 100% low, use IO_CLR on the pin - PWM8,FREQ only use the higher byte of VALUE - FREQ: value is time of the low-/high-phase, 0x01 is highest frequency, 0xff is nearly lowest freq., 0x00 (interpreted as 0x100) is lowest freq. I/O-automatization modes: EVENTIO_FLAGS - read event-handler-flags EVENTIO_CLEAR FLAGS - clear event-handler-flags EVENTIO_TRIGGER h_io - trigger event-handler EVENTIO_OUTPUT_WRITE h_io MASK0 OUTPUT0 [MASK1 OUTPUT1 [MASK2 OUTPUT2]] - configure outputs @ handler EVENTIO_OUTPUT_READ h_io - read outputs @ handler EVENTIO_CONTROL_WRITE h_io CONTROL - configure control @ handler EVENTIO_CONTROL_READ h_io - read control @ handler FLAGS: flag-bitmask to clear, 0x00..0x0f h_io: I/O-event-handler number, 0..3, 0 is reset-handler MASK0: bitmask for outputs, 0=skip this bit, 1=set this bit OUTPUT0: output-value, 0=low, 1=high CONTROL: control-bits (16 bit) EVENTIO_EVENT_WRITE i h_io MASK0 INPUT0 MASK1 INPUT1 - configure event EVENTIO_EVENT_READ i - read event i: event-number, 0..3 evio: event-handler to trigger, 0..3 MASK0..1: bitmask for inputs, 0=skip this bit, 1=use this bit INPUT0..1: input-match-value, 0=low, 1=high Configuration-storage/EEPROM modes: EEPROM_F912_STORE - store configuration of F912 (power, RTC) to EEPROM EEPROM_F353_STORE - store configuration of F353 (I/O) to EEPROM E-SPI modes: ESPI SEL TXDATA... - communicate with SPI-device ESPI_CLK CLKDIV [CLKCFG] - set E-SPI clock ESPI_SEL SEL - set E-SPI SEL0..3 ESPI_SEL_READ - read E-SPI SEL0..3 ESPI_INT_READ - read SPI-interrupt MUX: 0=E-SPI, 1=TFT, 2=TP, 3=SD, -1=don't change SEL: SEL0..3 values (0x00..0x0F), -1=don't change CLKDIV: SPI-clock-divisor (4/8/16/.../65536), -1=don't change, clock=250MHz/CLKDIV CLKCFG: 0: idle low, shift at falling-edge, read at rising-edge 1: idle low, shift at rising-edge, read at falling-edge 2: idle high, shift at rising-edge, read at falling-ege (*) 3: idle high, shift at falling-edge, read at rising-edge (*) default: 2 TXDATA: bytes to transmit I2C modes: I2C RXLEN ADDR TXDATA... - communicate with I2C-device I2C_PROT ADDR CMD TXDATA... - communicate wit I2C-devices with the Advamation-protocol RXLEN: number of bytes to receive ADDR: I2C-device-address, 0x00..0x7F TXDATA: bytes to transmit I2C_CLK CLK - set I2C-clock I2C_INT_READ - read I2C-interrupt-pin I2C_F912INT_CLEAR - clear F912-I2C-interrupt / set int-pin CLK: clock-divider 2/4/8...65536, I2C-clk = 250MHz/CLK, or 5/10/20/50/100/200/300/400kHz I2C_CLKEXT DELAY - configure I2C-clock-stretching I2C_CLKEXT_READ - read I2C-clock-stretching-configuration I2C_CLKEXTINJ MASK ADDR - configure I2C-clock-stretching-injection I2C_CLKEXTINJ_READ - read I2C-clock-stretching-injection conf. DELAY: clock-stretching-delay in the I2C-read-ACK-phase delay=DELAY*1.306?s, e.g. DELAY=8 for 100kHz MASK,ADDR: address and mask for clock-stretching-injection; only inject clock-stretching if ADDR & MASK == DEVICEADDR & MASK e.g. 0xFF 0xFF to disable, 0x00 0x00 to enable for all addresses RS-485 modes: RS485_CFG MUX [SPEED [BIT9]] - configure RS-232/RS-485 RS485_CFG_READ - read RS-232/RS-485-configuration MUX: RS485,0,RS232,1 SPEED: 0..0xffff, value = 196 000 000/baudrate BIT9: 0,1 low-level modes: F912 RXLEN CMD TXDATA... - communicate with F912 F353 RXLEN CMD TXDATA... - communicate with F353 CPLDREG TXDATA - write CPLD-registers GPIO_WRITE GPIOs LEVEL - write Raspberry Pi GPIOs GPIO_READ GPIOs - read Raspberry Pi GPIOs SPI_CLK CLKDIV - set SPI-clock SPI_CLKCFG CLKCFG - set SPI-clock-configuration SPI_MUX MUX - set SPI-MUX SPI_COMM TXDATA... - communicate over SPI RPiI2C_CLK CLKDIV - set RPi-I2C-clock RPiI2C_COMM RXLEN ADDR TXDATA... - communicate over SPI Notes: Note that all clocks/timings may differ by +-2%. All parameters are case-insensitive. All numeric parameters can be decimal, hexadecimal (0x...) or binary (0b...) numbers. If you want to use "-1" as parameter, prepend it with "--" to make sure that it's not interpreted as an option, e.g. ... -m EVENTPWR_POWER_WRITE 1 -- -1 -1 -1 1 -1 -1 -l, --nolock don't use locking (use with care!) -v, --verbose=LEVEL verbosity level (default: 64) (DEBUG: 128, INFO: 64, MESSAGE: 32, WARNING: 16, CRITICAL: 8, ERROR: 4/0)
Da die Funktionen des AdvaBoard RPi1 recht umfangreich sind, enthält auch das Kommandozeilenprogramm sehr viele Funktionen. Die wichtigsten Funktionen bzw. Kommandozeilenprogramm-Aufrufe finden Sie jedoch nochmal in den jeweiligen Abschnitten dieser Anleitung. Details zu den einzelnen Funktionen finden Sie in der Software-Dokumentation.
Die wichtigsten Parameter sind:
- --help
- Gibt eine Hilfemeldung bzw. eine Übersicht über die möglichen Parameter aus.
- -m MODE
- Wählt eine bestimmte Funktion aus.
- -v
Stellt die Ausführlichkeit der Programmausgaben ein.
- 128 / DEBUG:
- Zusätzlich zu "INFO" werden weitere Informationen ausgegeben (z.B. alle angegebenen Parameter in geparster Form), die für Debugging-Zwecke nützlich sein könnten.
- 64 / INFO (Standardeinstellung):
- Gibt die Informationen in menschenlesbarer Form aus.
Diese Einstellung wird für die interaktive Verwendung empfohlen.
Es wird davon abgeraten, diese Ausgaben z.B. per Skript zu parsen. - 32 / MESSAGE:
- Wie "INFO", jedoch v.a. ohne die Angabe des Autors, der Programmversion usw.
- 16 / WARNING:
- Ausgabe in kurzer, parsbarer Form. Alle redundanten Informationen und Informationen, die die Lesbarkeit erleichtern, werden weggelassen.
- 8 / CRITICAL, 4 / ERROR:
- Wie 16 / WARNING, jedoch evtl. Unterdrückung von Warnungen.
Beispiel:
sudo am_rpi_advaboard_tool -m RTC_STATUS:
Advamation AdvaBoard RPi1 tool, V2014-01-29, (c) Advamation (info@advamation.de) RTC-status: 0x02 running: YES error: none alarm0: off, no alarm alarm1: off, no alarm OK.
sudo am_rpi_advaboard_tool -m RTC_STATUS -v 32:
RTC-status: 0x02 running: YES error: none alarm0: off, no alarm alarm1: off, no alarm OK.
sudo am_rpi_advaboard_tool -m RTC_STATUS -v 16:
0x02
Ist der am_rpi_advaboard_tool-Aufruf erfolgreich, so wird ein Exit-Code
von 0 zurückgegeben. Bei Verbosity-Einstellungen (-v) von 32 oder höher
besteht die letzte ausgegebene Zeile zudem aus OK.
Im Fehlerfall wird eine Fehlermeldung ausgegeben und ein entsprechender
Fehlercode zurückgeliefert, z.B:
$ am_rpi_advaboard_tool -m INFO Advamation AdvaBoard RPi1 tool, V2014-01-29, (c) Advamation (info@advamation.de) ERROR: Permission denied. (-13) $ echo $? 243
8 Funktionsbeschreibungen
8.1 Stromversorgung
Das AdvaBoard RPi1 kann auf zwei Arten mit Strom versorgt werden:
vom Raspberry Pi: Am Micro-USB-Anschluss des Raspberry Pi wird ein Netzteil angeschlossen. Der Raspberry Pi versorgt dann das AdvaBoard RPi1 über das 26-polige Flachbandkabel.
In diesem Fall muss der Jumper "RPi5V" auf dem AdvaBoard RPi1 gesetzt sein!
vom 5V-Netzteil-Anschluss: Am Netzteil-Anschluss des AdvaBoard RPi1 wird ein 5V-Netzteil angeschlossen. Das AdvaBoard RPi1 versorgt dann den Raspberry Pi über das 26-polige Flachbandkabel.
In diesem Fall kann das AdvaBoard RPi1 den Raspberry Pi – z.B. abhängig von bestimmten Ereignissen – ein- und ausschalten, sofern der Jumper "RPi5V" nicht gesetzt ist. Zudem kann das AdvaBoard RPi1 das 5V-Netzteil selbst ein- bzw. ausschalten, sofern das Netzteil dies unterstützt (siehe PWRON-Steuersignal), und dann in einen sehr stromsparenden Modus wechseln.
Wichtig: Es darf gleichzeitig immer nur eine der beiden Versorgungen (5V-Netzteil am AdvaBoard oder Netzteil am Raspberry Pi) angeschlossen sein, niemals beide!
5V-Netzteil-Steckverbinder: Printstecker, 3-polig, RM 2.54mm
5V-Netzteil-Einbaustecker | Netzteil-Kabel |
(Ansicht: Steckseite) |
Pin | Signal | Farbe [2] | Beschreibung |
---|---|---|---|
1 | +5V | rot | Netzteil-Eingang, 5V |
2 | GND | schwarz | Masse |
3 | PWRON | braun | Power-On/Off-Steuerausgang (low=Netzteil an, high=Netzteil aus) |
[2] | Aderfarbe im Netzteil-Kabel des AdvaBoard RPi1-Zubehörsets |
8.2 Batterie
Falls das Netzteil des AdvaBoard RPi1 bzw. Raspberry Pi ausgeschaltet oder vom Stromnetz getrennt ist, kann die Echtzeituhr und der Power-Management-Controller von einer Batterie versorgt werden. Darüber hinaus steht die Batteriespannung auf dem I2C-Steckverbinder zur Verfügung.
Damit ist es möglich, dass:
- die Echtzeituhr auch bei ausgeschaltetem Netzteil weiterläuft, und
- bei Verwendung eines vom AdvaBoard RPi1 ein-/ausschaltbaren Netzteils (siehe PWRON-Steuersignal) das Netzteil zu bestimmten Uhrzeiten, auf Tastendruck oder durch ein spezielles externes I2C-Gerät wieder eingeschaltet werden kann. Bei leerer Batterie wird zudem automatisch das Netzteil eingeschaltet.
Die Batteriespannung sollte etwa 3V betragen, Spannungen über 3.4V sind nicht zulässig. Die Echtzeituhr und der Power-Management-Controller funktionieren bereits ab ca. 1.8V, das Ausschalten des Netzteils (siehe PWRON-Steuersignal) dürfte jedoch abhängig vom verwendeten Netzteil eine höhere Spannung benötigen.
Batterie-Steckverbinder: Printstecker, 2-polig, RM 2.54mm
Batterie-Einbaustecker | Batterie-Kabel |
(Ansicht: Steckseite) |
Pin | Signal | Farbe [3] | Beschreibung |
---|---|---|---|
1 | +VBATT | schwarz | Batterie-Eingang, 3V (1.8..3.3V) |
2 | GND | braun | Masse |
[3] | Aderfarbe im Batterie-Kabel des AdvaBoard RPi1-Zubehörsets |
8.3 Initialisierung
Bevor das AdvaBoard RPi1 vom Raspberry Pi angesprochen werden kann, müssen zuerst der Raspberry Pi und das AdvaBoard RPi1 initialisiert werden.
Kommandozeilenprogramm:
sudo am_rpi_advaboard_tool -m init
C-Funktion (Dokumentation):
am_rpi_advaboard_init(SPICLK)
8.4 Systeminformationen
Die Revision, Seriennummer, und Firmware-Versionen des AdvaBoard RPi1 ist im AdvaBoard hinterlegt und kann abgefragt werden.
Kommandozeilenprogramm:
sudo am_rpi_advaboard_tool -m info
z.B:
$ sudo am_rpi_advaboard_tool -m info Advamation AdvaBoard RPi1 tool, V2014-01-29, (c) Advamation (info@advamation.de) Model: AdvaBoard RPi1 Revision: 1 Serial: 11160fffff F353-firmware: 20131028 F912-firmware: 20131028 OK.
C-Funktion (Dokumentation):
am_rpi_advaboard_info(...)
8.5 LED
Das AdvaBoard RPi1 enthält eine grüne LED. Diese leuchtet im Normalfall, sobald eine Stromversorgung (per Netzteil-Steckverbinder oder Raspberry Pi) an das AdvaBoard RPi1 angeschlossen wird.
Es ist jedoch möglich, die LED auszuschalten oder (in verschiedenen Frequenzen) blinken zu lassen. Dies kann v.a. zu Diagnosezwecken hilfreich sein, z.B. indem man den Blinkcode ändert, um die Kommunikation zwischen dem Raspberry Pi und dem AdvaBoard RPi1 zu überprüfen.
Kommandozeilenprogramm:
sudo am_rpi_advaboard_tool -m LED 0x00..0xFF
C-Funktion (Dokumentation):
am_rpi_advaboard_led(BLINKCODE)
LED-Blinkcodes:
Code Beschreibung 0x00 aus 0x01 blinken, ca. 3.13 Hz 0x02 blinken, ca. 1.56 Hz 0x04 blinken, ca. 0.78 Hz 0x08 blinken, ca. 0.39 Hz 0xff an weitere siehe led_blinkcodes.pdf
8.6 Power-Management
Das AdvaBoard RPi1 besitzt ein integriertes Power-Management, mit dem der Strom zu bestimmten Teilen und Schnittstellen zeit- und ereignisgesteuert ein- und ausgeschaltet werden kann. Dies kann zu deutlichen Stromeinsparungen führen, was insbesondere für batteriebetriebene Anwendungen (z.B. autarke Anwendungen mit einem Solarmodul) interessant ist.
8.6.1 Stromkreise
Folgende separat ein-/ausschaltbare Stromkreise sind dazu auf dem AdvaBoard RPi1 vorhanden:
- Batterieversorgung:
Falls das 5V-Netzteil ausgeschaltet ist, versorgt die (optionale) Batterie den Power-Management-Controller inkl. Echtzeituhr, sowie evtl. spezielle I2C-Geräte. Der Stromverbrauch wird dabei sehr stark reduziert; das AdvaBoard RPi1 kann jedoch zu einstellbaren Uhrzeiten, per Tastendruck oder von speziellen I2C-Geräten wieder aufgeweckt werden, und dann das 5V-Netzteil einschalten (siehe PWRON-Steuersignal).
Dies ist insbesondere für autarke Anwendungen relevant, in denen z.B. periodisch oder auf Anforderung bestimmte Aufgaben zu erledigen sind, und in der Zwischenzeit möglichst wenig Strom verbraucht werden soll. Darüber hinaus ist die Batterieversorgung der Echtzeituhr auch ohne ein-/ausschaltbares Netzteil nützlich.
Ist das 5V-Netzteil eingeschaltet, so werden alle an den Batteriestromkreis angeschlossenen Geräte stattdessen vom Netzteil (mit 3.3V) versorgt.
- 5V-Netzteil / PWRON:
Das 5V-Netzteil versorgt das komplette AdvaBoard, wobei die Versorgung für bestimmte Teile ein-/ausschaltbar ist. Die auf dem AdvaBoard integrierten Mikrocontroller werden jedoch immer mit Strom versorgt, wenn das 5V-Netzteil eingeschaltet ist.
Bei Verwendung eines entsprechenden Netzteils kann dieses über die PWRON-Steuerleitung ausgeschaltet werden. Das Netzteil wird automatisch wieder angeschaltet, sobald ein Echtzeituhr-Alarm auftritt, ein High-Pegel am I2C-Interrupt-Eingang anliegt oder die Batterie leer wird.
- CPLD_3V:
Dieser 3.3V-Stromkreis versorgt den CPLD (inkl. I/Os 1.0..1.7), den Flash-Baustein und die LED des AdvaBoard RPi1, sowie den 3.3V-Pin der RS-232-Schnittstelle.
Dieser Stromkreis muss immer eingeschaltet sein, wenn der Raspberry Pi, die E-SPI-Schnittstelle oder das TFT-Display verwendet wird, bzw. einer der Stromkreise "PERIPHERAL_5V", "RPi", "TFT" oder "TFT_BACKLIGHT" eingeschaltet ist.
- PERIPHERAL_5V:
- Dieser 5V-Stromkreis versorgt angeschlossene E-SPI-Geräte, den RS-485-Schnittstellen-Treiber und -Terminator, sowie den 5V-Pin der RS-232-Schnittstelle.
- RPi:
Für den Raspberry Pi existiert auf dem AdvaBoard RPi ein eigener Stromkreis. Damit kann der Raspberry Pi z.B. per Tastendruck oder zu bestimmten Uhrzeiten ein- und ausgeschaltet werden.
Mit dem Jumper "RPi5V" auf dem AdvaBoard RPi1 kann diese Trennung aufgehoben und der Raspberry Pi-Stromkreis mit dem allgemeinen 5V-Stromkreis des AdvaBoard RPi1 verbunden werden. Dies ist dann notwendig, wenn das AdvaBoard RPi1 vom Raspberry Pi mit Strom versorgt wird, oder um bei einer Fehlkonfiguration den Raspberry Pi wieder mit Strom zu versorgen.
- TFT:
- Der TFT-Stromkreis (3.3V) versorgt sowohl das TFT-Display, als auch die Hintergrundbeleuchtung der Displays TFT_43 und TFT_50.
- TFT_BACKLIGHT:
- Der TFT_BACKLIGHT-Stromkreis (5.0V) versorgt die TFT-Hintergrundbeleuchtung der Displays TFT_32 und TFT_70. Für das TFT_32-Display kann hier zudem ein einstellbarer PWM verwendet werden.
Damit ist das AdvaBoard ideal für einen Batteriebetrieb bzw. autarken Betrieb z.B. mit einem Solarmodul geeignet, da das komplette System (bis auf die batterieversorgte Echtzeituhr und evtl. spezielle I2C-Sensoren) abgeschaltet, und zeit- oder ereignisgesteuert wieder aufgeweckt werden kann. Nach dem Aufwachen können die integrierten Mikrocontroller sofort tätig werden, um z.B. verschiedene Sensoren abzufragen (bei Verwendung spezieller Firmware), Eingänge zu überwachen und bei Bedarf weitere Komponenten einzuschalten oder den Raspberry Pi zu booten.
8.6.2 ein-/ausschaltbare Datenleitungen
Zusätzlich zu den Stromkreisen können auch einige Datenleitungen auf dem AdvaBoard RPi1 an-/abgeschaltet werden:
- E-SPI-/RS-485-Datenleitungen:
- Datenleitungen vom CPLD zur E-SPI-Schnittstelle und zum RS-485-Treiber
- Raspberry Pi-Datenleitungen:
- Datenleitungen zwischen dem CPLD des AdvaBoards und der Raspberry Pi-Schnittstelle
- TFT-Display-Datenleitungen:
- Datenleitungen zwischen dem CPLD und der TFT-Display-Schnittstelle
Dies ist notwendig, wenn die entsprechenden Stromversorgungen abgeschaltet werden, um zu verhindern, dass Geräte an den abgeschalteten Schnittstellen über eventuelle High-Pegel der Datenleitungen mit Strom versorgt werden.
Zudem kann dies verwendet werden, um die Datenleitungen erst kurz nach der Stromversorgung einzuschalten, und kurz vor der Stromversorgung auszuschalten, um "Daten-Spikes" beim Ein-/Ausschalten zu vermeiden.
8.6.3 Ein-/Ausschalten
Die einzelnen Stromkreise können direkt vom Raspberry Pi ein-/ausgeschaltet werden.
Kommandozeilenprogramm:
sudo am_rpi_advaboard_tool -m POWER PWR|CPLD_3V|PERIPHERAL_5V|RPI|TFT|TFT_BACKLIGHT ON|OFF sudo am_rpi_advaboard_tool -m POWER_READ
z.B.:
$ sudo am_rpi_advaboard_tool -m POWER_READ Advamation AdvaBoard RPi1 tool, V2014-01-29, (c) Advamation (info@advamation.de) PWR_ON: ON CPLD_3V: ON PERIPHERAL_5V: off RPi: ON TFT: off TFT_BACKLIGHT: off OK.
C-Funktion (Dokumentation):
am_rpi_advaboard_power(...) am_rpi_advaboard_power_read(...)
Die Datenleitungen können ebenfalls vom Raspberry Pi aus ein-/ausgeschaltet werden.
Kommandozeilenprogramm:
sudo am_rpi_advaboard_tool -m PINS ESPI|RPI|TFT ENABLE|DISABLE sudo am_rpi_advaboard_tool -m PINS_READ
z.B.:
$ sudo am_rpi_advaboard_tool -m PINS_READ Advamation AdvaBoard RPi1 tool, V2014-01-29, (c) Advamation (info@advamation.de) E-SPI/RS-485: disabled RPi: ENABLED TFT: disabled OK.
C-Funktion (Dokumentation):
am_rpi_advaboard_pins(...) am_rpi_advaboard_pins_read(...)
Darüber hinaus können als "Einschalter" (sowohl für das Netzteil als auch für einzelne Komponenten) die Echtzeituhr, ein einfacher Taster, spezielle I2C-Sensoren oder I2C-Erweiterungsplatinen mit Mikrocontrollern (die z.B. bestimmte Sensoren auf Grenzwerte überwachen) verwendet werden (siehe Ereignisgesteuerte Automatisierung).
Wird ein Stromkreis vom Raspberry Pi aus (per am_rpi_advaboard_power() oder per Kommandozeilenprogramm) abgeschaltet, so werden die entsprechenden Datenleitungen automatisch mit abgeschaltet.
8.6.4 Stromverbrauch
Je nach Power-Management-Modi verbraucht das AdvaBoard RPi1 unterschiedlich viel Strom:
PWRON | CPLD_3V | PERIP_5V | RPi | TFT | TFT_BACK | Stromverbrauch | eingeschaltete Teile | |
---|---|---|---|---|---|---|---|---|
0 | – | – | – | – | – | – | 1µA + PWRON [4] | Echtzeituhr, Power-Management-Controller |
1 | + | – | – | – | – | – | ca. 10-30mA | Echtzeituhr, Power-Management-Controller, I/O-Controller, I2C, AIN0..3, I/O 0.4-0.7 |
2 | + | + | – | – | – | – | ca. 100-200mA | Echtzeituhr, Power-Management-Controller, I/O-Controller, I2C, AIN0..3, I/O 0.4-0.7, CPLD, I/O 1.0..1.7, Flash, RS-232-3.3V |
2a | + | + | + | – | – | – | 2 + E-SPI, RS-485, RS-232-5V | |
2b | + | + | – | + | – | – | 2 + Raspberry Pi | |
2c | + | + | – | – | + | – | je nach Display | 2 + TFT-Display |
2d | + | + | – | – | + | + | je nach Display | 2 + TFT-Display + Hintergrundbeleuchtung |
- Die Modi 2a, 2b, 2c, 2d sind beliebig kombinierbar.
- Zum angegebenen Stromverbrauch addiert sich jeweils der Stromverbrauch angeschlossener Peripherie.
[4] | ca. 1µA + Strom der notwendig ist, um per PWRON=high das Netzteil im ausgeschalteten Zustand zu halten |
8.6.5 Spannungsmessung
Die Spannungen des Netzteils und der Batterie können über den Power-Management-Controller gemessen werden.
Zu beachten ist hierbei, dass die gemessene Batteriespannung nur dann gültig ist, wenn tatsächlich eine Batterie angeschlossen ist. Falls keine Batterie angeschlossen ist, wird ein beliebiger Wert (meist 2.xV) zurückgeliefert, und der Wert sollte ignoriert werden.
Standardmäßig ist es nicht möglich, festzustellen, ob eine Batterie an das AdvaBoard RPi1 angeschlossen ist, oder ob der Batterieanschluss "floatet". Soll eine Software dies jedoch feststellen können, so sollten per Jumper die Kontakte des Batteriesteckverbinders verbunden werden, wenn keine Batterie angesteckt ist.
Kommandozeilenprogramm:
sudo am_rpi_advaboard_tool -m VOLTAGES
z.B.:
$ sudo am_rpi_advaboard_tool -m VOLTAGES Advamation AdvaBoard RPi1 tool, V2014-01-29, (c) Advamation (info@advamation.de) V_5V: 4.93 V (should be ~5V) V_Batt: 2.80 V (should be ~3V, if battery is connected) VCC: 2.97 V (should be ~3V) OK.
C-Funktion (Dokumentation):
am_rpi_advaboard_voltages_read(...)
8.7 Echtzeituhr
Der Raspberry Pi enthält selbst leider keine Echtzeituhr, so dass bei jedem Booten üblicherweise Uhrzeit und Datum manuell eingegeben oder über das Netzwerk (per NTP) bezogen werden müssen.
Das AdvaBoard RPi1 behebt dieses Problem, indem es dem Raspberry Pi eine (batteriegepufferte) Echtzeituhr ("Real Time Clock", RTC) zur Verfügung stellt. Zudem kann die Echtzeituhr verwendet werden, um den Raspberry Pi und das AdvaBoard RPi1 zu bestimmten Uhrzeiten oder in bestimmten Intervallen einzuschalten oder bestimmte Aktionen auszulösen.
Die Echtzeituhr besteht aus:
- einem 32-Bit-Sekundenzähler, plus 15 Bit Nachkommastellen
- 2 einstellbaren Alarmen:
- zu einem bestimmten Zeitpunkt (z.B. "am 1.1.2014 um 12:34:56") oder
relativ zur aktuellen Zeit (z.B. "in 1 Minute") - einmalig, oder periodisch alle 1..16777215 Sekunden (=maximal alle ca. 194 Tage)
- zu einem bestimmten Zeitpunkt (z.B. "am 1.1.2014 um 12:34:56") oder
- Batteriepufferung (falls eine Batterie angeschlossen ist)
Der Sekundenzähler der Echtzeituhr sollte dabei üblicherweise als Sekunden seit 01.01.1970 (Epoche der Unixzeit) interpretiert werden, was eine einfache Handhabung mit Standard-Uhrzeitfunktionen ermöglicht.
Der Initialwert der Echtzeituhr beträgt 0x10000000 (ca. 04.07.1978); alle Alarmzeitpunkte, die kleiner als dieser Wert sind, werden als Alarme relativ zur aktuellen Uhrzeit interpretiert. Weitere Informationen zu den Alarmen finden Sie im Abschnitt Ereignisgesteuerte Automatisierung.
Kommandozeilenprogramm:
sudo am_rpi_advaboard_tool -m RTC_STATUS sudo am_rpi_advaboard_tool -m RTC_CONTROL control ... sudo am_rpi_advaboard_tool -m RTC_READ sudo am_rpi_advaboard_tool -m RTC_SET time sudo am_rpi_advaboard_tool -m RTC_ALARM_SET i evpwr time sudo am_rpi_advaboard_tool -m RTC_ALARM_READ i sudo am_rpi_advaboard_tool -m EVENTPWR_*
z.B.:
Echtzeituhr abfragen und setzen:
$ sudo am_rpi_advaboard_tool -m RTC_STATUS Advamation AdvaBoard RPi1 tool, V2014-01-29, (c) Advamation (info@advamation.de) RTC-status: 0x02 running: YES error: none alarm0: off, no alarm alarm1: off, no alarm OK. $ sudo am_rpi_advaboard_tool -m RTC_READ Advamation AdvaBoard RPi1 tool, V2014-01-29, (c) Advamation (info@advamation.de) RTC: 268438825.1432 OK. $ sudo am_rpi_advaboard_tool -m RTC_SET `date "+%s"` Advamation AdvaBoard RPi1 tool, V2014-01-29, (c) Advamation (info@advamation.de) OK. $ sudo am_rpi_advaboard_tool -m RTC_READ Advamation AdvaBoard RPi1 tool, V2014-01-29, (c) Advamation (info@advamation.de) RTC: 1390256716.0421 OK. $ sudo am_rpi_advaboard_tool -v 16 -m RTC_READ 1390256718.0421
Echtzeituhrzeit abfragen und in Datum umwandeln:
$ date -d "@`sudo am_rpi_advaboard_tool -v 16 -m RTC_READ`" Mon Jan 20 23:34:55 CET 2014
Echtzeituhr auf aktuelle Sytemuhrzeit setzen:
$ sudo am_rpi_advaboard_tool -v 32 -m RTC_SET `date "+%s"` OK.
Systemuhrzeit auf Echtzeituhr-Zeit setzen:
$ sudo date -s "@`sudo am_rpi_advaboard_tool -v 16 -m RTC_READ`" Mon Jan 20 23:35:46 CET 2014
Echtzeituhr-Alarm (Alarm 0) in 10 Sekunden:
$ sudo am_rpi_advaboard_tool -m RTC_ALARM_SET 0 1 10 Advamation AdvaBoard RPi1 tool, V2014-01-29, (c) Advamation (info@advamation.de) OK. $ sudo am_rpi_advaboard_tool -m RTC_STATUS Advamation AdvaBoard RPi1 tool, V2014-01-29, (c) Advamation (info@advamation.de) RTC-status: 0x12 running: YES error: none alarm0: ON, no alarm alarm1: off, no alarm OK. $ sudo am_rpi_advaboard_tool -m RTC_ALARM_READ 0 Advamation AdvaBoard RPi1 tool, V2014-01-29, (c) Advamation (info@advamation.de) RTC-alarm 0: event 1 at 1390256849s OK. # 10 seconds later... $ sudo am_rpi_advaboard_tool -m RTC_STATUS Advamation AdvaBoard RPi1 tool, V2014-01-29, (c) Advamation (info@advamation.de) RTC-status: 0x32 running: YES error: none alarm0: ON, ALARM occurred alarm1: off, no alarm OK.
C-Funktionen (RTC-Dokumentation, Alarm-Dokumentation):
am_rpi_advaboard_rtc_status(...) am_rpi_advaboard_rtc_control(...) am_rpi_advaboard_rtc_read(...) am_rpi_advaboard_rtc_write(...) am_rpi_advaboard_rtc_set(...) am_rpi_advaboard_rtc_alarm_write(...) am_rpi_advaboard_rtc_alarm_set(...) am_rpi_advaboard_rtc_alarm_read(...) am_rpi_advaboard_eventpwr_*(...)
8.8 Digital-/Analog-I/O
Das AdvaBoard bietet einige Analog- und Digital-I/Os:
- 4 Analog-Eingänge (16 Bit, standardmäßig 50 Samples/s) inkl. Spannungsteiler und Filter
- 2 Analog-Ausgänge (8 Bit, einstellbarer Bereich 0..0.25/0.5/1.0/2.0mA, max. 2.0V),
alternativ als Digital-I/Os nutzbar - 2 Digital-I/Os per Mikrocontroller inkl. PWM
- 8 Digital-I/Os per CPLD
mit optionaler hardwareunterstützter Verarbeitung (z.B. für 2-Phasen-Counter)
Alle Digital-I/Os verwenden einen 3.3V Pegel und sind 5V-tolerant. Die I/Os können zudem in der Ereignisgesteuerte Automatisierung verwendet werden.
Im Auslieferungszustand sind alle I/Os als Eingänge konfiguriert.
Sollten für eine Anwendung mehr I/Os notwendig sein, so können per I2C, E-SPI oder RS-485 externe I/O-Platinen an das AdvaBoard angeschlossen werden.
Steckverbinder: Wannenstecker, 20-polig, RM 2.54mm
I/O-Einbaustecker |
(Ansicht: Steckseite) |
Pin | Signal | Beschreibung |
---|---|---|
1 | +3,3V | Versorgung für externe Elektronik
max. 100mA zusammen mit Pin 19, externen I2C-Geräten und RS-232-TTL Pin 2
|
2 | GND | Masse |
3 | AIN0 | Analog-Eingang 0, inkl. Spannungsteiler und Filter-Kondensator |
4 | AIN1 | Analog-Eingang 1, inkl. Spannungsteiler und Filter-Kondensator |
5 | AIN2 | Analog-Eingang 2, inkl. Spannungsteiler und Filter-Kondensator |
6 | AIN3 | Analog-Eingang 3, inkl. Spannungsteiler und Filter-Kondensator |
7 | IO 0.4 / IDA0 | Digital-I/O 4 / Analog-Ausgang 0 |
8 | IO 0.5 / IDA1 | Digital-I/O 5 / Analog-Ausgang 1 |
9 | IO 0.6 / PWM0 | Digital-I/O 6 / PWM 0 / Frequenzausgang 0 |
10 | IO 0.7 / PWM1 | Digital-I/O 7 / PWM 1 / Frequenzausgang 1 |
11 | IO 1.0 / CPLDIO0 | CPLD-I/O 0 / RPi PWM |
12 | IO 1.1 / CPLDIO1 | CPLD-I/O 1 |
13 | IO 1.2 / CPLDIO2 | CPLD-I/O 2 |
14 | IO 1.3 / CPLDIO3 | CPLD-I/O 3 |
15 | IO 1.4 / CPLDIO4 | CPLD-I/O 4 |
16 | IO 1.5 / CPLDIO5 | CPLD-I/O 5 |
17 | IO 1.6 / CPLDIO6 | CPLD-I/O 6 |
18 | IO 1.7 / CPLDIO7 | CPLD-I/O 7 |
19 | +3,3V | Versorgung für externe Elektronik
max. 100mA zusammen mit Pin 1, externen I2C-Geräten und RS-232-TTL Pin 2
|
20 | GND | Masse |
8.8.1 Analog-Eingänge (AIN0..3)
Die Eingänge AIN0 bis AIN3 sind hochauflösende Analog-Eingänge. Ein Sigma-Delta-A/D-Wandler mit vorgeschaltetem Multiplexer wandelt die Eingangsspannung in einen 16-Bit-Wert um.
Jeder Analog-Eingang besitzt einen Spannungsteiler (2* 10 kOhm) sowie einen Filter-Kondensator (100 nF). Zudem werden die Analog-Eingänge 128-fach überabgetastet und dann mit einem SINC3-Filter digital gefiltert.
Zusätzlich zu den 4 Analog-Eingängen gibt es einen 5. Analog-Eingang, der intern mit einem (unkalibrierten) Temperatursensor verbunden ist.
Auflösung | 16 Bit |
max. Samplerate | 50 Samples/s [5] |
Überabtastung | 128x |
Eingangs-Spannungsbereich | 0..5V [6] |
Eingangs-Widerstand | 20 kOhm |
Filterkondensator | 100 nF |
[5] | Höhere Sampleraten (bis 1 ksps) sind prinzipiell möglich, allerdings muss dazu die digitale Filterung bzw. Überabtastung reduzuiert werden. Noch höhere Sampleraten, bzw. Analog-Eingänge mit Vorverarbeitung der eingelesenen Werte können mit unseren Erweiterungsmodulen realisiert werden, z.B. 10 Bit bei max. 200 ksps oder 12 Bit bei max. 75 ksps. |
[6] | Der exakte Spannungsbereich hängt u.a. von den Toleranzen der Spannungsteiler-Widerstände ab. Für genaue und absolute Messungen empfiehlt es sich deshalb, die entsprechenden Analog-Eingänge vorher zu kalibrieren. Ist für eine Anwendung ein anderer Spannungsbereich (z.B. 0-10V) erforderlich, so kann ggf. der Spannungsteiler modifiziert bzw. ein zusätzlicher Vorwiderstand verwendet werden. |
Die Analog-Eingänge besitzen jeweils 3 Modi:
Modus | Bedeutung |
---|---|
stop | Der Analog-Eingang wird nicht eingelesen. |
oneshot | Der Analog-Eingang wird einmalig eingelesen; danach wechselt der Modus zu "stop". |
continuous | Der Analog-Eingang wird ständig eingelesen. |
Der aktuelle Status jedes Analog-Eingangs ist detailliert abfragbar, und sollte vor jeder A/D-Wert-Abfrage kontrolliert werden:
Status-Bit | Wert | Bedeutung |
---|---|---|
sampling | 0 | Der Analog-Eingang ist derzeit inaktiv. |
1 | Der Analog-Eingang wird derzeit eingelesen. | |
mode | 0 | Modus "oneshot" |
1 | Modus "continuous" | |
valid | 0 | A/D-Wert ungültig |
1 | A/D-Wert gültig | |
error | 0 | kein Fehler |
1 | Fehler: Eingangsspannung außerhalb von 0..5V (overflow/underfow) |
Kommandozeilenprogramm:
sudo am_rpi_advaboard_tool -m ANALOG_CONTROL control ... # control: # ADC0_STOP, ADC0_ONESHOT, ADC0_CONTINUOUS, # ADC1_STOP, ADC1_ONESHOT, ADC1_CONTINUOUS, # ADC2_STOP, ADC2_ONESHOT, ADC2_CONTINUOUS, # ADC3_STOP, ADC3_ONESHOT, ADC3_CONTINUOUS, # ADC4_STOP, ADC4_ONESHOT, ADC4_CONTINUOUS sudo am_rpi_advaboard_tool -m ANALOG_STATUS sudo am_rpi_advaboard_tool -m ANALOGIN_READ [0..4]
z.B.:
Analog-Eingänge AIN0 und AIN1 starten:
$ sudo am_rpi_advaboard_tool -m ANALOG_CONTROL ADC0_CONTINUOUS ADC1_CONTINUOUS Advamation AdvaBoard RPi1 tool, V2014-01-29, (c) Advamation (info@advamation.de) analog-control: 0x0000000f OK.
Status abfragen:
$ sudo am_rpi_advaboard_tool -m ANALOG_STATUS Advamation AdvaBoard RPi1 tool, V2014-01-29, (c) Advamation (info@advamation.de) analog-status: 0xff 0xcc 0x00 0x00 ADC0: sampling, continuous, value ok, OV/UV ADC1: sampling, continuous, value ok, OV/UV ADC2: idle/stop, oneshot, value ok, OV/UV ADC3: idle/stop, oneshot, value ok, OV/UV ADC4: idle/stop, oneshot, value invalid, no error IDA0: disabled IDA1: disabled PWM0: disabled PWM1: disabled OK.
Analog-Eingänge lesen:
$ sudo am_rpi_advaboard_tool -m ANALOGIN_READ Advamation AdvaBoard RPi1 tool, V2014-01-29, (c) Advamation (info@advamation.de) AIN0: 0x888a / 34954 (~2.67 V) AIN1: 0x7356 / 29526 (~2.25 V) AIN2: 0x012f / 303 (~0.02 V) AIN3: 0x014b / 331 (~0.03 V) OK.
Analog-Eingänge AIN0 und AIN1 stoppen:
$ sudo am_rpi_advaboard_tool -m ANALOG_CONTROL ADC0_STOP ADC1_STOP Advamation AdvaBoard RPi1 tool, V2014-01-29, (c) Advamation (info@advamation.de) analog-control: 0x0000000f OK.
C-Funktionen (Dokumentation):
am_rpi_advaboard_analog_status(...) am_rpi_advaboard_analog_control(...) am_rpi_advaboard_analogins_read(...) am_rpi_advaboard_analogin_read(...)
8.8.2 Analog-Ausgänge (IDA0..1)
Die I/Os 0.4 und 0.5 können entweder als Digital-I/Os oder als Analog-Ausgänge verwendet werden. Als Analog-Ausgänge liefern sie einen einstellbaren Strom in 4 umschaltbaren Bereichen.
Auflösung | 8 Bit |
Ausgangs-Strombereich | 0..0.25 / 0.5 / 1.0 / 2.0mA |
max. Ausgangs-Spannung
|
2.0V |
("output compliance range")
|
Kommandozeilenprogramm:
sudo am_rpi_advaboard_tool -m ANALOG_CONTROL control ... # control: # IDA0_DISABLE, IDA0_ENABLE, # IDA1_DISABLE, IDA1_ENABLE sudo am_rpi_advaboard_tool -m ANALOG_STATUS sudo am_rpi_advaboard_tool -m ANALOGOUT_WRITE [0..1] value scale sudo am_rpi_advaboard_tool -m ANALOGOUT_READ [0..1]
z.B.:
Analog-Ausgang 0 konfigurieren:
$ sudo am_rpi_advaboard_tool -m ANALOG_CONTROL IDA0_ENABLE Advamation AdvaBoard RPi1 tool, V2014-01-29, (c) Advamation (info@advamation.de) analog-control: 0x00002000 OK.
Analog-Status lesen:
$ sudo am_rpi_advaboard_tool -m ANALOG_STATUS Advamation AdvaBoard RPi1 tool, V2014-01-29, (c) Advamation (info@advamation.de) analog-status: 0x44 0xf7 0x10 0x00 ADC0: idle/stop, oneshot, value ok, no error ADC1: idle/stop, oneshot, value ok, no error ADC2: sampling, continuous, value ok, no error ADC3: sampling, continuous, value ok, OV/UV ADC4: idle/stop, oneshot, value invalid, no error IDA0: ENABLED IDA1: disabled PWM0: disabled PWM1: disabled OK.
Analog-Ausgang IDA0 auf 0.063mA (=0.5mA * 0x20/256) setzen:
$ sudo am_rpi_advaboard_tool -m ANALOGOUT_WRITE 0 0x20 1 Advamation AdvaBoard RPi1 tool, V2014-01-29, (c) Advamation (info@advamation.de) OK.
Analog-Ausgangs-Werte lesen:
$ sudo am_rpi_advaboard_tool -m ANALOGOUT_READ Advamation AdvaBoard RPi1 tool, V2014-01-29, (c) Advamation (info@advamation.de) IDA0: 0x20 / 32, 0..0.5mA IDA1: 0xff / 255, 0..2.0mA OK.
Analog-Ausgang IDA0 deaktivieren / als Digital-I/O verwenden:
$ sudo am_rpi_advaboard_tool -m ANALOG_CONTROL IDA0_DISABLE Advamation AdvaBoard RPi1 tool, V2014-01-29, (c) Advamation (info@advamation.de) analog-control: 0x00001000 OK.
C-Funktionen (Dokumentation):
am_rpi_advaboard_analog_status(...) am_rpi_advaboard_analog_control(...) am_rpi_advaboard_analogouts_write(...) am_rpi_advaboard_analogouts_read(...) am_rpi_advaboard_analogout_write(...) am_rpi_advaboard_analogout_read(...)
8.8.3 PWM-Frequenz-/Ausgänge (PWM0..1)
Die I/Os 0.6 und 0.7 können entweder als Digital-I/O oder als PWM- bzw. Rechteckfrequenz-Ausgänge genutzt werden. Als PWM-Ausgänge besitzen sie 3 verschiedene Modi:
Modus | Bedeutung | Frequenz/Wiederholfrequenz |
---|---|---|
PWM8 | 8-Bit-PWM | 95.7kHz / PWM-Frequenzteiler |
PWM16 | 16-Bit-PWM | 373.84Hz / PWM-Frequenzteiler |
FREQ | Frequenz-Ausgang | 12.25MHz / 1..256 / PWM-Frequenzteiler |
Zudem kann der Frequenzteiler der beiden Ausgänge eingestellt werden:
- PWM-Frequenzteiler = Vorteiler * Teiler
- Vorteiler: 1, 2, 12, 48
- Teiler: 1..256
Zu beachten ist hierbei, dass die tatsächliche Frequenz fertigungsbedingt um bis zu ca. 2% vom angegebenen Wert abweichen kann.
Ein PWM-Wert von 0 entspricht einem 100% High-Pegel, ein PWM-Wert von 0xFF (PWM8) bzw. 0xFFFF (PWM16) entspricht einem 99.6% bzw. 99.998% Low-Pegel. Um einen 100% Low-Pegel zu erreichen, muss der entsprechende Digital-Ausgang auf 0 (low/clr) gesetzt werden.
Als PWM-/Frequenzwert wird immer ein 16-Bit Wert verwendet; die Modi PWM8 und FREQ verwenden davon nur das höherwertige Byte.
Kommandozeilenprogramm:
sudo am_rpi_advaboard_tool -m PWM_CONTROL control ... # control: # PWM0_DISABLE, PWM0_PWM8, PWM0_PWM16, PWM0_FREQ, # PWM1_DISABLE, PWM1_PWM8, PWM1_PWM16, PWM1_FREQ sudo am_rpi_advaboard_tool -m ANALOG_STATUS sudo am_rpi_advaboard_tool -m PWM_CLK clkdiv prescaler sudo am_rpi_advaboard_tool -m PWM_CLK_READ sudo am_rpi_advaboard_tool -m PWM_WRITE i value sudo am_rpi_advaboard_tool -m PWM_READ [0..1]
z.B.:
I/O 0.6 als PWM8 und I/O 0.7 als Frequenzausgang verwenden:
$ sudo am_rpi_advaboard_tool -m PWM_CONTROL PWM0_PWM8 PWM1_FREQ Advamation AdvaBoard RPi1 tool, V2014-01-29, (c) Advamation (info@advamation.de) analog-control: 0x4020000 OK.
PWM-Status abfragen:
$ sudo am_rpi_advaboard_tool -m ANALOG_STATUS Advamation AdvaBoard RPi1 tool, V2014-01-29, (c) Advamation (info@advamation.de) analog-status: 0x44 0x7f 0x00 0x02 ADC0: idle/stop, oneshot, value ok, no error ADC1: idle/stop, oneshot, value ok, no error ADC2: sampling, continuous, value ok, OV/UV ADC3: sampling, continuous, value ok, no error ADC4: idle/stop, oneshot, value invalid, no error IDA0: disabled IDA1: disabled PWM0: 8-bit PWM PWM1: freq. out OK.
PWM-Frequenzteiler abfragen:
$ sudo am_rpi_advaboard_tool -m PWM_CLK_READ Advamation AdvaBoard RPi1 tool, V2014-01-29, (c) Advamation (info@advamation.de) PWM clock: 0xff, prescaler 1 - PWM8: 373.84 Hz - PWM16: 1.46 Hz - FREQ: 186.92..47851.56 Hz OK.
PWM-/Frequenzausgang einstellen:
$ sudo am_rpi_advaboard_tool -m PWM_WRITE 0 0x2000 Advamation AdvaBoard RPi1 tool, V2014-01-29, (c) Advamation (info@advamation.de) OK. $ sudo am_rpi_advaboard_tool -m PWM_WRITE 1 0x3000 Advamation AdvaBoard RPi1 tool, V2014-01-29, (c) Advamation (info@advamation.de) OK.
PWM-Werte zurücklesen:
$ sudo am_rpi_advaboard_tool -m PWM_READ Advamation AdvaBoard RPi1 tool, V2014-01-29, (c) Advamation (info@advamation.de) PWM0: 0x2000 (PWM8 12.89%, PWM16 12.5015%) PWM1: 0x3000 (PWM8 19.14%, PWM16 18.7515%) OK.
PWM0-Ausgang (I/0 0.6) auf 100%-low setzen:
$ sudo am_rpi_advaboard_tool -m IO_CLR 0x06 Advamation AdvaBoard RPi1 tool, V2014-01-29, (c) Advamation (info@advamation.de) OK.
PWM0-Ausgang (I/0 0.6) zurück auf eingestellten PWM-Wert setzen:
$ sudo am_rpi_advaboard_tool -m IO_SET 0x06 Advamation AdvaBoard RPi1 tool, V2014-01-29, (c) Advamation (info@advamation.de) OK.
C-Funktionen (Dokumentation):
am_rpi_advaboard_analog_status(...) am_rpi_advaboard_analog_control(...) am_rpi_advaboard_pwm_clk(...) am_rpi_advaboard_pwm_clk_read(...) am_rpi_advaboard_pwm_write(...) am_rpi_advaboard_pwm_read(...) am_rpi_advaboard_pwms_read(...)
8.8.4 Digital-I/Os 0.4..0.7 / 1.0..1.7
- I/O 0.4..0.7 (I/O-Mikrocontroller):
Die I/Os 0.4 bis 0.7 können als Digital-Eingänge, digitale Open-Collector-Ausgänge oder digitale Push-Pull-Ausgänge verwendet werden. Zudem können die I/Os 0.4 und 0.5 alternativ als Analog-Ausgänge, und die I/Os 0.6 und 0.7 als PWM-/Frequenzausgänge verwendet werden (siehe vorherige Abschnitte).
Digital-I/O-Konfiguration 0.4..0.7
Modus Bedeutung i Eingang, inkl. schwachem Pull-Up o Open-Collector-Ausgang, inkl. schwachem Pull-Up p Push-Pull-Ausgang - I/O 1.0..1.7 (CPLD):
Die Digital-I/Os 1.0 bis 1.7 sind an den CPLD angeschlossen, und können als (bistabile) Digital-Eingänge oder als Digital-Ausgänge verwendet werden.
Digital-I/O-Konfiguration I/O 1.0..1.7
Modus Bedeutung i Eingang, bistabil, ohne Pull-Up o Ausgang Beim Ausgang 1.0 gibt es hierbei eine Besonderheit: Dieser Ausgang kann sowohl als normaler Digital-Ausgang dienen, als auch einen vom Raspberry Pi generierten PWM ausgeben:
Der I/O 1.0-Wert und der Raspberry Pi-PWM-Ausgang werden im AdvaBoard RPi1 UND-verknüpft, und das Ergebnis am I/O 1.0-Pin ausgegeben, d.h.:
I/O 1.0 ist "high", wenn sowohl der I/O-Wert als auch der Raspberry Pi-Ausgang "high" sind,
I/O 1.0 ist "low", sobald der I/O-Wert oder der Raspberry Pi-Ausgang "low" sind.Um den I/O-Pin 1.0 als normalen Digital-Ausgang verwenden zu können, muss der Raspberry Pi-Ausgang auf "high" gesetzt werden:
# Kommandozeilenprogramm: # - ab Software-Version 2014-06-15: sudo am_rpi_advaboard_tool -m GPIO_WRITE ADVABOARD_RPi_PWM 1 # - alternativ bzw. bei älteren Software-Versionen: sudo am_rpi_advaboard_tool -m GPIO_WRITE 0x40000 1 # C: am_rpi_advaboard_gpio_write(ADVABOARD_RPi_PWM, 1);
Ab Software-Version 2014-06-15 geschieht dies automatisch bei der Initialisierung des AdvaBoard RPi1. (INIT bzw. am_rpi_advaboard_init()).
Um den I/O-Pin 1.0 als Raspberry Pi-PWM-Ausgang zu verwenden, muss der I/O 1.0-Wert auf "high" gesetzt und der Raspberry Pi-PWM entsprechend konfiguriert werden:
# I/O 1.0-Wert = high # - Kommandozeilenprogramm: sudo am_rpi_advaboard_tool -m IO_SET 0x10 # - C: am_rpi_advaboard_io_set(0x10); # Rasbperry Pi-PWM konfigurieren ...
Die Konfiguration der I/Os kann in den EEPROMs des AdvaBoard RPi1 gespeichert werden.
Ein Ausgangswert von "1" entspricht einem High-Pegel, ein Wert von "0" einem Low-Pegel.
Kommandozeilenprogramm:
sudo am_rpi_advaboard_tool -m IO_CONFIG iocfg [cpldiocfg] # iocfg: 4* i|o|p, bzw. -1 (=keine Änderung) # cpldiocfg: 8* i|o, bzw. -1 (=keine Änderung) sudo am_rpi_advaboard_tool -m IO_CONFIG_READ sudo am_rpi_advaboard_tool -m IO_WRITE output0 [output1] sudo am_rpi_advaboard_tool -m IO_READ sudo am_rpi_advaboard_tool -m IO_SET iobit sudo am_rpi_advaboard_tool -m IO_CLR iobit
z.B.:
I/O 0.4 und 0.5 als Eingang, 0.6 als Open-Collector-Ausgang, 0.7 als Push-Pull-Ausgang konfigurieren:
$ sudo am_rpi_advaboard_tool -m IO_CONFIG iiop Advamation AdvaBoard RPi1 tool, V2014-01-29, (c) Advamation (info@advamation.de) OK.
I/O 1.0-1.3 als Eingang, 1.4-1.7 als Ausgang, I/O 0.4-0.7 nicht verändern:
$ sudo am_rpi_advaboard_tool -m IO_CONFIG -- -1 iiiioooo Advamation AdvaBoard RPi1 tool, V2014-01-29, (c) Advamation (info@advamation.de) OK.
I/O-Konfiguration lesen:
$ sudo am_rpi_advaboard_tool -m IO_CONFIG_READ Advamation AdvaBoard RPi1 tool, V2014-01-29, (c) Advamation (info@advamation.de) IO 0.4 / IDA0: INPUT IO 0.5 / IDAT1 INPUT IO 0.6 / PWM0: OUTPUT_OPENDRAIN IO 0.7 / PWM1: OUTPUT_PUSHPULL IO 1.0 / CPLDIO0: INPUT IO 1.1 / CPLDIO1: INPUT IO 1.2 / CPLDIO2: INPUT IO 1.3 / CPLDIO3: INPUT IO 1.4 / CPLDIO4: OUTPUT IO 1.5 / CPLDIO5: OUTPUT IO 1.6 / CPLDIO6: OUTPUT IO 1.7 / CPLDIO7: OUTPUT OK.
Ausgänge 0.4..0.7 und 1.x auf "low" setzen:
$ sudo am_rpi_advaboard_tool -m IO_WRITE 0x0F 0x00 Advamation AdvaBoard RPi1 tool, V2014-01-29, (c) Advamation (info@advamation.de) OK.
I/Os lesen:
$ sudo am_rpi_advaboard_tool -m IO_READ Advamation AdvaBoard RPi1 tool, V2014-01-29, (c) Advamation (info@advamation.de) IOs: 0x8f 0xff IO 0.4 / IDA0: 0 IO 0.5 / IDA1 0 IO 0.6 / PWM0: 0 IO 0.7 / PWM1: 1 IO 1.0 / CPLDIO0: 1 IO 1.1 / CPLDIO1: 1 IO 1.2 / CPLDIO2: 1 IO 1.3 / CPLDIO3: 1 IO 1.4 / CPLDIO4: 0 IO 1.5 / CPLDIO5: 0 IO 1.6 / CPLDIO6: 0 IO 1.7 / CPLDIO7: 0 OK.
I/O 0.6 und 1.7 auf "low" setzen:
$ sudo am_rpi_advaboard_tool -m IO_CLR 0x06 $ sudo am_rpi_advaboard_tool -m IO_CLR 0x17
I/O 0.6 und 1.7 auf "high" setzen:
$ sudo am_rpi_advaboard_tool -m IO_SET 0x06 $ sudo am_rpi_advaboard_tool -m IO_SET 0x17
C-Funktionen (Dokumentation):
am_rpi_advaboard_io0_config(...) am_rpi_advaboard_io0_config_read(...) am_rpi_advaboard_io_write(...) am_rpi_advaboard_io_read1(...) am_rpi_advaboard_io_read2(...) am_rpi_advaboard_io_set(...) am_rpi_advaboard_io_clr(...) am_rpi_advaboard_io_get(...)
8.9 E-SPI
Die SPI-Schnittstelle bietet einen einfachen und sehr schnellen seriellen Datenbus. Sie eignet sich insbesondere für Peripherie, die eine hohe Datenrate oder kurze Latenzzeiten benötigt, z.B. externe CPLDs/FPGAs, Displays usw.
Der SPI auf dem AdvaBoard RPi1 ist um mehrere Adressleitungen und einen Interrupt erweitert, und wird deshalb zur besseren Unterscheidung "E-SPI" genannt.
Das AdvaBoard verwendet dabei:
- 5V Versorgungsspannung
- 3.3V Pegel, 5V-tolerant
- einstellbaren Takt zwischen 3.81kHz und 62.5 MHz
- 4 zusätzliche Adressleitungen (SEL0..3)
- einen optionalen Interrupt
Die zusätzliche Adressleitungen können entweder als normale Chip-Select-Leitungen verwendet werden, um insgesamt 4 SPI-Geräte anzusprechen, oder mit zusätzlichen Adressdekodern bis zu 16 Geräte adressieren. Damit ist der "E-SPI" ideal geeignet, um auf einfache Art und Weise per Flachbandkabel bis zu 16 externe Platinen an das AdvaBoard anzuschließen.
Steckverbinder: Wannenstecker, 10-polig, RM 2.54mm
E-SPI-Einbaustecker |
(Ansicht: Steckseite) |
Pin | Signal | Beschreibung |
---|---|---|
1 | +5V | Versorgung für externe Peripherie, schaltbar |
2 | SCK | SPI Taktleitung (serial clock) |
3 | MOSI | SPI Master out/Slave in |
4 | MISO | SPI Master in/Slave out / Interrupt |
5 | CS | SPI Chip Select |
6 | SEL0 | Adressleitung 0 |
7 | SEL1 | Adressleitung 1 |
8 | SEL2 | Adressleitung 2 |
9 | SEL3 | Adressleitung 3 |
10 | GND | Masse |
Kommandozeilenprogramm:
sudo am_rpi_advaboard_tool -m ESPI sel txdata... # sel: 0x00..0x0F / 0..15 sudo am_rpi_advaboard_tool -m ESPI_CLK clkdiv [clkcfg] # clkdiv: SPI-Frequenzteiler (4/8/16/.../65536), SPI-Takt = 250MHz/clkdiv # clkcfg: 0: Ruhezustand low, Shift bei fallender Flanke, Lesen bei steigender Flanke # 1: Ruhezustand low, Shift bei steigender Flanke, Lesen bei fallender Flanke # 2: Ruhezustand high, Shift bei steigender Flanke, Lesen bei fallender Flanke (Standard) # 3: Ruhezustand high, Shift bei fallender Flanke, Lesen bei steigender Flanke sudo am_rpi_advaboard_tool -m ESPI_SEL sel # sel: 0x00..0x0F / 0..15 sudo am_rpi_advaboard_tool -m ESPI_SEL_READ sudo am_rpi_advaboard_tool -m ESPI_INT_READ
z.B.:
E-SPI-Adressleitungen setzen: SEL0 und SEL1 high, SEL2 und SEL3 low (=Adresse 3):
$ sudo am_rpi_advaboard_tool -m ESPI_SEL 0b0011 Advamation AdvaBoard RPi1 tool, V2014-01-29, (c) Advamation (info@advamation.de) OK.
E-SPI-Adressleitungen lesen:
$ sudo am_rpi_advaboard_tool -m ESPI_SEL_READ Advamation AdvaBoard RPi1 tool, V2014-01-29, (c) Advamation (info@advamation.de) E-SPI SEL: 0x03 / 3 SEL0: 1 SEL1: 1 SEL2: 0 SEL3: 0 OK.
E-SPI-Kommunikation mit E-SPI-Adresse 5:
$ sudo am_rpi_advaboard_tool -m ESPI 5 0x12 0x34 Advamation AdvaBoard RPi1 tool, V2014-01-29, (c) Advamation (info@advamation.de) -> 0x12 0x34 <- 0xff 0xff OK.
C-Funktionen (Dokumentation):
am_rpi_advaboard_espi(...) am_rpi_advaboard_espi_clk(...) am_rpi_advaboard_espi_sel(...) am_rpi_advaboard_espi_sel_read(...)
8.9.1 E-SPI Interrupt
Im E-SPI ist eine Interrupt-Möglichkeit vorgesehen, damit E-SPI-Slaves z.B. signalisieren können, dass Daten zur Abholung bereitstehen, ohne dass ein ständiges "Polling" notwendig ist. Der Interrupt benötigt hierbei keine zusätzliche Leitung, sondern ist in die SPI-Leitungen (MISO + CS) integriert.
Um einen Interrupt auszulösen, muss der E-SPI-Slave die MISO-Leitung auf "low" ziehen, wenn die Chip-Select-Leitung "high" (=inaktiv) ist. Allerdings ist es hierbei wichtig, dass die MISO-Leitung sofort wieder freigegeben wird, sobald die Chip-Select-Leitung auf "low" wechselt, damit die Kommunikation anderer (E-)SPI-Slaves nicht beeinträchtigt wird.
In den E-SPI-Adressdekodern kann eine entsprechend schnelle Interruptlogik integriert werden.
Kommandozeilenprogramm:
sudo am_rpi_advaboard_tool -m ESPI_INT_READ
z.B.:
E-SPI-Interrupt lesen:
$ sudo am_rpi_advaboard_tool -m ESPI_INT_READ Advamation AdvaBoard RPi1 tool, V2014-01-29, (c) Advamation (info@advamation.de) ESPI-int: high (no interrupt) OK.
C-Funktionen (Dokumentation):
am_rpi_advaboard_espi_int_read(...)
8.10 I2C / SMBus
Der I2C-Bus [7] ist mittlerweile die Schnittstelle für digitale Sensoren, z.B. für Temperatursensoren, Temperatur-/Feuchtesensoren, Beschleunigungssensoren, Bewegungsmelder etc.
Das AdvaBoard RPi1 verwendet dabei:
- 3.3V Versorgungsspannung, max. 100mA
- 3.3V Pegel (nicht 5V-tolerant!)
- eine separate Leitung für die Versorgung per Batterie
- eine Interrupt-Leitung für schnelle Reaktionszeiten und das Aufwecken des AdvaBoards/Raspberry Pis bei bestimmten Ereignissen (ähnlich SMBus #ALERT)
- einen optionalen CRC (SMBus PEC)
Die Steckerbelegung wurde dabei so gewählt, dass das Übersprechen zwischen SDA, SCL und der Interrupt-Leitung möglichst gering ist.
Die Stromaufnahme aller angschlossenen 3.3V-Geräte darf 100mA nicht überschreiten. Die I2C-Adressen 8 und 9 sind durch das AdvaBoard RPi1 bereits belegt und können nicht für externe I2C-Sensoren bzw. -Geräte verwendet werden.
[7] | Für den I2C-Bus werden teilweise auch andere Namen (z.B. TWI / Two Wire Interface) verwendet. Zudem existiert mit dem SMBus ein vom I2C abgeleiteter, sehr ähnlicher Bus, wobei viele Geräte sowohl am I2C als auch am SMBus verwendet werden können. In dieser Anleitung wird der Einfachheit halber immer der Begriff I2C als Oberbegriff für diese Busse verwendet. |
Steckverbinder: Wannenstecker, 6-polig, RM 2.54mm
I2C-Einbaustecker |
(Ansicht: Steckseite) |
Pin | Signal | Beschreibung |
---|---|---|
1 | GND | Masse |
2 | SDA | Datenleitung (serial data) |
3 | +3.3V | Versorgung für externe Sensoren
max. 100mA zusammen mit I/Os (Pin 1+19) und RS-232-TTL Pin 2
|
4 | SCL | Taktleitung (serial clock) |
5 | +VBATT | Batterieversorgung für spezielle externe Sensoren |
6 | INT/ALERT | Interrupt-Eingang, low-active |
Kommandozeilenprogramm:
sudo am_rpi_advaboard_tool -m I2C rxlen addr txdata... sudo am_rpi_advaboard_tool -m I2C_CLK clk # clk: I2C-Frequenzteiler 2/4/8...65536, I2C-Takt = 250MHz/clk # bzw. 5/10/20/50/100/200/300/400kHz
z.B.:
I2C-Takt auf 100 kHz setzen:
$ sudo am_rpi_advaboard_tool -m I2C_CLK 100kHz Advamation AdvaBoard RPi1 tool, V2014-01-29, (c) Advamation (info@advamation.de) OK.
per I2C (mit dem I/O-Controller) kommunizieren:
$ sudo am_rpi_advaboard_tool -m I2C 7 9 1 0x10 Advamation AdvaBoard RPi1 tool, V2014-01-29, (c) Advamation (info@advamation.de) -> ADR 0x09 DATA 0x01 0x10 <- 0x05 0x11 0x16 0x02 0x33 0x16 0x09 OK.
C-Funktionen (Dokumentation):
am_rpi_advaboard_i2c(...) am_rpi_advaboard_i2c_clk(...)
8.10.1 CRC / SMBus PEC
Der I2C des AdvaBoard RPi1 kann optional einen CRC (entsprechend der SMBus PEC-Definition) verwenden. Um Übertragungsfehler, die z.B. durch elektrische Störungen ausgelöst werden können, zu erkennen, sollte deshalb immer ein CRC verwendet und überprüft werden, sofern das I2C-Gerät dies unterstützt.
C-Funktionen (Dokumentation):
am_crc_smbus(...)
8.10.2 I2C-Interrupt
Der I2C auf dem AdvaBoard RPi1 enthält eine Interruptleitung, so dass entsprechende I2C-Geräte einen Interrupt auslösen können, sobald z.B. Daten zur Abholung bereitstehen, oder in einem Sensor eingestellte Grenzwerte überschritten werden, ohne dass ein ständiges "Polling" notwendig ist.
Die Interruptleitung ist standardmäßig high, und muss nach low gezogen werden, um einen Interrupt auszulösen.
Kommandozeilenprogramm:
sudo am_rpi_advaboard_tool -m I2C_INT_READ sudo am_rpi_advaboard_tool -m I2C_F912INT_CLEAR
z.B.:
I2C-Interruptleitung lesen:
$ sudo am_rpi_advaboard_tool -m I2C_INT_READ Advamation AdvaBoard RPi1 tool, V2014-06-25, (c) Advamation (info@advamation.de) I2C-int: no interrupt (high) OK.
I2C-Interruptsignal des Power-Mikrocontrollers zurücksetzen:
$ sudo am_rpi_advaboard_tool -m I2C_F912INT_CLEAR Advamation AdvaBoard RPi1 tool, V2014-01-29, (c) Advamation (info@advamation.de) OK.
C-Funktionen (Dokumentation):
am_rpi_advaboard_i2c_int_read(...) am_rpi_advaboard_i2c_f912int_clear(...)
Zusätzlich wird die I2C-Interruptleitung genutzt, um bei Verwendung eines ein-/ausschaltbaren Netzteils im Batteriebetrieb (Power-Management-Modus 0) das AdvaBoard RPi durch ein spezielles, externes I2C-Gerät aufwecken zu können. Da bei abgeschaltetem Netzteil die I2C-Leitungen low sind (um zu vermeiden, dass stromlose I2C-Geräte durch die Datenleitungen mit Strom versorgt werden), muss als Aufweck-Signal deshalb kurz ein High-Pegel an die I2C-Interruptleitung angelegt werden.
8.10.3 I2C-Clock-Stretching-Workaround
Der I2C-Bus des Raspberry Pis enthält einen Fehler, der dazu führen kann, dass (a) die Kommunikation mit manchen I2C-Geräten unmöglich wird und (b) die gelesenen oder geschriebenen Daten verfälscht werden. Details zu diesem Fehler sind auf unserer entsprechenden Webseite zum Raspberry Pi I2C-Fehler zu finden.
In vielen Fällen kann dieser Fehler jedoch umgangen werden, indem zu kurze "I2C-Clock-Stretches" vermieden werden. Beim AdvaBoard RPi1 kann deshalb:
- die minimale "Clock-Stretching-Zeit" eingestellt werden (Standardeinstellung: passend für 100kHz); kürzere Clock-Stretches werden dann automatisch entsprechend verlängert
- die Adressen eingestellt werden, für die das Clock-Stretching verlängert werden soll (per Adresse und Adressmaske)
Kommandozeilenprogramm:
sudo am_rpi_advaboard_tool -m I2C_CLKEXT delay # delay: min. Delay-Zeit in 1.306ms, z.B. 8 für >= 100kHz sudo am_rpi_advaboard_tool -m I2C_CLKEXT_READ sudo am_rpi_advaboard_tool -m I2C_CLKEXTINJ mask addr # mask, addr: Clock-Stretching nur anpassen, falls # mask & addr == Geräteadresse & mask, z.B. # 0xFF 0xFF = deaktiviert, # 0x00 0x00 = für alle Adressen aktiviert sudo am_rpi_advaboard_tool -m I2C_CLKEXTINJ_READ
z.B.:
Clock-Stretching auf 100 kHz einstellen (Standardeinstellung):
$ sudo am_rpi_advaboard_tool -m I2C_CLKEXT 8
Clock-Stretching-Zeit lesen:
$ sudo am_rpi_advaboard_tool -m I2C_CLKEXT_READ Advamation AdvaBoard RPi1 tool, V2014-01-29, (c) Advamation (info@advamation.de) I2C-clock-stretching-delay F912/inj.: 0x08 / 8, for >= 95.7 kHz I2C-clock-stretching-delay F353: 0x08 / 8, for >= 95.7 kHz OK.
Clock-Stretching für alle externen I2C-Geräte deaktivieren:
$ sudo am_rpi_advaboard_tool -m I2C_CLKEXTINJ 0xFF 0xFF Advamation AdvaBoard RPi1 tool, V2014-01-29, (c) Advamation (info@advamation.de) OK.
Clock-Stretching für alle externen I2C-Geräte aktivieren:
$ sudo am_rpi_advaboard_tool -m I2C_CLKEXTINJ 0x00 0x00 Advamation AdvaBoard RPi1 tool, V2014-01-29, (c) Advamation (info@advamation.de) OK.
Clock-Stretching-Adresskonfiguration lesen:
$ sudo am_rpi_advaboard_tool -m I2C_CLKEXTINJ_READ Advamation AdvaBoard RPi1 tool, V2014-01-29, (c) Advamation (info@advamation.de) I2C-clock-stretching-injection: mask 0x00, address 0x00 / 0b........ OK.
8.10.4 Advamation RS-485-/I2C-Protokoll
Die von uns vertriebenen I2C-Geräte, die einen Mikrocontroller enthalten, verwenden normalerweise zur Kommunikation unser Advamation RS-485-/I2C-Protokoll, inklusive eines CRCs. Das Protokoll, die CRC-Generierung und -Überprüfung sind dabei in einer Funktion gekapselt.
Kommandozeilenprogramm:
sudo am_rpi_advaboard_tool -m I2C_PROT addr cmd txdata...
z.B.:
per I2C (mit dem I/O-Controller) kommunizieren:
$ sudo am_rpi_advaboard_tool -m I2C_PROT 9 0x10 Advamation AdvaBoard RPi1 tool, V2014-01-29, (c) Advamation (info@advamation.de) -> ADR 0x09, CMD 0x10, DATA <- DATA 0x11 0x16 0x02 0x33 0x16 OK.
C-Funktionen (Dokumentation):
am_rpi_advaboard_i2c_prot(...)
8.11 RS-485 / RS-232
Das AdvaBoard RPi1 enthält eine RS-485- und eine RS-232-TTL-Schnittstelle, die beide an die RS-232-Schnittstelle des Raspberry Pi angebunden sind, sowie einen Umschalter zwischen diesen Schnittstellen.
Kommandozeilenprogramm:
sudo am_rpi_advaboard_tool -m RS485_CFG RS485|RS232 sudo am_rpi_advaboard_tool -m RS485_CFG_READ
z.B.:
RS-232-TTL-Schnittstelle auswählen:
$ sudo am_rpi_advaboard_tool -m RS485_CFG RS232 Advamation AdvaBoard RPi1 tool, V2014-01-29, (c) Advamation (info@advamation.de) OK.
RS-485-Schnittstelle auswählen:
$ sudo am_rpi_advaboard_tool -m RS485_CFG RS485 Advamation AdvaBoard RPi1 tool, V2014-01-29, (c) Advamation (info@advamation.de) OK.
Konfiguration zurücklesen:
$ sudo am_rpi_advaboard_tool -m RS485_CFG_READ Advamation AdvaBoard RPi1 tool, V2014-01-29, (c) Advamation (info@advamation.de) interface: RS-485 speed: 0x06a5, for baudrate ~115226 bit9-inj.: ENABLED OK.
C-Funktionen (Dokumentation):
am_rpi_advaboard_rs485_cfg(...) am_rpi_advaboard_rs485_cfg_read(...)
8.11.1 RS-485 / EIA-485
Die RS-485-Schnittstelle ist eine störfeste Industrieschnittstelle, an die als Bus (evtl. mittels Hubs) mehrere Geräte angeschlossen werden können, und die auch für die Überbrückung langer Distanzen geeignet ist.
Das AdvaBoard enthält eine RS-485-Schnittstelle mit automatischer Richtungsumschaltung, einen RS-485-Leitungs-Terminator, sowie eine optionale automatische 9.Bit-Modifikation.
- Terminator:
RS-485-Leitungs-Terminator, per Steckbrücke ("TERM") aktivierbar/deaktivierbar
(Widerstand 680 Ω, 120 Ω, 680 Ω) - automatische Richtungsumschaltung: Die RS-485-Kommunikationsrichtung wird mit Hilfe eines Timeouts automatisch umgeschaltet. Der Timeout wird hierbei aus der einstellbaren Kommunikationsgeschwindigkeit errechnet.
- 9.Bit-Modifikation: Für die Kommunikation mit einigen Mikrocontrollern und Geräten (und auch für das Advamation RS-485-Protokoll) wird das 9. Bit einer Kommunikations als "Adressmarker" verwendet. Das AdvaBoard RPi1 kann diese Modifikation des 9. Bits automatisch vornehmen. Das Parity-Bit der seriellen Schnittstelle des Raspberry Pi muss dann auf "space parity" eingestellt sein.
Da die RS-485-Schnittstelle mit der RS-232-Schnittstelle des Raspberry Pi verbunden ist, kann die RS-485-Schnittstelle exakt genauso wie eine normale RS-232-Schnittstellen angesprochen werden (z.B. per minicom bzw. das /dev/ttyAMA0-Device des Raspberry Pi).
Steckverbinder: Printstecker, 4-polig, RM 2.54mm
RS-485-Einbaustecker | RS-485-Kabel |
(Ansicht: Steckseite) |
Pin | Signal | Farbe [8] | Beschreibung |
---|---|---|---|
1 | +12V/NC | nicht verbunden | |
2 | RS-N | braun | RS-485 im Ruhezustand negativere Leitung (ca. 2V gegen GND) |
3 | RS-P | orange | RS-485 im Ruhezustand positivere Leitung (ca. 3V gegen GND) |
4 | GND | schwarz | Masse |
[8] | Aderfarbe im RS-485-Kabel des AdvaBoard RPi1-Zubehörsets |
Kommandozeilenprogramm:
sudo am_rpi_advaboard_tool -m RS485_CFG RS485|RS232 speed bit9 # speed: 0..0xFFFF, speed = 196 000 000 / baudrate # bit9: 0=keine 9.Bit-Modification, 1=9.Bit-Modification aktivieren sudo am_rpi_advaboard_tool -m RS485_CFG_READ
z.B.:
RS-485 auswählen, Geschwindigkeit (für die automatische Richtungsumschaltung) auf 9600 kbps setzen, 9.Bit-Modifikation deaktivieren:
$ sudo am_rpi_advaboard_tool -m RS485_CFG RS485 20417 0 Advamation AdvaBoard RPi1 tool, V2014-01-29, (c) Advamation (info@advamation.de) OK.
RS-485-Konfiguration lesen:
$ sudo am_rpi_advaboard_tool -m RS485_CFG_READ Advamation AdvaBoard RPi1 tool, V2014-01-29, (c) Advamation (info@advamation.de) interface: RS-485 speed: 0x4fc1, for baudrate ~9599 bit9-inj.: DISABLED OK.
RS-485 auswählen, Geschwindigkeit (für die automatische Richtungsumschaltung) auf 115200 kbps setzen, 9.Bit-Modifikation aktivieren (=Standardeinstellung im Auslieferungszustand):
$ sudo am_rpi_advaboard_tool -m RS485_CFG RS485 1701 1 Advamation AdvaBoard RPi1 tool, V2014-01-29, (c) Advamation (info@advamation.de) OK.
RS-485-Konfiguration lesen:
$ sudo am_rpi_advaboard_tool -m RS485_CFG_READ Advamation AdvaBoard RPi1 tool, V2014-01-29, (c) Advamation (info@advamation.de) interface: RS-485 speed: 0x06a5, for baudrate ~115226 bit9-inj.: ENABLED OK.
8.11.2 Advamation RS-485-/I2C-Protokoll
Die von uns vertriebenen RS-485-Geräte verwenden normalerweise zur Kommunikation unser Advamation RS-485-/I2C-Protokoll, inklusive CRC. Das Protokoll, die CRC-Generierung und -Überprüfung usw. sind dabei in einer Funktion gekapselt.
- Kommandozeilenprogramm:
- (folgt demnächst)
- C-Funktionen:
- (folgt demnächst)
8.11.3 RS-232 TTL
An die integrierte RS-232-Schnittstelle mit TTL-Pegeln kann verschiedene Peripherie, z.B. ein GPS- oder Funkmodul, angeschlossen werden.
Zudem ist ein Pegelwandler verfügbar, der diese Schnittstelle in eine "normale" RS-232-Schnittstelle (mit 9pol. D-Sub-Steckverbinder) verwandelt, sowie ein USB-RS232-Adapterkabel, das diese Schnittstelle an USB adaptiert.
Der RS-232-Steckverbinder des AdvaBoard RPi1 führt dabei direkt die RS-232-Schnittstelle des Raspberry Pi auf einen eigenen Steckverbinder heraus. Die Kommunikation über die RS-232-Schnittstelle funktioniert daher exakt genauso wie mit anderen RS-232-Schnittstellen (z.B. per minicom bzw. das /dev/ttyAMA0-Device des Raspberry Pi).
Steckverbinder: Printstecker, 5-polig, RM 2.54mm
RS-232-Einbaustecker | RS-232-Kabel |
(Ansicht: Steckseite) |
Pin | Signal | Farbe [9] | Beschreibung |
---|---|---|---|
1 | +5V | rot | Versorgung für externe Peripherie, schaltbar |
2 | +3.3V | gelb | Versorgung für externe Peripherie
max. 100mA zusammen mit I/Os (Pin 1+19) und externen I2C-Geräten
|
3 | GND | schwarz | Masse |
4 | RX | braun | Receive Data, 0..3.3V, 5V-tolerant |
5 | TX | orange | Transmit Data, 0..3.3V, 5V-tolerant |
[9] | Aderfarbe im RS-232-Kabel des AdvaBoard RPi1-Zubehörsets |
8.12 Raspberry Pi
Das AdvaBoard RPi1 wird normalerweise an einen Raspberry Pi angeschlossen und von diesem konfiguriert und gesteuert. Informationen zum Anschluss des AdvaBoard RPi1 an den Raspberry Pi finden Sie im Abschnitt Raspberry Pi-Anschluss.
Steckverbinder: Wannenstecker, 26-polig, RM 2.54mm
Raspberry Pi-Einbaustecker |
(Ansicht: Steckseite) |
Pin | Signal | Beschreibung |
---|---|---|
1 | 3.3V | 3.3V-Signal vom Raspberry Pi |
2 | 5V | Versorgung, 5V |
3 | SDA | I2C-Datenleitung |
4 | 5V | Versorgung, 5V |
5 | SCL | I2C-Taktleitung |
6 | GND | Masse |
7 | I2CINT | I2C-Interrupt |
8 | TX | Transmit Data |
9 | GND | Masse |
10 | RX | Receive Data |
11 | CPLD_P11 | CPLD-I/O |
12 | CPLD_P12 | CPLD-I/O |
13 | CPLD_P13 | CPLD-I/O |
14 | GND | Masse |
15 | CPLD_P15 | CPLD-I/O |
16 | CPLD_P16 | CPLD-I/O |
17 | 3.3V / NC | nicht angeschlossen |
18 | CPLD_P18 | CPLD-I/O |
19 | MOSI | SPI Master out/Slave in |
20 | GND | Masse |
21 | MISO | SPI Master in/Slave out |
22 | CPLD_P22 | CPLD-I/O |
23 | SCK | SPI Takt |
24 | CE0 | SPI Chip-Select 0 |
25 | GND | Masse |
26 | CE1 | SPI Chip-Select 1 |
8.13 TFT-Display / Touchscreen
An das AdvaBoard RPi1 kann ein TFT-Display inkl. Touchscreen angeschlossen werden. Weitere Informationen hierzu finden Sie auf der TFT-Display-Seite und in der TFT-Display-Anleitung.
Steckverbinder: Pfostenbuchse, 40-polig, RM 2.54mm
TFT-Display-Einbaubuchse |
(Ansicht: Steckseite) |
Pin | Signal | Beschreibung |
---|---|---|
1 | TFT_DB0 | Display-Datenbus |
2 | GND | Masse |
3 | TFT_DB1 | Display-Datenbus |
4 | +3.3V | Display-Versorgungsspannung (3.3V) |
5 | TFT_DB2 | Display-Datenbus |
6 | – | – |
7 | TFT_DB3 | Display-Datenbus |
8 | TFT_RS | Display-Steuerleitung |
9 | TFT_DB4 | Display-Datenbus |
10 | TFT_WR | Display-Steuerleitung |
11 | TFT_DB5 | Display-Datenbus |
12 | TFT_RD | Display-Steuerleitung |
13 | TFT_DB6 | Display-Datenbus |
14 | TFT_DB8 | Display-Datenbus |
15 | TFT_DB7 | Display-Datenbus |
16 | TFT_DB9 | Display-Datenbus |
17 | TP_SCK | Touchscreen Takteingang |
18 | TFT_DB10 | Display-Datenbus |
19 | TP_CS | Touchscreen Chip-Select |
20 | TFT_DB11 | Display-Datenbus |
21 | TP_MOSI | Touchscreen MOSI |
22 | TFT_DB12 | Display-Datenbus |
23 | – | – |
24 | TFT_DB13 | Display-Datenbus |
25 | TP_MISO | Touchscreen MISO |
26 | TFT_DB14 | Display-Datenbus |
27 | TP_IRQ | Touchscreen Interrupt |
28 | TFT_DB15 | Display-Datenbus |
29 | SD_MISO | SD-Karte MISO |
30 | TFT_CS | Display-Steuerleitung |
31 | SD_SCK | SD-Karte Takteingang |
32 | – | – |
33 | SD_MOSI | SD-Karte MOSI |
34 | TFT_RESET | Display-Steuerleitung |
35 | SD_CS | SD-Karte Chip-Select |
36 | LED_5V | Hintergrundbeleuchtung (5V) |
37 | – | – |
38 | LED_R | Hintergrundbeleuchtung (5V + Vorwiderstand) |
39 | – | – |
40 | – | – |
8.14 JTAG/C2-Ausgang
Das AdvaBoard besitzt einen JTAG- und C2-Ausgang, mit dem bestimmte Xilinx CPLDs/FPGAs und bestimmte SiLabs C8051-Mikroprozessoren programmiert werden können. Damit ist z.B. für externe Xilinx-CPLD- oder SiLabs-Mikrocontroller-Platinen kein separates Programmiergerät mehr notwendig.
Zudem ist es möglich, darüber Firmware-Updates in das AdvaBoard einzuspielen, z.B. um später weitere Funktionen nachzurüsten oder das AdvaBoard auf spezielle Anwendungen anzupassen.
8.15 EEPROM
Der Power-Mikrocontroller und der I/O-Mikrocontroller enthalten je eine Art EEPROM, in dem die Konfiguration abgespeichert werden kann. Damit muss das AdvaBoard RPi1 nur einmal konfiguriert werden, und bei jedem Neustart wird die Konfiguration aus dem EEPROM geladen.
Die gespeicherte Konfiguration enthält dabei:
- Power-Mikrocontroller (F912):
- Kommunikations-Parameter (v.a. I2C-Clock-Stretching-Konfiguration)
- I/O-, Power- und Echtzeituhr-Zustand nach einem Reset
- Konfiguration der ereignisgesteuerten Automatisierung
- I/O-Mikrocontroller (F353):
- Kommunikations-Parameter (v.a. RS-485-Geschwindigkeit und interne I2C-Clock-Stretching-Konfiguration)
- I/O-Konfiguration der I/Os 0.4..0.7 und 1.0..1.7
- PWM-Taktfrequenz
- I/O-Zustand, aktivierte Datenleitungen, RS-485-/RS-232-Konfiguration nach einem Reset
- Konfiguration der ereignisgesteuerten Automatisierung
Kommandozeilenprogramm:
sudo am_rpi_advaboard_tool -m EEPROM_F912_STORE sudo am_rpi_advaboard_tool -m EEPROM_F353_STORE
z.B.:
aktuelle Konfiguration des I/O-Mikrocontrollers speichern:
$ sudo am_rpi_advaboard_tool -m EEPROM_F912_STORE Advamation AdvaBoard RPi1 tool, V2014-01-29, (c) Advamation (info@advamation.de) OK.
aktuelle Konfiguration des Power-Mikrocontroller speichern:
$ sudo am_rpi_advaboard_tool -m EEPROM_F353_STORE Advamation AdvaBoard RPi1 tool, V2014-01-29, (c) Advamation (info@advamation.de) OK.
C-Funktionen (Dokumentation):
am_rpi_advaboard_f912_store(...) am_rpi_advaboard_f353_store(...)
8.16 Ereignisgesteuerte Automatisierung
Die Mikrocontroller des AdvaBoard RPi1 enthalten eine sogenannte "ereignisgesteuerte Automatisierung" (engl.: event-based automation), wodurch (a) der Zustand nach einem (Power-On-)Reset festgelegt und (b) das AdvaBoard RPi1 auf bestimmte "Ereignisse" selbständig (d.h. ohne den Raspberry Pi) und sehr schnell reagieren kann.
Beispielsweise wäre es dadurch möglich, selbständig die Digital-Eingänge zu überwachen und bei einer Änderung einen I2C-Interrupt auszulösen, einen Analog-Eingang einzulesen sobald ein Schalter gedrückt wird, einen angeschlossenen Motor zu stoppen sobald dieser einen Endschalter erreicht, oder den Raspberry Pi zu einer bestimmten Uhrzeit einzuschalten.
Dadurch können die Echtzeitanforderungen (=schnelle Reaktionszeit auf ein Ereignis) an den Raspberry Pi deutlich reduziert und viele Aufgaben vereinfacht werden.
Der Einschalt-Zustand des AdvaBoards wird ebenfalls über dieses System, bzw. einen dort vorhandenen "Power-On-Reset-Event-Handler", festgelegt.
Die Automatisierung besteht aus zwei Teilen:
- Events: Jeder Mikrocontroller hat eine bestimmte Anzahl an konfigurierbaren "Events". Ein Event kann dabei je nach Konfiguration z.B. ein sich ändernder Digital-Eingang oder ein Alarm der Echtzeituhr sein. Für jedes Event kann zudem eingestellt werden, welchen "Handler" es aufrufen soll.
- Handler: Jeder Mikrocontroller hat eine bestimmte Anzahl an konfigurierbaren "Handlern". Für jeden Handler kann eingestellt werden, welche Aktionen dieser auslösen soll, z.B. das Setzen eines Digital-Ausgangs oder das Einlesen eines Analog-Eingangs.
Der Power-Mikrocontroller und der I/O-Mikrocontroller enthalten jeweils eine eigene derartige ereignisgesteuerte Automatisierung:
8.16.1 Power-Mikrocontroller
Der Power-Mikrocontroller kann die Stromkreise des AdvaBoard RPi1 ein- bzw. ausschalten, sobald ein Echtzeituhr-Alarm oder ein I2C-Interrupt auftritt.
- Events:
- Reset (ruft immer immer Handler 0 auf)
- 5V-Netzteil ausgeschaltet (ruft immer immer Handler 1 auf)
- 5V-Netzteil eingeschaltet (ruft immer immer Handler 2 auf)
- Echtzeituhr-Alarm 0
- Echtzeituhr-Alarm 1
- I2C-Interrupt
- Handler:
- 8 konfigurierbarer Handler (handler_pwr = 0..7)
- Handler 0: Setzt den Reset-Zustand.
- Handler 1: Setzt den Zustand nachdem das Netzteil ausgeschaltet wurde und der Power-Mikrocontroller von der Batterie versorgt wird.
- Handler 2: Setzt den Zustand, nachdem das Netzteil eingeschaltet wurde.
Die Handler können dabei folgende Aktionen ausführen:
- Stromkreise ein-/ausschalten
- I2C-Interrupt setzen
- A/D-Wandler konfigurieren (Spannungsmessung, Temperaturmessung)
- Echtzeituhr konfigurieren (starten/stoppen, Alarm ein-/ausschalten)
Damit kann z.B. der Raspberry Pi zu bestimmten Uhrzeiten eingeschaltet werden. Zudem wird in den Handlern 0, 1 und 2 festgelegt, welche Stromkreise standardmäßig nach einem (Power-On-)Reset, im Netzteilbetrieb und im Batteriebetrieb eingeschaltet sein sollen.
Standardeinstellungen (im Auslieferungszustand):
- Handler 0 (Reset):
Netzteil einschalten, Echtzeituhr starten, Echtzeituhr-Alarme deaktivieren und Alarm-Flags löschen, A/D-Wandler stoppen - Handler 1 (3V-Batteriebetrieb):
Netzteil ausschalten, A/D-Wandler stoppen - Handler 2 (5V-Netzteilbetrieb):
Netzteil einschalten, CPLD-Stromkreis einschalten, Raspberry Pi-Stromkreis einschalten
Die Details zu den einzelnen Funktionen finden Sie in der Software-Dokumentation.
Kommandozeilenprogramm (Details: siehe --help):
# Handler-Flags, manuelles starten eines Handlers: sudo am_rpi_advaboard_tool -m EVENTPWR_FLAGS sudo am_rpi_advaboard_tool -m EVENTPWR_CLEAR flags sudo am_rpi_advaboard_tool -m EVENTPWR_TRIGGER handler_pwr # Konfiguration der Handler-Aktionen: sudo am_rpi_advaboard_tool -m EVENTPWR_POWER_WRITE handler_pwr PWRON CPLD_3V PERIPHERAL_5V RPi TFT TFT_BL sudo am_rpi_advaboard_tool -m EVENTPWR_POWER_READ handler_pwr sudo am_rpi_advaboard_tool -m EVENTPWR_OUTPUT_WRITE handler_pwr MASK0 OUTPUT0 sudo am_rpi_advaboard_tool -m EVENTPWR_OUTPUT_READ handler_pwr sudo am_rpi_advaboard_tool -m EVENTPWR_ANALOGCONTROL_WRITE handler_pwr CONTROL0 CONTROL1 CONTROL2 sudo am_rpi_advaboard_tool -m EVENTPWR_ANALOGCONTROL_READ handler_pwr # Konfiguration der Events: sudo am_rpi_advaboard_tool -m EVENTPWR_I2CINT_WRITE handler_pwr_en sudo am_rpi_advaboard_tool -m EVENTPWR_I2CINT_READ sudo am_rpi_advaboard_tool -m RTC_ALARM_SET i handler_pwr TIME [PERIODIC] sudo am_rpi_advaboard_tool -m RTC_ALARM_READ i
C-Funktionen (Dokumentation):
am_rpi_advaboard_eventpwr_flags(...) am_rpi_advaboard_eventpwr_clear(...) am_rpi_advaboard_eventpwr_trigger(...) am_rpi_advaboard_eventpwr_output_write(...) am_rpi_advaboard_eventpwr_output_read(...) am_rpi_advaboard_eventpwr_analogcontrol_write(...) am_rpi_advaboard_eventpwr_analogcontrol_read(...) am_rpi_advaboard_eventpwr_power_write(...) am_rpi_advaboard_eventpwr_power_read(...) am_rpi_advaboard_eventpwr_i2cint_write(...) am_rpi_advaboard_eventpwr_i2cint_read(...) am_rpi_advaboard_rtc_alarm_write(...) am_rpi_advaboard_rtc_alarm_set(...) am_rpi_advaboard_rtc_alarm_read(...)
8.16.2 I/O-Mikrocontroller
Der I/O-Mikrocontroller kann Digital-Ausgänge setzen und Events aktivieren/deaktivieren, sobald sich ein Digital-Eingang ändert.
- Events:
- Reset (ruft immer immer Handler 0 auf)
- 4 konfigurierbare Events (event_io = 0..3), die die Digital-Eingänge I/O 0.4..0.7 und I/O 1.0..1.7 überwachen können.
- Handler:
- 4 konfigurierbare Handler (handler_io = 0..3)
- Handler 0: Setzt den Reset-Zustand.
Die Handler können dabei folgende Aktionen ausführen:
- Digital-Ausgänge auf 0 oder 1 setzen
- I2C-Interrupt setzen
- Datenleitungen aktivieren/deaktivieren
- zwischen RS-485 und RS-232 umschalten, RS-485 9.Bit-Modifikation aktivieren/deaktivieren
- Events aktivieren/deaktivieren
Standardeinstellungen (im Auslieferungszustand):
- Handler 0 (Reset):
alle Digital-Ausgänge auf "1" setzen, Datenleitungen zum E-SPI und TFT-Display deaktivieren und zum Raspberry Pi aktivieren, RS-485 auswählen, RS-485 9.Bit-Modifikation aktivieren, Events deaktivieren
Netzteil einschalten, Echtzeituhr starten, Echtzeituhr-Alarme deaktivieren
Die Details zu den einzelnen Funktionen finden Sie in der Software-Dokumentation.
Kommandozeilenprogramm (Details: siehe --help):
# Handler-Flags, manuelles starten eines Handlers: sudo am_rpi_advaboard_tool -m EVENTIO_FLAGS sudo am_rpi_advaboard_tool -m EVENTIO_CLEAR flags sudo am_rpi_advaboard_tool -m EVENTIO_TRIGGER handler_io # Konfiguration der Handler-Aktionen: EVENTIO_OUTPUT_WRITE handler_io MASK0 OUTPUT0 [MASK1 OUTPUT1 [MASK2 OUTPUT2]] EVENTIO_OUTPUT_READ handler_io EVENTIO_CONTROL_WRITE handler_io CONTROL EVENTIO_CONTROL_READ handler_io # Konfiguration der Events: EVENTIO_EVENT_WRITE event_io handler_io MASK0 INPUT0 MASK1 INPUT1 EVENTIO_EVENT_READ event_io
C-Funktionen (Dokumentation):
am_rpi_advaboard_eventio_flags(...) am_rpi_advaboard_eventio_clear(...) am_rpi_advaboard_eventio_trigger(...) am_rpi_advaboard_eventio_output_write(...) am_rpi_advaboard_eventio_output_read(...) am_rpi_advaboard_eventio_control_write(...) am_rpi_advaboard_eventio_control_read(...) am_rpi_advaboard_eventio_event_write(...) am_rpi_advaboard_eventio_event_read(...)
8.17 Locking / gleichzeitiger Zugriff mehrerer Programme
Häufig ist es notwendig, dass mehrere Programme gleichzeitig auf das AdvaBoard RPi1 zugreifen, z.B. jeweils ein Programm für die Display-Anzeige, das Touchpanel, die Echtzeituhr, ein externes E-SPI-Gerät usw.
Deshalb enthält die AdvaBoard RPi1-Software einen automatischen Locking-Mechanismus, der sicherstellt, dass mehrere Programme "gleichzeitig" auf eine Schnittstelle zuzugreifen können, ohne die Kommunikation der anderen Programme zu kompromittieren, ohne die Schnittstellen-Einstellungen der anderen Programme zu beeinflussen und ohne sich um die Synchronisation mit anderen Programmen kümmern zu müssen.
Voraussetzung hierfür ist jedoch, dass alle Programme, die auf den I2C- oder SPI-Bus des Raspberry Pi zugreifen, dazu ausschließlich die AdvaBoard-Software bzw. -Bibliotheken verwenden.
Wichtig ist, dass dies nur für den gleichzeitigen Zugriff mehrerer Programme gilt. Greifen innerhalb eines Prozesses mehrere Threads auf das AdvaBoard RPi1 zu, so sollte deren Zugriff z.B. mit einer Mutex koordiniert werden.
Es gibt mehrere Locks:
Lockname | Lockdatei | Lock für |
---|---|---|
espi | advamationrpi1_espi | E-SPI-Schnittstelle des AdvaBoard RPi1 |
i2c | advamationrpi1_i2c | I2C-Schnittstelle des AdvaBoard RPi1 |
f353 | advamationrpi1_f353 | I/O-Mikrocontroller des AdvaBoard RPi1 |
f912 | advamationrpi1_f912 | Power-Mikrocontroller des AdvaBoard RPi1 |
tft | advamationrpi1_tft | TFT-Display |
tp | advamationrpi1_tp | Touchpanel des TFT-Displays |
rpi_spi | advamationrpi_spi | SPI-Schnittstelle des Raspberry Pi (incl. espi, tft, tp) |
rpi_i2c | advamationrpi_i2c | I2C-Schnittstelle des Raspberry Pi (incl. i2c, f353, f912) |
Die Locks sind als Dateilocks (via flock) auf Lockdateien in /var/lock/ implementiert. Damit ist u.a. sichergestellt, dass z.B. die Locks von abgestürzten oder abgebrochenen Programmen automatisch freigegeben werden. Die Lockdateien selbst müssen nie gelöscht werden, da für das Locking nicht ihre Existenz, sondern lediglich ihr flock-Status relevant ist.
Im Normalfall arbeiten die Locks automatisch, ohne dass sich der Programmierer darum kümmern muss. Bei einem Zugriff auf eine Schnittstelle wird automatisch:
- ggf. gewartet, bis der Lock frei ist
Wird der Lock innerhalb einer bestimmten Zeit (Timeout) nicht frei, so wird der Zugriff abgebrochen und ein Fehlercode zurückgeliefert. - ein entsprechender Lock angelegt
- die Schnittstelle (um-)konfiguriert
- die Kommunikation abgewickelt
- der Lock wieder freigegeben
Es gibt jedoch mehrere Möglichkeiten, das Locking zu beeinflussen:
Timeout: Für jeden Lock kann eine maximale Zeit eingestellt werden, die auf einen Lock gewartet werden soll. Standardmäßig ist hier 1 Sekunde eingestellt.
manuelles Locking: Zusätzlich zum automatischen Locking ist es möglich, manuell Locks anzulegen und wieder aufzuheben.
Dies ist insbesondere dann sinnvoll, wenn mehrere aufeinanderfolgende Kommunikationen mit einem Gerät erfolgen sollen, die nicht durch ein anderes Programm unterbrochen werden dürfen. Zudem kann dies sinnvoll sein, um eine Schnittstelle exklusiv zu verwenden, und den Zugriff anderer Programme auf diese Schnittstelle zu verhindern. Allerdings ist zu beachten, dass dies nur dann wirksam ist, wenn die anderen Programme alle ebenfalls die AdvaBoard-Bibliotheken verwenden; Zugriffe über andere Bibliotheken oder direkt auf die Hardware können dadurch nicht verhindert werden.
C-Funktionen (Dokumentation: AdvaBoard-Bibliothek, TFT-Bibliothek, Raspberry Pi-Bibliothek):
am_rpi_advaboard_spi_lock(...) am_rpi_advaboard_spi_unlock(...) am_rpi_advaboard_spi_locking_timeout(...) am_rpi_spi_lock(...) am_rpi_spi_unlock(...) am_rpi_spi_locking_timeout(...) am_rpi_advaboard_rpii2c_lock(...) am_rpi_advaboard_rpii2c_unlock(...) am_rpi_advaboard_rpii2c_locking_timeout(...) am_rpi_i2c_lock(...) am_rpi_i2c_unlock(...) am_rpi_i2c_locking_timeout(...) am_rpi_advaboard_espi_lock(...) am_rpi_advaboard_espi_unlock(...) am_rpi_advaboard_espi_locking_timeout(...) am_rpi_advaboard_i2c_lock(...) am_rpi_advaboard_i2c_unlock(...) am_rpi_advaboard_i2c_locking_timeout(...) am_rpi_advaboard_f912_lock(...) am_rpi_advaboard_f912_unlock(...) am_rpi_advaboard_f912_locking_timeout(...) am_rpi_advaboard_f353_lock(...) am_rpi_advaboard_f353_unlock(...) am_rpi_advaboard_f353_locking_timeout(...) am_rpi_tft_lock(...) am_rpi_tft_unlock(...) am_rpi_tft_locking_timeout(...) am_rpi_tft_tp_lock(...) am_rpi_tft_tp_unlock(...) am_rpi_tft_tp_locking_timeout(...)
Um in Shell-Skripten bzw. mit am_rpi_advaboard_tool manuelle Locks zu verwenden, sollte flock(1) (siehe man 1 flock) , eine Sub-Shell und der Kommandozeilenparameter --nolock genutzt werden. flock legt hierbei den Lock für die Sub-Shell an, --nolock sorgt dafür, dass am_rpi_advaboard_tool keine Locks verwendet (da diese ansonsten mit den Locks der Sub-Shell kollidieren würden), und beim Beenden der Sub-Shell werden die Locks wieder freigegeben.