Blog

RED Brick Software-Infrastruktur

Nachdem wir bisher lediglich über die Hardware des RED Bricks berichtet haben, wollen wir heute näher auf die Software eingehen.

Achtung: Dieser Artikel geht auf die technischen Details, der Software des RED Bricks ein. Dieses Hintergrundwissen ist für die Nutzung des RED Bricks später nicht notwendig!

Die folgende grafische Übersicht, über die aktuell geplante Software-Infrastruktur, soll in diesem Blog Post erklärt werden.

https://www.tinkerforge.com/static/img/_stuff/red_brick.png

Überblick

Die Farben in der Grafik besitzen folgende Bedeutung:

  • Blau: Tinkerforge Software Komponenten

  • Grün: Tinkerforge Hardware im Stack des RED Bricks

  • Lila: Tinkerforge Hardware extern angeschlossen

  • Orange: Externe Software Komponenten

Der Stack, sowie Mini USB und USB A, werden in der Grafik als Schnittstellen zwischen RED Brick und der Außenwelt dargestellt.

Über den Mini USB Anschluss werden mittels eines Composite USB Gadget Treibers zwei USB Klassen bereitgestellt: Die erste Klasse stellt einen Serial Port dar, über den ein einfacher Shell Access auf den RED Brick hergestellt werden kann. Die zweite Klasse stellt die Brick API zur Verfügung, d.h. ein RED Brick, der per USB an einen PC angeschlossen wird, taucht dort wie jeder andere Brick auf. Er hat ein API wie alle anderen Bricks und Bricklets. Über diese API kann der RED Brick konfiguriert werden. Dazu gehört die Übertragung des Anwender-Programms, die Einstellung wann das Programm ausgeführt werden soll (einmal, jede Stunde einmal, beim Start des RED Bricks, usw.), sowie andere Konfigurationen. Der RED Brick kann also wie eine Black Box betrachtet werden, die über Hochsprachen Bricks und Bricklets steuern kann.

Über die Stapel-Stecker können alle Bricks sowie die Ethernet Extension und RS485 Extension mit dem RED Brick genutzt werden. Für die Ethernet Extension wird ein Treiber geschrieben, der diese als normale Ethernet Schnittstelle im Linux System erscheinen lässt (eth0).

Über den USB A Anschluss können beliebige USB Geräte angeschlossen werden (Maus, Tastatur, WLAN Stick) und natürlich auch weitere Tinkerforge Hardware.

Diese Anschlüsse können alle gleichzeitig genutzt werden. Ein RED Brick Stapel, der per Mini USB an einem PC angeschlossen ist, Bricks und Bricklets verwendet, weitere Bricks und Bricklets über die RS485 Extension nutzt, mit dem Internet über die Ethernet Extension verbunden ist und weitere Geräte über USB A angeschlossen hat, ist also problemlos möglich.

Im folgenden werden die einzelnen Komponenten die notwendig sind für dieses System vorgestellt:

Linux Distribution

Die auf Debian basierte Linux Distribution des RED Bricks ist bereits sehr weit voran geschritten. Die Konfigurationen, die für die Komponenten (RAM, Stromversorgung) und Schnittstellen (USB Mini/A, HDMI, SD Card, SPI/I2C/UART im Stack, GPIO, LEDs, etc) am Linux Kernel stattfinden müssen, sind abgeschlossen. Alle Tinkerforge Bindings und die dazu gehörenden Compiler und Interpreter sind auf der Distribution vorinstalliert. Dazu kommen die wichtigsten Bibliotheken für jede Sprache die wir unterstützen, damit auch komplexere Entwicklungen stattfinden können.

Des weiteren können zwei Images Erzeugt werden:

  • Full Image: Dieses Image stellt alle Funktionen des RED Bricks zur Verfügung, inklusive einem Grafiktreiber für OpenGL und Grafikausgabe per HDMI.

  • Fast Image: Dieses Image ist auf maximale Geschwindigkeit ausgelegt. Die GPU ist in diesem Image beispielsweise totgelegt, wodurch die Bootzeit signifikant verringert werden kann.

Mit dem Full Image verhält sich der RED Brick wie ein PC. Mit dem Fast Image verhält sich der RED Brick eher wie ein Ersatz für den Master Brick, der eine OnDevice API für C/C++, C#, Delphi/Lazarus, Java, JavaScript, MATLAB/Octave, Perl, PHP, Python, Ruby, Shell und Visual Basic .NET hat.

Status: 100%

SPI Stack Kommunikation

Die Kommunikation mit Bricks und Bricklets im Stack findet über SPI statt. Das aktuell verwendete Protokoll, welches zwischen den Bricks gesprochen wird, ist für die SAM3S4 Prozessoren entwickelt worden, die wir in den Bricks verwenden. Dieses Protokoll ist zwar sehr effizient, es würde das Linux System des RED Bricks aber leider in die Knie zwingen. Die Lösung stellt die Nutzung von DMA dar, da der Prozessor während der Kommunikation nicht belastet wird. Unser bisheriges Protokoll ist nicht DMA kompatibel. Daher muss für die SPI Kommunikation ein neues Protokoll entworfen werden, dass mit dem DMA Controller der SAM3S4 Prozessoren, als auch mit dem des A10s Prozessors kompatibel ist. Dieses Protokoll muss dann auf dem RED Brick sowie den anderen Bricks implementiert werden.

Status: 25%

Das neue Protokoll ist komplett ausgearbeitet und die Implementierung für die SPI Slaves ist fertig. Aktuell sind wir dabei die Implementierung des SPI Master Treibers auf dem RED Brick zu schreiben. Momentan sieht es so aus als könnten wir dafür /dev/spidev verwenden, welches die Entwicklung vereinfacht, da sie komplett im Brick Daemon stattfinden kann. Falls es dort zu Performanceeinbrüchen kommt, können wir aber Problemlos die relevanten Teile direkt in den Linux Kernel bringen.

RED Brick API Daemon

Der RED Brick API Daemon ist ein Daemon, der die API des RED Bricks implementiert. D.h. dieser Daemon implementiert die Konfiguration die über Mini USB stattfindet.

Status: 25%

Die wichtigsten Komponenten der API sind ausgearbeitet und die notwendige Infrastruktur (Kommunikation mit Brick Daemon etc) ist implementiert.

Composite USB Gadget Driver

Der Composite USB Gadget Driver stellt zwei Schnittstellen über Mini USB zur Verfügung. Mittels diesem Treiber taucht der RED Brick als “normaler Brick” am PC auf, es kann aber gleichzeitig ein Zugriff auf die Shell des Linux auf dem RED Brick stattfinden.

Status: 100%

Der Treiber ist fertig und funktional.

Benutzerschnittstelle

Das Endziel ist es den RED Brick über den Brick Viewer konfigurierbar zu machen. Die API des RED Bricks sollte nur von “Power-Usern” überhaupt genutzt werden müssen. Der “normale” Nutzer überträgt sein Programm und konfiguriert den RED Brick nur über den Brick Viewer.

Status: 0%

Mit der Implementierung der Benutzerschnittstelle haben wir noch nicht begonnen.

Ethernet Treiber (W5200)

Auf der Ethernet Extension nutzen wir den WIZnet W5200 IC um Ethernet zu sprechen. Für diesen gibt es leider noch keinen Linux Kernel Treiber. Allerdings gibt es bereits Treiber für die sehr ähnlichen W5100 und W5300, was die Implementierung eines solchen Treibers vereinfacht.

Status: 0%

Mit der Implementierung wurde noch nicht begonnen.

RS485 Extension Support

Die Unterstützung für die RS485 Extension hat aktuell die niedrigste Priorität und wird erst nach der Veröffentlichung des RED Bricks starten.