STM32/Stand-alone-Modus
Im Stand-alone-Modus arbeitet der Embedded Pi als Motherboard für das jeweilige Arduino Shield. Hier steuert der STM32-Mikrocontroller die Arduino Shields direkt ohne einen zwischengeschalteten Raspberry Pi. Der Embedded Pi verfügt über sechs analoge Eingänge, kann so seine Umwelt durch verschiedene Signale mittels einer Reihe von Sensoren wahrnehmen und damit etwa Lichtquellen, Motoren oder andere Steuerungsantriebe beeinflussen.
Um mit den über 100 verschiedenen Arduino Shields nicht nur Formfaktor-kompatibel zu sein, unterstützt der Embedded Pi sowohl 5-V- als auch 3,3-V-Arduino-Shields. Diese werden pin-to-pin über den Arduino-Steckverbinder (I/O headers rev3) einfach auf den Embedded Pi aufgesteckt (Bilder 1 und 2).
Die zusätzlichen On-Board Interfaces des Embedded Pi (SPI, UART, I2C, PWM und CAN) ermöglichen zusätzlich die Verbindung mit anderen Erweiterungs-Boards. Für das Debugging und Programmieren stehen ein SWD-/JTAG-Port sowie ein ISP-Interface zur Verfügung. In der CooCox-Entwicklungsumgebung können Anwender ihre Embedded-Projekte in C umsetzen. Die Tools für Cortex-M-Mikrocontroller, beispielsweise CoIDE oder CoFlash, laufen unter Windows XP, Vista und 7 und ermöglichen Flash-Programmierung und Debugging.
Um die Peripherie anzusteuern, die sich auf den Shields befindet, gibt es die „CoX Peripheral Library“. CoX definiert den Zugriff auf weit verbreitete Peripheriefunktionen der Mikrocontroller wie z.B. I2C, UART, SPI usw. Einmal geschrieben, kann ein CoX-Treiber einfach auf eine andere MCU-Architektur portiert werden. Für eine Reihe von Arduino Shields gibt es bereits CoX-Treiber, die kompatibel zu den Triple-Play-Modi sind. Damit lassen sich die Shields sofort in eigene Projekte in der CoIDE laden. Aktuell unterstützte Treiber für die Shields sind das Arduino WiFi Shield, das Arduino Motor Shield, das Adafruit Motor Shield oder das DFRobot LCD Shield. Momentan in der Entwicklung befinden sich die Treiber für das Arduino GPRS Shield. Embest entwickelt fortlaufend weitere Treiber für die verschiedenen Shields.
ST-Adapter-Modus
Im ST-Adapter-Modus steuert der STM32-Mikrocontroller ebenfalls die Arduino Shields. Das Raspberry Pi übernimmt dabei die Funktion des HMI (Human Machine Interface) und stellt eine grafische Benutzeroberfläche oder Kommandozeilenkonsole dar. Über das Raspberry Pi werden Befehle und Daten gesendet sowie Daten vom STM32 empfangen werden (Bild 3). Für diesen Modus muss eine spezielle Firmware für den Mikrocontroller des Embedded Pi aufgespielt werden, mit der die Arduino Shields gesteuert werden und die die Kommunikation mit dem Raspberry Pi sicherstellt. Diese kann aus der CoIDE-Projektdatei generiert und mit den Tools CoIDE, CoFlash oder mit dem ISP Tool programmiert werden. Der Quellcode zur Shield-Steuerung ist identisch mit dem im STM32/Stand-alone-Modus. Die Code-Komponenten des Protocol Decode Layer für die Kommunikation mit dem Raspberry Pi bietet CooCox auf der eigenen Homepage an.
Der ST-Adapter-Modus eignet sich besonders für anspruchsvollere Projekte, da er die Fähigkeiten des Raspberry Pi um Fähigkeiten der Automatisierung erweitert. Der STM32-Mikrocontroller des Embedded Pi bringt Features wie einen NVIC (Nested Vectored Interrupt Controller), GPIOs, Pulsweitenmodulation (PWM) und Analog-Digital-Umsetzer ein, die vielfältig mit den Arduino-Shields kombiniert werden können. Über die SPI-, I2C- und UART-Kanäle des Raspberry Pi können die Multiplexfunktionen der digitalen I/Os genutzt werden. Die Stromversorgung des Embedded Pi erfolgt hierbei über den angeschlossenen Raspberry Pi.
Der C++-Quellcode zur Befehlsübermittlung und zum Datenempfang vom Mikrocontroller läuft auf dem Raspberry Pi unter dem Debian-Betriebssystem „wheezy“. Dieses wird zusammen mit der Firmware und dem Quellcode des STM32 zur Verfügung gestellt. Für die Entwicklung von Anwendungen im ST-Adapter-Modus müssen Nutzer den Protocol Decode Layer Code und den C++-Code weiterentwickeln beziehungsweise ersetzen, damit sie auf dem Debian-Betriebssystem des Raspberry Pi laufen. Hierfür werden ebenfalls Anleitungen bereitgestellt.
Raspberry-Pi-Modus
Im Raspberry-Pi-Modus fungiert der Embedded Pi als reine Hardware-Verbindung zwischen dem Raspberry Pi und den Arduino Shields. Der Raspberry Pi koppelt sich direkt an die Shields und kann dadurch deren Sensoren und Komponenten nutzen, um mit der externen Umgebung zu interagieren. Damit erweitert der Embedded Pi den Raspberry Pi um die digitalen und analogen Sensoren der Arduino Shields (Bild 4). So ist es in diesem Modus beispielsweise möglich, mit dem Raspberry Pi und dem Arduino-Motor-Shield einen Motor zu steuern.
Die Arduino Community hat bereits eine Vielzahl an Treibern, Anwendungsbeispielen und Hilfestellungen zu Shields für Linux entwickelt. In der Open Source Library „arduPi“ finden sich solche, die unter Debian auf dem Raspberry Pi laufen, sowie die meisten Treiber für das Shield-Umfeld wie GPIO, I2C und SPI.
Der Brückenbauer Embedded Pi verschmilzt zwei Welten und hebt den Raspberry Pi dadurch in die Liga der professionellen Applikation und Anwendungsentwicklung industrieller und Konsumbereiche.