Longan Nano von Sipeed

Sipeed Longan Nano – Entwickler-Board mit RISC-V-Mikrocontroller

Durch einen Artikel im Heise Newsticker bin ich auf den Longan Nano der chinesischen Firma Sipeed gestoßen. Das Board basiert auf einem neu entwickelten 32-bit-RISC-V-Prozessor, dem GD32V (genau: GD32VF103CBT6) von GigaDevice, der am 22.08.2019 offiziell vorgestellt wurde. Es ist mit ca. 46 mm x 20 mm etwas größer als ein Arduino Nano (45 mm x 18 mm) und verfügt über einen Micro-SD-Kartenleser auf der Unter- sowie ein kleines Display (0,96 Zoll, 80 x 160 Pixel) auf der Oberseite. Außerdem wird ein transparentes Kunstoffgehäuse mitgeliefert, dazu zwei Pinleisten zum Anlöten. Die Verbindung mit dem PC erfolgt über einen USB-C-Anschluss.

Die Angaben zu Preisen und Software beziehen sich auf Mitte November 2019 (sofern nicht anders angegeben).
Den Absatz zur Board-Variante Longan Nano Lite habe ich am 21.11.2019 ergänzt. Weitere Änderungen mache ich bei Bedarf bzw. wenn es weitere Dokumentationen oder andere Ressourcen im Web gibt.

Hardware

Eine (mehr oder weniger) komplette Produktinformation gibt es beim Hersteller auf der Seite longan.sipeed.com/en/ und im Datenblatt.

 Longan NanoLongan Nano Lite
Prozessor:GD32VF103CBT6GD32VF103C8T6
Speicher:128 KB Flash
32 KB SRAM
64 KB Flash
20 KB SRAM
Anschlüsse:USB-C, 3 x USART (serielle Kommunikation), JTAG,
8-Pin Folienkabelanschluss für LCD,
Speicherkartenleser (Mikro-SD)
Peripherie:2 x I2C
3 x SPI
2 x I2S
2 x CAN
2 ADC (Analog-Digital-Konverter; 10 Kanäle)
2 DAC (Digital-Analog-Konverter)
dazu:verschiedene 16-bit-Timer, Watchdog, RTC, Systick

Bilder

Bestellung und Preis

Einzige Bezugsquelle war im September 2019 der Seeed-Shop; der dort verlangte Preis von 4,90 $ (ca. 4,40 €) scheint für diese Ausstattung sehr günstig, relativiert sich aber durch die anfallenden Versandkosten – für meine Kleinbestellung waren das rund 9,50 $ (ca. 8,55 €). Damit der Stückpreis erträglich bleibt, muss man mehrere Boards bestellen. Dabei ist zu beachten, dass bei einem Wert ab 22 € (inkl. Versandkosten!; ca. 24,50 $, also ziemlich genau drei Boards inkl. Versand) Einfuhrumsatzsteuer von 19% fällig wird. Für 5 Dollar kommt man jedenfalls nicht an den Longan Nano, aber bei Bestellung mehrerer Boards kann man alles in allem bei 7-8 € pro Stück landen.

Noch ist das Board sehr neu – Mitte September 2019 war nur eine Vorbestellung zum 16. Oktober möglich.[1]Die per Mail angekündigte Lieferung wurde pünktlich verschickt und traf Anfang November 2019 nach 2 ½ Wochen ein. Der Postversand innerhalb Deutschlands erfolgte über die Logistikfirma … Continue reading Derzeit gibt es im Seeed-Shop keine Wartezeiten mehr und der Longan Nano ist auch bei aliexpress.com im Programm. Einzelne Kits (Board mit Display und Gehäuse) sind dort ab ca. 6 € zu haben; außerdem ist auch eine günstigere Variante (nur das Board ohne Display und Gehäuse) ab ca. 3,50 € erhältlich (die genannten Preise vom November 2019 scheinen auch im Mai 2021 noch gültig zu sein; jeweils zzgl. Versandkosten).

Arduino als Entwicklungsumgebung unvollständig

Momentan bietet Sipeed für den Longan Nano eine vollständige Unterstützung nur in PlatformIO an. Die Unterstützung der Arduino-IDE ist in Arbeit, aber noch nicht fertig – siehe die offenen Punkte in der To-Do-Liste auf GitHub. Die Kommunikation per SPI ist inzwischen implementiert, aber die darüber anschlossenen Geräte (SD-Kartenleser und das Display) können noch nicht angesprochen werden.

Ich habe mich wegen der (fehlenden) Funktionen und Dokumentation erst einmal an PlatformIO gehalten und werde mir später angucken, wie der Longan Nano sich in der Arduino-IDE verhält. Er kann dort jedenfalls eingerichtet werden, indem als Boardverwalter-URL folgender Link eingetragen wird (Quelle): [2]Die Einrichtung zusätzlicher Mikrocontroller-Boards in der Arduino-IDE geschieht im Menü Datei → Voreinstellungen → Reiter Einstellungen → Zusätzliche Boardverwalter-URLs. Dann kann … Continue reading

http://bigbits.oss-cn-qingdao.aliyuncs.com/Arduino_for_GD32V/package_longduino_index.json

Nachtrag vom 08.05.2021: Seit Herbst 2019 hat sich bei der Entwicklung der Arduino-Bibliotheken anscheinend nichts mehr getan – z.B. werden lt. der To-Do-Liste immer noch nicht die I2C- (Wire) und die serielle Schnittstelle (HardwareSerial) unterstützt. Da das Git-Repository seit September 2019 nicht mehr aktualisiert wurde, sollte man wohl nicht mehr auf Updates, erst recht nicht auf eine vollständige Integration des Longan Nano in die Arduino-IDE hoffen, sondern stattdessen mit PlatformIO arbeiten.

 

Bei den folgenden Schritten halte ich mich im Großen und Ganzen an die Dokumentation von Sipeed auf longan.sipeed.com/en/. Wegen einiger Abweichungen und Hindernisse stelle ich das hier aber ausführlich dar. Ich habe die Software unter Windows 10 installiert; sie ist auch für Linux verfügbar.

Treiber

Nach dem Auspacken und Anschließen per USB-C leuchtet das Display auf und die On-Board-LED blinkt abwechselnd rot-grün-blau – auf dem Board ist also zusätzlich zur roten Power-LED eine RGB-LED eingebaut. Im Windows-Gerätemanager ist das Board erstmal nicht als USB-Gerät oder COM-Port zu finden.

Um das Board über den USB-C-Anschluss zu programmieren, muss der Treiber libusb installiert werden. Dieser Programmier-Modus per USB wird als DFU (Device Firmware Upgrade) bezeichnet.

Download des GigaDevice-Treibers: dl.sipeed.com/LONGAN/Nano/Tools/GD32_MCU_Dfu_Tool_V3.8.1.5784_1.rar

Das Archiv enthält zwei Verzeichnisse. Ich habe nur die Treiber aus GD32 MCU Dfu Drivers_v1.0.1.2316 benötigt. Je nach Windows-Version verwendet man die 32- oder 64-bit-Version. Das Installationsprogramm GD32 MCU Dfu Drivers.exe muss als Administrator gestartet werden.

Installation des GD32V-DFU-Treibers als Administrator
Installation des GD32V-DFU-Treibers als Administrator
Nach erfolgreicher Treiberinstallation
Nach erfolgreicher Treiberinstallation

(Der andere Ordner GD32 MCU Dfu Tool_v3.8.1.5784 enthält ein Tool, um eine neue Firmware auf den Longan Nano aufzuspielen. Das war mit meinem System aber nicht nötig, da PlatformIO den Upload erledigt.)

Damit PlatformIO das Board im DFU-Modus anspricht, muss mit dem Tool ZADIG ein anderer Treiber installiert werden.

Windows-Gerätemanager: Longan Nano im DFU-Modus
Windows-Gerätemanager: Longan Nano im DFU-Modus

Zuerst muss das Board in den DFU-Modus gebracht werden:

  • Boot-Taste (Beschriftung: BOOT0) drücken und gedrückt halten
  • kurz die Reset-Taste drücken und loslassen
  • dann die Boot-Taste loslassen

Wenn sich das Board im DFU-Modus befindet, ist es im Windows-Gerätemanager zu sehen (sonst nicht) – bei den USB-Controllern wird ein Gerät GD32 Device in DFU mode angezeigt.

Zadig wird ohne Installation direkt ausgeführt; es fordert Administratorrechte an. Damit die USB-Geräte angezeigt werden, muss im Menü Options → List all Devices das Häkchen gesetzt werden. Hat man das richtige Gerät ausgewählt (bei mir war es bereits passend vorbelegt), erfolgt durch Klicken auf Replace Driver die Installation (s. Screenshots).

PlatformIO einrichten

PlatformIO ist eine Open-Source-Entwicklungsumgebung für das Internet of Things (IoT) und ist deutlich leistungsfähiger als die Arduino-IDE. Hunderte von Mikrocontroller-Boards werden unterstützt, darunter zig Varianten des Arduino und anderer Controller mit dem Chip AT328x, der Raspberry Pi und Espressifs ESP32 und ESP8266.

Es wird als Erweiterung von Visual Studio Code (VS Code) installiert. Wer VS Code noch nicht auf dem Rechner hat, findet die Software (Microsoft kann auch Open Source 😉 ) auf code.visualstudio.com. Die Einrichtung von PlatformIO erfolgt dann über den Extension Manager: Menü View → Extensions; im Suchfeld platformio eingeben, das Paket PlatformIO IDE auswählen und installieren.

Im Blog des Versandhändlers AZ-Delivery gibt es eine ausführliche Anleitung zur Installation von PlatformIO mit vielen Bildern. Dort wird auch gleich der Git-Client mitinstalliert, was ich zuerst nicht beachtet hatte (siehe unten).

Installation des Longan Nano Boards

Nach dem Starten von VS Code klickt man am linken Rand auf das PlatformIO-Icon (im Bild mit „1.” markiert), um die PlatformIO-Übersicht zu öffnen. Links unten im Schnellzugriffs-Menü wählt man Platforms aus (2.) und klickt dann rechts auf Advanced Installation (3.). In dem Dialog, der sich dann öffnet, trägt man folgende Adresse ein (4.):

https://github.com/sipeed/platform-gd32v.git

Ein Klick auf Install (5.) installiert die Board-Definitionen von Sipeed für die GD32-Plattform.

Installation der GD32-Boards in PlatformIO
Installation der GD32-Boards in PlatformIO

Da ich vorher nicht den Git-Client installiert hatte, gab es eine Fehlermeldung:

PlatformManager: Installing platform-gd32v
Error: Please install Git client from https://git-scm.com/downloads

Also habe ich Git nachinstalliert; den Download findet man unter der in der Fehlermeldung angegebenen Adresse git-scm.com/downloads. Durch die Installation kann man sich jeweils mit Bestätigen der Vorauswahl durchklicken. Bei der Frage nach dem Editor wählt man Visual Studio aus und lässt die anderen Optionen unverändert (siehe der bereits oben verlinkte Blog-Eintrag von AZ-Delivery). Anschließend hat auf meinem System erst nach einem Neustart des Rechners die Installation der Boards funktioniert – nur ein (mehrfacher) Neustart von VS Code und die Kontrolle, dass der Pfad zu Git in der Umgebungsvariablen PATH eingetragen ist, hat nicht ausgereicht.

Testprogramm in PlatformIO: Blinken der internen LED

Für den ersten Test habe ich das Blink-Beispiel aus der Anleitung von Sipeed nachvollzogen.

In PlatformIO klickt man auf den Button Project Examples (Schritt 1), wählt das Projekt arduino blink aus (Schritt 2) und öffnet es durch Klick auf Open (Schritt 3).

Blink Schritt 1: PlatformIO Beispiel-Projekte
Blink Schritt 1: PlatformIO Beispiel-Projekte

Den Quellcode kann man – wie zu erwarten – durch einen Klick auf den Programmnamen Blink.cpp anzeigen und bearbeiten. [3]Anders als in der Arduino-IDE, wo die Quellprogramme (Sketches) die Dateiendung .ino haben, wird hier die übliche Endung .cpp für Programme in C++ verwendet.

Blink Schritt 4: Quellcode
Blink Schritt 4: Quellcode

In der Konfigurationsdatei platformio.ini löscht man den nicht benötigten Abschnitt mit den Angaben zum GD32V-Evaluations-Board (Schritt 5) und ergänzt im Abschnitt zum Longan Nano folgende Zeile, um DFU als Upload-Protokoll einzustellen (Schritt 6). Andernfalls wird als Default die serielle Übertragung verwendet, was mit der hier verwendeten Konfiguration nicht funktioniert.

upload_protocol = dfu
Blink Schritt 6: Upload-Protokoll auf DFU einstellen
Blink Schritt 6: Upload-Protokoll auf DFU einstellen
Die komplette INI-Datei sieht dann in etwa so aus (die mit einem Semikolon beginnenden Zeilen sind Kommentare und können ggf. entfallen):
; PlatformIO Project Configuration File
;
;   Build options: build flags, source filter, extra scripting
;   Upload options: custom port, speed and extra flags
;   Library options: dependencies, extra library storages
;
; Please visit documentation for the other options and examples
; http://docs.platformio.org/page/projectconf.html
 
[env:sipeed-longan-nano]
platform = gd32v
framework = arduino     ; alternativ: framework = gd32vf103-sdk
board = sipeed-longan-nano
upload_protocol = dfu
monitor_speed = 115200
Blink Schritt 7: Übersetzung (Build) starten
Blink Schritt 7: Übersetzung (Build) starten

Durch einen Klick auf das Build-Icon am unteren Rand des Programmfensters (der Haken) wird das Programm übersetzt (Schritt 7) und mit einem Klick auf den Pfeil daneben auf den Longan Nano hochgeladen. Der muss sich dazu im DFU-Modus befinden (s.o.; bei gedrückter Boot-Taste kurz Reset drücken). Wie in der Arduino-IDE kann man auch hier gleich das Icon zum Hochladen anklicken – dann wird die Übersetzung mit angestoßen.

Nach dem erfolgreichen Upload wird eine Fehlermeldung („error 74”) ausgegeben. Die habe ich erst einmal ignoriert – die Bedeutung ist mir (noch) unklar. Das Programm wurde trotzdem zum Longan Nano übertragen und die interne LED blinkt wie gewünscht.

Longan Nano mit leuchtender interner LED und Power-LED
Longan Nano mit leuchtender interner LED und Power-LED
Blink Schritt 8: Fehlermeldung nach erfolgreichem Upload
Blink Schritt 8: Fehlermeldung nach erfolgreichem Upload

Zum Abschluss noch die vollständige Ausgabe beim Programm-Upload:

> Executing task: C:\Users\Heiko\.platformio\penv\Scripts\platformio.exe run --target upload  Sipeed Longan Nano
HARDWARE: GD32VF103CBT6 108MHz, 32KB RAM, 128KB Flash
DEBUG: Current (altera-usb-blaster) External (altera-usb-blaster, gd-link, jlink, rv-link, 
sipeed-rv-debugger, um232h)
PACKAGES: framework-arduino-gd32v 0.1.1, tool-openocd-gd32v 0.1.1, tool-gd32vflash 0.1.0, toolchain-gd32v 9.2.0
LDF: Library Dependency Finder -> http://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 0 compatible libraries
Scanning dependencies...
No dependencies
Checking size .pio\build\sipeed-longan-nano\firmware.elf
Memory Usage -> http://bit.ly/pio-memory-usage
DATA:    [=         ]   7.2% (used 2358 bytes from 32768 bytes)
PROGRAM: [=         ]   6.3% (used 8250 bytes from 131072 bytes)
Configuring upload protocol...
AVAILABLE: altera-usb-blaster, dfu, gd-link, jlink, rv-link, serial, sipeed-rv-debugger, um232h
CURRENT: upload_protocol = dfu
Uploading .pio\build\sipeed-longan-nano\firmware.bin
dfu-util 0.9

Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
Copyright 2010-2016 Tormod Volden and Stefan Schmidt
This program is Free Software and has ABSOLUTELY NO WARRANTY
Please report bugs to http://sourceforge.net/p/dfu-util/tickets/

Opening DFU capable USB device...
ID 28e9:0189
Run-time device DFU version 011a
Claiming USB DFU Interface...
Setting Alternate Setting #0 ...
Determining device status: state = dfuERROR, status = 10
dfuERROR, clearing status
Determining device status: state = dfuIDLE, status = 0
dfuIDLE, continuing
DFU mode device DFU version 011a
Device returned transfer size 2048
GD32 flash memory access detected
Device model: GD32VF103CB
Memory segment (0x08000000 - 0801ffff)(rew)
Erase size 1024, page count 128
Downloading to address = 0x08000000, size = 8268

Download        [                         ]   0%            0 bytes
Download        [======                   ]  24%         2048 bytes
Download        [============             ]  49%         4096 bytes
Download        [==================       ]  74%         6144 bytes
Download        [======================== ]  99%         8192 bytes
Download        [=========================] 100%         8268 bytes
Download done.
File downloaded successfully
Error during download get_status
*** [upload] Error 74
=============================== [FAILED] Took 3.23 seconds ===============================
Der Terminalprozess wurde mit folgendem Exitcode beendet: 1

Das Terminal wird von Aufgaben wiederverwendet, drücken Sie zum Schließen eine beliebige Taste.

Longan Nano Lite

Wie oben geschrieben ist inzwischen auch eine Version des Longan Nano ohne Display und Gehäuse erhältlich – dieses Board wird aber noch nicht auf der Herstellerseite erwähnt; auch der Seeed-Shop hat es nicht im Programm. Ich habe es bisher nur bei aliexpress.com gefunden (und gekauft). Die Händler dort unterscheiden bei den verschiedenen Boards nicht nach Prozessortyp – man kann also den Produktbeschreibungen nicht entnehmen, dass der Nano Lite einen anderen Chip mit weniger Speicher hat (bzw. dass es überhaupt verschiedene Chips gibt).

Longan Nano Lite
Longan Nano Lite
Longan Nano Lite: Chip GD32V
Longan Nano Lite: Chip GD32V

Das „Lite” im Namen ist nicht auf meinem Mist gewachsen – es wird auf der Github-Seite von Sipeed zu den Definitionen der Boards mit GD32V-Chip genannt. Der Name ist vor allem relevant für die Arbeit mit PlatformIO – dort muss eine aktuelle Version der Board-Definitionen installiert sein (siehe oben). Neben dem fehlenden Display ist auf dem Board auch ein anderer Chip mit weniger Speicher verbaut, der GD32VF103C8T6. Deshalb scheinen auf dem Board auch interne Pin-Definitionen anders zu sein – das Blink-Beispiel kompiliert zwar in PlatformIO und wird sogar ohne die oben beschriebene Fehlermeldung hochgeladen – aber die interne LED blinkt nicht. Das funktioniert erst, wenn die Board-Definition in der platformio.ini wie folgt geändert wird:

  1. [env:sipeed-longan-nano]
  2. platform = gd32v
  3. framework = arduino
  4. board = sipeed-longan-nano-lite    ; <-----
  5. upload_protocol = dfu
  6. monitor_speed = 115200
PlatformIO: unterstützte Longan Nano-Boards
PlatformIO: unterstützte Longan Nano-Boards

Wenn man sich die Informationen im Board-Explorer von PlatformIO ansieht, findet man dort auch die Informationen aus dem Datenblatt [4]Datenblatt als PDF; die Features der verschiedenen Varianten des GD32V-Chips zeigt die Tabelle auf Seite 10. wieder: das Lite-Board hat weniger Speicher und einen anderen Chip.

Die unterschiedliche Speicherausstattung kann man auch in den Meldungen beim Übersetzen des Blink-Programms sehen:

Longan Nano Lite:

DATA:    [=         ]  11.5% (used 2358 bytes from 20480 bytes)
PROGRAM: [=         ]  12.6% (used 8250 bytes from 65536 bytes)

Longan Nano:

DATA:    [=         ]   7.2% (used 2358 bytes from 32768 bytes)
PROGRAM: [=         ]   6.3% (used 8250 bytes from 131072 bytes)

Momentan ist die Dokumentation zum Longan Nano noch sehr dünn – und zum Nano Lite so gut wie nicht vorhanden. Das wird sich voraussichtlich mit der Zeit noch ändern, wenn die Boards etwas weitere Verbreitung gefunden haben.

Benannt ist der Longan Nano übrigens nach der Longan-Frucht – Linux Development Boards mit dem Namen Lichee hat Sipeed auch im Programm. Mit Himbeeren, Bananen, Äpfeln und Kirschen aus anderer Quelle kann man sich so einen bunten Hardware-Obstkorb zusammenstellen. 🙂

Fußnoten

Fußnoten
1 Die per Mail angekündigte Lieferung wurde pünktlich verschickt und traf Anfang November 2019 nach 2 ½ Wochen ein. Der Postversand innerhalb Deutschlands erfolgte über die Logistikfirma 4PX in Grolsheim, eine Tochterfirma des chinesischen Versandriesen Alibaba – also nicht direkt aus China, sondern mit einer Zwischenstation.
2 Die Einrichtung zusätzlicher Mikrocontroller-Boards in der Arduino-IDE geschieht im Menü Datei → Voreinstellungen → Reiter Einstellungen → Zusätzliche Boardverwalter-URLs. Dann kann über den Boardverwalter im Menü Werkzeuge → Board… → Boardverwalter der Longan Nano installiert werden. Der Beitrag zu den ersten Schritten mit dem ESP32 enthält eine ausführlichere Beschreibung des Boardverwalters.
3 Anders als in der Arduino-IDE, wo die Quellprogramme (Sketches) die Dateiendung .ino haben, wird hier die übliche Endung .cpp für Programme in C++ verwendet.
4 Datenblatt als PDF; die Features der verschiedenen Varianten des GD32V-Chips zeigt die Tabelle auf Seite 10.
5 Man findet die Dateien auch bei GitHub: github.com/sipeed/Longan-DOC

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht.