Advamation-Logo (Druckversion)

AdvaBoard RPi1 - Anleitung

Stand:2015-01-09
Produkt:
AdvaBoard RPi1
Produktnummer:
1160
Produktseite:
http://www.advamation.de/produkte/embeddedpc/advaboard_rpi1/

Inhalt

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

Warnung
  • 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!

ESD-Schutz
  • 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

AdvaBoard RPi1 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:

    AdvaBoard RPi1 Zubehörset

    (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)
  • optional: Befestigungskit für einen Raspberry Pi B+/A+, bestehend aus:

    Befestigungkit für Raspberry Pi B+

    (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. 1
86517 Wehringen

4   Übersicht

AdvaBoard RPi1 (Prototyp)

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

AdvaBoard RPi1 Steckverbinder/Jumper
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.

Warnung ESD-Schutz

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 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
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
Montage: erforderliches Material

Zur Montage sind folgende Schritte notwendig (siehe Fotos):

  1. Abstandsbolzen in die Löcher des AdvaBoard RPi1 stecken und mit Muttern fixieren.
  2. Kabel am Raspberry Pi anstecken.
  3. Kunststoff-Schrauben durch die Löcher des Raspberry Pi stecken.
  4. Raspberry Pi so auf die Abstandsbolzen legen, dass die Schrauben in die Abstandsbolzen greifen; Raspberry Pi festschrauben.
  5. Kabel am AdvaBoard RPi1 anstecken.
Montage: Schritt 1 + 2
Schritt 1 + 2: Abstandsbolzen befestigen, Kabel anstecken
Montage: Schitt 3 + 4
Schritt 3 + 4: Kunststoffschrauben einstecken und anziehen
Montage: Schritt 5
Schritt 5: Kabel anstecken
AdvaBoard RPi1 + Raspberry Pi B
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
Montage: erforderliches Material

Folgende Schritte sind notwendig (siehe Fotos):

  1. 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

  2. Adapterplatte auf diese Schrauben legen. Hierbei auf die Ausrichtung der Adapterplatte achten (siehe Foto).

  3. Adapterplatte mit 4 M3-Muttern am AdvaBoard RPi1 befestigen.

  4. 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).

  5. Kabel am Raspberry Pi und danach am AdvaBoard RPi1 anstecken.

Montage: Schritt 1
Schritt 1: M3-Schrauben + Muttern am AdvaBoard RPi1 befestigen
Montage: Schritt 2 + 3
Schritt 2 + 3: Adapterplatte am AdvaBoard RPi1 befestigen
Montage: Schritt 4
Schritt 4: Raspberry Pi an der Adapterplatte befestigen
Montage: Schritt 5
Schritt 5: Kabel anstecken
AdvaBoard RPi1 + Raspberry Pi B+
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 + AdvaBoard RPi1 Raspberry Pi  + AdvaBoard RPi1 + TFT32
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
Anschluss Raspberry Pi B+
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
Flachbandkabel-Enden: für Raspbery Pi (links), für AdvaBoard RPi1 (rechts)
RPi-Anschluss / Pin 1
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:

  1. 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!

    ESD-Schutz
  2. 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.
  3. 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.
  4. 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!

  5. 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.
  6. 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)

  7. 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

AdvaBoard von oben AdvaBoard, schematisch
Steckverbinder, Seite 1 Steckverbinder, Seite 2

(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:

Benutzeroberfläche, Startseite Benutzeroberfläche, Verbindung zum Raspberry Pi Benutzeroberfläche, Raspberry Pi Informationen Benutzeroberfläche, AdvaBoard RPi1 Informationen Benutzeroberfläche, Power Benutzeroberfläche, Digital-I/O Benutzeroberfläche, Analog-I/O / PWM Benutzeroberfläche, I2C Benutzeroberfläche, E-SPI Benutzeroberfläche, RS-485/RS-232 Benutzeroberfläche, RTC

(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:

  1. 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!

  2. 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

Printstecker 3pol. Netzteil-Kabel
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

Printstecker 2pol. Batterie-Kabel
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)
  • 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

Wannenstecker 20pol.
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

Wannenstecker 10pol.
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

Wannenstecker 6pol.
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

Printstecker 4pol. RS-485-Kabel
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

Printstecker 5pol. RS-232-Kabel
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

Wannenstecker 26pol.
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

Pfostenbuchse 40pol.
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:

  1. 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.
  2. ein entsprechender Lock angelegt
  3. die Schnittstelle (um-)konfiguriert
  4. die Kommunikation abgewickelt
  5. 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.