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.

Maker Faire 2014

https://www.tinkerforge.com/static/img/_stuff/MakerFaireHannover.jpg

Im letzten Jahr hat die erste deutsche Maker Faire in Hannover stattgefunden. Wir waren dabei und konnten mit euch einige interessante Gespräche führen. Dies ist ein guter Grund für uns auch dieses Jahr and der Maker Faire teilzunehmen.

Die Maker Faire findet vom 05.- 06. Juli wieder im Hannover Congress Centrum statt, allerdings diesmal mit deutlich vergrößerten Räumlichkeiten. Weitere Informationen findet ihr auf: http://makerfairehannover.com/.

Wir werden natürlich Prototypen des RED Bricks mit im Gepäck haben. Wir freuen uns auf euch!

Überarbeitete Dokumentation und Kits

Screenshot von Tinkerforge Dokumentation

Dokumentation

Wir haben die Dokumentation aufgeräumt. Eine neu geschaffene Einstiegsseite soll einen Überblick über Bricks, Bricklets, Master Extensions und die Konzepte hinter dem Tinkerforge Baukastensystem geben.

In dem Zuge haben wir die Dokumentation aller Produkte überarbeitet. Wie es der Fehlerteufel so will, ist dort sicher auch irgendwo etwas schief gelaufen. Bitte gebt uns Bescheid, wenn wir tote oder falsche Links entdeckt. Danke!

Kits

Ebenfalls überarbeitet haben wir die Zusammenstellung des Education und Tinker Kits:

Das Education Kit ist dazu gedacht in der Ausbildung eingesetzt zu werden. Das Kit wurde längere Zeit nicht überarbeitet. Die Menge an Bricklets, die direkt genutzt werden können, ohne das extern irgendwelche in Eigenleistung gefertigten Komponenten angeschlossen werden müssen ist mit der Zeit immer größer geworden. Ein Grund es zu überarbeiten. So haben wir als Beispiel das bisher im Kit vorhandene IO-16 Bricklet, an dem Taster oder LEDs angeschlossen werden können, durch Bricklets wie Motion Detector Bricklet oder Multi Touch Bricklet ersetzt. Die im Kit vorhandenen Module ermöglichen nun eine Vielzahl an Projekten, die einfach durch Zusammenstecken der mitgelieferten Module realisiert werden können.

Das Tinker Kit dient dazu die Hardware bereitzustellen um nahezu jedes erdenkliche Projekt zu realisieren. Auch dieses Kit hatten wir lange Zeit nicht aktualisiert, so dass die Frage aufkam welche neuen Module in das Kit kommen sollten und welche wir vielleicht rausnehmen wollen. Wir haben uns dazu entschieden einfach alles in das Kit gepackt. In dem Kit sind nun alle Tinkerforge Module mindestens einmal enthalten. Genau das richtige, für einen Grundstock an Modulen wenn man noch nicht weiß in welche Richtung die Reise geht.

RED Brick

Beim RED Brick geht es auch gut voran. Nächste Woche werden wir euch hier über den aktuellen Stand informieren.

RED Brick: Tut es? Oder tut es nicht?

RED Brick Prototyp verschiedene Ansichten

Im letzten Blogeintrag haben wir über die ersten Prototypen des RED Bricks berichtet. Bei dem Design ist uns ein Fehler unterlaufen, so dass ein Prozessorpin fälschlicherweise mit Ground verbunden war. Um diese Verbindung zu trennen haben wir, mit einem eigentlich viel zu großen Bohrer, eine Durchkontaktierung aufgebohrt. Das erste RED Brick konnten wir so zum Leben erwecken. Nun ist eine Woche vergangen und wir sind ein ganzes Stück weiter.

Mit den letzte Woche angekommenen 0.3mm Bohrern haben wir den Schaltungsfehler auf weiteren RED Bricks repariert. Den Bohrer korrekt zu Positionieren war selbst mit dem genutzten Kreuztisch nicht immer 100%ig möglich, so dass z.T. etwas neben der Durchkontaktierung gebohrt wurde und andere Leiterbahnen in der 6-lagigen Leiterplatte verletzt wurden. In Summe konnten wir sechs RED Bricks zum Leben erwecken.

U-Boot/Linux Image

Wir haben viel Arbeit in U-Boot (Bootloader) und das Linux Image des RED Bricks gesteckt. Zu den Aufgaben gehörte es die Toolchain aufzubauen, Build-Skripe zu schreiben, Hardwaremodifikationen zu implementieren (LEDs, DDR, Schnittstellen), das Image zu konfigurieren (Sprache, Hostname, etc.) usw. Besonders aufwendig ist die Optimierung der Bootzeit. Viele Dienste, Treiber etc., die standardmäßig vorhanden sind, sind auf dem RED Brick nicht sinnvoll und können entfernt werden. Zur Zeit stehen wir bei einer Bootzeit (inkl. grafischer Oberfläche) von ca. 45 Sekunden. Wir werden diese aber weiter optimieren. Neben dem Image mit grafischer Oberfläche wird es auch ein deutlich abgespecktes Image ohne grafische Oberfläche geben, dass deutlich schneller booten wird. In ersten Tests konnten wir bereits Bootzeiten von 15 Sekunden erreichen.

HDMI

Da einige HDMI Signale direkt neben der besagten Durchkontaktierung verlaufen, funktioniert HDMI nicht auf allen reparierten RED Bricks. Zum Teil haben wir diese beim Bohren erwischt. Sind diese Leiterbahnen nicht getroffen worden, funktioniert HDMI aber: (Screenshot direkt auf dem RED Brick erstellt)

RED Brick Prototyp LXFE Screenshot

USB Host

Funktioniert ebenfalls. Wir nutzen aktuell zum Beispiel einen USB WIFI Stick um das RED Brick ins Netzwerk zu bringen.

Arbeitsspeicher und Hitzetest

Die Anbindung des DDR Speichers an den Prozessor ist recht komplex und muss gründlich getestet werden. Mit dem Werkzeug stress haben wir dem RED Brick ordentlich eingeheizt. Stress belastet Prozessor, Arbeitsspeicher und die SD Karte und lastet das System vollständig aus. Instabile Plattformen können mit diesen Tests erkannt werden. Wir haben das RED Brick bei diesen Tests über Stunden ohne Kühlkörper betrieben, es wurde sehr heiß. Es traten aber keine Probleme auf. Zusätzlich nutzten wir memtester, das verschiedene Tests mit dem Arbeitsspeicher durchführt. Wir konnten ebenfalls keine Probleme feststellen. Mittels sysbench und dd konnten wir die erwartete Performance erzielen. Somit scheinen hier auch keine Probleme zu existieren.

Euer Daumendrücken scheint also geholfen zu haben. Danke!

Wie geht es weiter?

Bei dem Linux Image gibt es immer noch einiges zu tun. Parallel beschäftigen wir uns aktuell damit eigene Kerneltreiber zu entwickeln, die zur Kommunikation mit brickv notwendig sind. Über diese Schnittstelle soll später das Brick konfiguriert, sowie die eigenen Programme übertragen werden. Wir halten euch weiter auf dem Laufenden.

Neuigkeiten zum RED Brick

Es ist eine Weile vergangen, seitdem wir das RED Brick hier im Blog angekündigt haben. Wir sind nun ein ganzes Stück weiter und freuen uns euch ein Status-Update geben zu können:

Die Bestellung der Leiterplatten mit der Klärung der technischen Details, die Lieferzeit der Leiterplatten von einem Monat und die Planungen/Vorbereitungen beim Bestücker haben dazu geführt, dass wir erst letzten Freitag die ersten Prototypen “mit nach Hause” nehmen konnten.

RED Brick Prototyp verschiedene Ansichten

Basierend auf dem Sunxi Linux, dass sich der Unterstützung von Allwinner Prozessoren widmet, haben wir unser eigenes Debian Image entwickelt. Leider funktionierte dies nicht sofort auf dem Prototypen, so dass eine Fehlersuche angesagt war. Zum Glück bieten die Allwinner Prozessoren eine einfache Möglichkeit direkt mit dem Prozessor zu kommunizieren, die sogenannte FEL Schnittstelle. Damit konnten wir herausfinden, dass der Prozessor nicht von der SD Karte booten konnte. Nach längerer Suche war der Schuldige auch direkt gefunden: Der Prozessor besitzt eine JTAG Schnittstelle, welche ebenfalls zum Debuggen genutzt werden kann. Über zwei Prozessorpins kann festgelegt werden, auf welchen Pins dieses verfügbar ist. Die JTAG Schnittstelle wurde unglücklicherweise so konfiguriert, dass sie auf den Pins für die SD Karte läuft und somit die SD Karte nicht funktioniert. Der Prozessor bietet verschiedene Schnittstellen zum Anschließen einer SD Karte, diese wurden während der Designphase auch häufiger gewechselt. Leider wurde anschließend vergessen, die JTAG Schnittstelle anzupassen.

Die schuldigen Pins befinden sich direkt unter dem Prozessor, sind also von außen nicht mehr erreichbar. Daher haben wir Versuche unternommen eine andere SD Karten Schnittstelle zum laufen zu bekommen. Zum Glück befindet sich auf der “General Purpose”/Kamera Schnittstelle ebenfalls eine SD Karten Schnittstelle. Nach etwas fädeln hatten wir diese auch angeschlossen:

RED Brick Prototyp mit Fädeldraht

Die Schnittstelle haben wir nicht zum laufen bewegen können. Die Datenblätter des Prozessors sind leider nicht sonderlich aussagekräftig. Unter Umständen ist es unmöglich direkt von dieser SD Karten Schnittstelle zu booten. Alternativ sind es elektrische Probleme oder die Konfiguration unseres Images ist nicht korrekt gewesen.

Daher blieb uns nur die Möglichkeit irgendwie die Verbindung der JTAG-Konfigurations-Pins zu trennen und somit die korrekte JTAG Konfiguration herzustellen. Wir hatten alle bestellten Prozessoren bereits bestückt, so dass eine neue Bestückung, mit modifizierter Leiterplatte, nicht so schnell zu bewerkstelligen war. Auch ein Runterlöten des Prozessors (FBGA), Trennen der Verbindungen, Reballing und das erneute Drauflöten war so recht keine Option. Der Abstand zwischen RAM und Prozessor ist sehr gering, so dass dieses nicht so einfach möglich gewesen wäre. Daher haben wir die Durchkontaktierung, die einen der beiden Pins mit der Masselage verbindet, ausgebohrt und somit die Verbindung getrennt. Ein interner Pull-Up im Prozessor sorgt nun dafür, dass dieser Pin “High” ist.

Aber wie bohrt man eine Durchkontaktierung, die einen Außendurchmesser von 0,3mm und eine Bohrung von 0,15mm besitzt, aus?

RED Brick Prototyp, Aufbau Bohrmaschine

Mit diesem provisorischen Aufbau haben wir es versucht. Leider hatten wir nur einen 0,5mm Bohrer zur Hand, so dass wir sehr viel mehr wegnehmen mussten als notwendig. Den Bohrer überhaupt halbwegs passend über der Durchkontaktierung zu positionieren war schon nicht ganz einfach. Die Bohrtiefe konnten wir nur nach Gefühl ermitteln. Die besagte Masse-Lage besitzt zur Top-Lage (da wo der Prozessor drauf sitzt) einen Abstand von 0,2mm. Diese Verbindung musste aufgebohrt werden ohne all zu tief in den Prozessor zu bohren und diesen zu zerstören.

RED Brick Prototyp mit Bohrung

Das Ergebnis unserer destruktiven Arbeit seht ihr im obigen Bild. Unsere Anspannung, als wir das Brick an einem Rechner angeschlossen haben und auf die ersten Lebenszeichen warteten, könnt ihr euch vielleicht vorstellen. Umso größer war die Freude als wir die ersten Lebenszeichen sehen konnten:

RED Brick Prototyp Prompt

Wie geht es jetzt weiter?

Wir sind jetzt dabei das Brick zu testen. Es muss nun zeigen, dass es auch stabil funktioniert. Morgen kommen hoffentlich kleinere Bohrer an, so dass wir weitere Bricks zum leben erwecken wollen. Anschließend werden wir uns den Schnittstellen widmen und HDMI sowie USB Host testen. Als nächstes sind dann die Stapel-Schnittstellen zu den Bricks und Extensions dran. Unser Linux Image wird parallel weiterentwickelt, hier sind noch einige Anpassungen und Optimierungen durchzuführen. Eine große Aufgabe die dann wartet, ist die Implementierung eines Linux Kernel Treibers für SPI zur Stapelkommunikation und sofern notwendig, die Anpassung der Stapelkommunikation aller Bricks. Eine weitere große Aufgabe ist die Implementierung der Benutzerschnittstellen und der internen Programmausführung.

Mit den Prototypen sind wir sehr zufrieden. Die Fehler die wir bisher im Hardwaredesign gefunden haben lassen sich einfach beheben. Aktuell sieht es sogar so aus als würden wir die SMD-Rakelschablonen von den Prototypen in der Serienfertigung verwenden können, da keine Pads umgesetzt werden müssen.

Wir werden euch mit weiteren Blogeinträgen auf dem laufenden halten. Drückt uns bitte die Daumen, dass das RED Brick die weiteren Tests besteht ;-)