>> Artikelansicht

27.01.2015 /He [Druckansicht]

STM8S Discovery unter Linux und dem Raspberry Pi mit SDCC

...oder auf der Suche nach einem Co-Prozessor für den Raspberry Pi

STM8S-Discovery und Raspberry Pi Es gibt viele Gründe warum man den Raspberry Pi um einen Zusatzprozessor bereichern möchte oder muss.Sei es, dass einem schlicht die IO-Pins ausgehen, der Raspberry andere Aufgaben zu erledigen hat und zeitkritische Prozesse an einen weiteren Prozessor delegiert werden müssen. Oder einfach eine Pegelanpassung 5V<->3.3V notwendig ist, um weitere el. Bauteile anzuschliessen.Hier kommen die unzähligen expansions-/devel-Platinen(Boards) zum Einsatz, die im einfachsten Fall aus eimem Seriell nach Paralell Porterweiterung(Port-Expander) und einer Pegelanpassung bestehen. Bis zu Insellösungen, die einen ATMega/(Arduino) oder gar ARM-Prozessor on Board haben. Die meisten Erweiterungen haben eins gemeinsam, sie bieten eine Fläche für Zusatzschaltungen.Genau dazwischen siedelt sich das STM8S-Discovery Board an.

Beispiele für die genannten Bausteine:
Porterweiterung(Port-Expander): PCF8574 Anbindung über SPI
Pegelanpassung(Level-Shifter/Voltagetranslator): TCA9406 Anbindung über I2C

Übersicht der Eigenschaften des STM8S-Discovery

STM8S-Discovery

Übersicht der Eigenschaften
  1. Einige I/O Pins Open-Drain -> 5V tolerant auch bei Vdd<5V:: (Siehe Datenblatt)
  2. Restliche I/O Pins:: Max Vdd+0,3V
  3. Fläche für eigene Schaltung
  4. Programmierbar auch unter Raspberry Pi GNU/Linux
  5. Softwareentwicklung in Hochsprache und Assembler
  6. Library für die Peripherie vorhanden


Allgemein

Das Entwicklungsboard von STMicroelectronics besitzt ein eigenes Programmiergerät,mit dem es möglich ist, den STM8S105, der auf dem 2. Teil des Boards sitzt im System über den USB Port zu programmieren. Dieses Programmiergerät kann leicht von der Platine abgetrennt werden.Dann kann man den STM8S105 auch über das sogenannte SWIM Interface (Single wire interface module) programmieren.Hierzu dient weiter das Programmiergerät, das nun als eigenständiges Gerät fungiert und die notwendige Anschlussmöglichkeit bereitstellt.

Die Software

SDCC-Small Device C Compiler

Seit der Version 3.4.0 bietet der SDCC- "Small Device C Compiler" Unterstützung für STM8 Microcontroller an.Somit wäre der erste Teil der Aufgabe schon gelöst.Die Installation gestaltet sich auch recht einfach. Wenn man viel Zeit hat, kann man den Compiler direkt auf dem Raspberry Pi übersetzen lassen. Dieser Teil kann auf der Seite des SDCC(allgemeine Übersetzung und Installation, basierend auf dem Quellcode unter Linux) nachgelesen werden [http://sdcc.sourceforge.net/] und würde hier den Rahmen sprengen.Hierzu sei nur kurz erwähnt, dass die Version 3.4.0 auf einem aktuellen Raspberry Pi mit dem Betriebssystem Raspbian nicht zu übersetzen war, jedoch die Version 3.4.3 erfolgreich übersetzt und installiert werden konnte.Zum Glück gibt es jedoch fertig übersetzte(compilierte) Versionen für den Raspberry Pi.

stm8flash

Jetzt fehlt nur noch eine Software, mit der sich das Programmiergerät für den STM8105 auf dem Raspberry Pi verwenden lässt.Diese nennt sich passend stm8flash und ermöglicht es die vom SDCC erzeugten Binaries auf das STM8S-Discovery zu laden(flashen)und zu starten. Leider stellte sich heraus, dass diese Software auf einem Linuxrechner(x86_64) einwandfrei arbeitet, aber unter dem Raspberry Pi seine Dienste verweigert. Dafür wird am Ende des Artikels eine Lösung angeboten.

STM8S Standard peripheral library und SDCC

Eine weitere Hürde stellt die Verwendung der sogenannten "Standard peripheral library" die von STMicroelectronics zur Verfügung gestellt wird dar. Diese lässt sich erstmal nicht mit dem SDCC übersetzen. Das Internet bietet auch keine grosse Hilfe. Nach vielem zeitaufwändigen Suchen, wurden alle Hinweise und eigenen Erkenntnisse in einem Script zusammengefasst, das die Library anpasst und ein Beispielprojekt mit "blinky.c" anlegt, das übersetzt und anschliessend gegen die Library "gelinkt" wird.Somit hat man in ca. 10 Minuten eine funktionsfähige Entwicklungsumgebung für STM8 Microcontroller unter Linux/Raspberry Pi mit einem Beispielprojekt als Ausgangspunkt für eigene Entwicklungen.

Vorbereitung und Installation

SDCC-Small Device C Compiler snapshot-armv6l

SDCC Raspbian ARMv6 / screenshot http://sdcc.sourceforge.net/snap.php







Auf der Seite [http://sdcc.sourceforge.net/snap.php] werden sogenannte Snapshots des SDCC angeboten.Um die passende Software für den Raspberry Pi zu finden, sucht man nach dem Schlüsselwort ARMv6 und lädt den SDCC herunter.
In diesem Fall sdcc-snapshot-armv6l-unknown-linux-gnueabihf-20150125-9161.tar.bz2
Nun wechselt man in das Heimatverzeichnis mit cd und kopiert auch den sdcc-snapshot[].tar.bz2 dort hin.
Mit dem Befehl tar -xf sdcc-snapshot-armv6l-unknown-linux-gnueabihf-20150125-9161.tar.bz2 extrahiert man den SDCC.
Danach muss man noch export PATH=~/sdcc/bin:$PATH eingeben. Dies kann auch permanent geschehen, indem man die Datei ~/.bashrc editiert und den Befehl hinzufügt.Ein Test mit sdcc -v sollte Version und die vom Compiler unterstützen Microcontoller ausgeben.

1. Schritt Datei sdcc-snapshot-armv6l-unknown-linux-gnueabihf-20150125-9161.tar.bz2 herunterladen und in das Heimatverzeichnis ~/ kopieren. Softwarelink http://sdcc.sourceforge.net/snap.php
  1. > #Wechsel in das Heimatverzeichnis ~/
  2. > cd
  3. > #SDCC extrahieren
  4. > tar -xf sdcc-snapshot-armv6l-unknown-linux-gnueabihf-20150125-9161.tar.bz2
  5. >
  6. > export PATH=~/sdcc/bin:$PATH
  7. > sdcc -v
  8. > #Ausgabe sollte etwa so aussehen - wichtig ist das 'stm8' vor der Versionsnummer 3.4.3
  9. > SDCC : mcs51/z80/z180/r2k/r3ka/gbz80/tlcs90/ds390/pic16/pic14/TININative/ds400/hc08/s08/stm8 3.4.3 ...

Das Script

Nun kommt das Script zum Einsatz, das die Software und die "Standard peripheral library" zum Einsatz auf dem Raspberry Pi vorbereitet.Hierzu bleibt oder wechselt man in das Heimatverzeichnis und führt den Befehl
wget http://www.messtechniklabor.de/downloads/h0005/stm8s-lib-sdcc.tgz aus.
Danach kann man das Script mit tar -xf stm8s-lib-sdcc.tgz extrahieren.Nun wechselt man mit cd ./stm8s-lib-sdcc in das Scriptverzeichnis.

stm8flash

Zuerst muss sichergestellt werden, dass libusb-1.0 installiert ist.
sudo apt-get install libusb-dev libusb-1.0 erledigt diese Aufgabe.

Der Befehl git clone https://github.com/vdudouyt/stm8flash.git überträgt die stm8flash Software in das Script-Verzeichnis.Nun gibt man den Befehl cd ./stm8flash ein und danach patch -p1 < ../patch/stm8flash.patch, das den Quellcode von main.c für den Raspberry Pi anpasst. Mit make wird stm8flash übersetzt und letztendlich mit sudo install installiert. Mit cd .. wechselt man wieder in das Script-Verzeichnis.
Nun kann noch eine udev-Regel für non-root Benutzer eingrichtet werden.
Das erledigt sudo cp ./stubs/90-stlink.rules /etc/udev/rules.d/

Diese udev-Regel wird erst nach einem Neustart aktiv.

STM8S Standard peripheral library herunterladen

Jetzt kann man die kostenlose "STM8S Standard peripheral library" von der Webseite von STMicroelectronics [http://www.st.com] herunterladen.Dort gibt man im Suchfeld STSW-STM8069 ein und folgt dem Link der unter Part Number Results (1): STSW-STM8069 erscheint und lädt die Datei stsw-stm8069.zip mit einem Klick auf den [Download]-Button herunter und kopiert sie in das Script-Verzeichnis.

Library anpassen und compilieren

sh ./build.sh erledigt nun den Rest.Nach erfolgreicher Ausführung des Scripts wechselt man mit cd ./Project in das Beispielprojekt.

Nun kann das STM8-Discovery Board an den USB-Anschluss des Raspberry Pi angeschlossen werden.

Ein schneller Test mit sudo stm8flash -c stlink -p stm8s105 -w blinky.ihx sollte mit einer blinkenden LED belohnt werden.Nach einem Neustart(da erst dann die udev-Regel aktiv wird) kann man auch mit make flash das Programm in den STM8S105 schreiben und ausführen.

Credits

Bei der Erstellung des Scrips waren die folgenden Seiten sehr hilfreich:

Code::Blocks für STM8S Discovery einrichten

http://blog.podstuff.de/de/codeblocks-fuer-stm8s-discovery-einrichten/

Fun and games with the STM8 on Linux

http://gctechspace.org/2014/09/fun-and-games-with-the-stm8-on-linux/

OggStreamer

https://oggstreamer.wordpress.com/

SDCC - Small Device C Compiler

http://sdcc.sourceforge.net/

stm8flash

https://github.com/vdudouyt/stm8flash

Download

Das Script

stm8s-lib-sdcc.tgz | 4.3K 28.01.2015
oder
wget http://www.messtechniklabor.de/downloads/h0005/stm8s-lib-sdcc.tgz

  • building the STM8S_StdPeriph_Driver
    ./build.sh
In der Datei HOWTO wird alles noch einmal beschrieben.Die README Datei enthält wichtige allgemeine Hinweise.

nächster Artikel