Sipeed Longan Nano Introducción - pensactius/Tutoriales GitHub Wiki

Longan Nano (GD32VF103)

Introducción

Longan Nano de Sipeed, una pequeña placa basada en el SoC GigaDevice GD32VF103 es solo eso; una CPU RISC-V con un paquete de periféricos decentes.

El GD32V implementa una CPU RV32IMAC, donde "RV32I" se refiere a una CPU de 32 bits con el Conjunto de Instrucciones Base de Enteros (Base Integer Instruction Set), la "M" denota la extensión estándar para Multiplicación y división de enteros, la "A" denota la extensión de Instrucciones atómicas, y la "C" se refiere a la extensión para instrucciones comprimidas (es decir, códigos de operación de 16 bits para instrucciones de uso común, útiles para este dispositivo de memoria tan limitada).

La placa viene con una pantalla de 0.96 pulgadas, permite la manipulación de los dos botones pulsadores integrados y proporciona acceso a "pin headers" de 0.1 pulgadas a lo largo de la placa, lo que permite insertarla en una "protoboard". Los "pin headers" se suministran con la placa pero deben soldarse. La pequeña pantalla es una pantalla de cristal líquido a color de 160 x 80 píxeles que utiliza tecnología de pantalla IPS.

Especificaciones

El GD32VF103CBT6, con una velocidad de ejecución de 108 MHz, 32 bits no se queda atrás con capacidades impresionantes.

 128 K bytes de memoria flash
 32 K bytes de RAM
 2 ADC (12 bits, 10 canales)
 2 DAC (12 bits)
 7 temporizadores (16 bits) de distintas capacidades
 un "watchdog", un contador / reloj en tiempo real
 3 USART
 2 I2C
 3 SPI
 2 I2S
 2 PUEDE
 1 USB OTG

Pinout

Longan Nano Pinout

RISC-V?

RISC-V se refiere a la arquitectura de la CPU que lleva el microcontrolador. RISC significa "Reduced Instruction Set Computer" utiliza instrucciones simplificadas que requieren menos ciclos para ejecutarse. En el lado opuesto, CISC (Complex Instruction Set Computer) utiliza un conjunto más amplio de instrucciones complejas que suele tardar muchos ciclos en completarse. MIPS, SPARC, PowerPC y ARM son familias conocidas de procesadores que implementan la arquitectura RISC, mientras que el venerable Intel 8080 y sus actuales sucesores x64 están en el campo CISC.

RISC-V, pronunciado Risc Five, es una arquitectura creada en la University of California, Berkeley en 2010. Su característica principal es que es una arquitectura de código abierto, es decir, las especificaciones están disponibles al alcance de cualquiera, al contrario que ocurre con la arquitectura ARM, que es de pago. Eso significa que si se desea fabricar CPUs con arquitectura ARM hay que pagar "royalties", mientras que no es necesario para crear una CPU con especificaciones RISC-V.

PlatformIO y en Linux exclusivamente

Antes de continuar debería destacar que no he sido capaz de programar la placa bajo Windows, pues me ha sido imposible instalar los drivers DFU para Windows. Recomiendo encarecidamente usar Linux ya que, al menos en mi caso, se evitan muchas frustraciones.

PlatformIO IDE es una extensión de Visual Studio Code que permite programar microcontroladores desde este. Se asumirá que PlatformIO (PIO para abreviar) está instalado y funcionando correctamente en Visual Studio Code.

Instalación de la plataforma GigaDevice GD32V

Para programar la placa Sipeed Longan Nano debemos primero instalar la plataforma de desarrollo para dispositivos GigaDevice GD32V:

  1. Si PIO Home no está abierto, pulsa su icono en el panel izquierdo
  2. Selecciona QUICK ACCESS/PIO Home/Open en el panel izquierdo
  3. En el apartado Platforms selecciona la pestaña Embedded
  4. teclea gd32v en el cuadro de texto Filter platforms by name
  5. Debería encontrar la plataforma GigaDevice GD32V. Pulsa en el resultado.
  6. Pulsa el botón Install

Compilar Blink

Vamos a crear un proyecto nuevo desde desde PlatformIO:

  1. Si PIO Home no está abierto, pulsa su icono en el panel izquierdo
  2. Selecciona QUICK ACCESS/PIO Home/Open en el panel izquierdo
  3. En el apartado Home pulsa en + New Project
  4. Establece el nombre del proyecto. Yo he elejido BlinkLonganNano
  5. Selecciona la placa. Yo he introducido longan y a continuación he seleccionado Sipeed Longan Nano en la lista de resultados
  6. Cambia el "framework" de GigaDevice GD32V SDK a Arduino
  7. Pulsa el botón Finish
  8. PlatformIO crea por nosotros un proyecto nuevo basado en Arduino
  9. En el panel EXPLORER pulsa en el directorio src y después el archivo main.cpp

En la pestaña main.cpp se muestra el código generado, muy básico, por la plantilla. Puedes observar que tiene la estructura típica de un programa Arduino, con sus funciones setup() y loop() (vacías por ahora).

No elimines la directiva #include <Arduino.h> de la parte superior; en PlatformIO es necesaria cuando se quiere programar usando el framework de Arduino. Cuando se usa el editor de Arduino no es necesaria esta línea porque está implícita.

Diferencia entre framework Arduino y editor Arduino

Cuando nos referimos al framework Arduino nos estamos refiriendo al conjunto de instrucciones y librerías disponibles que usamos para programar (p.ej el uso del comando digitalWrite(), etc.).

Cuando nos referimos al editor Arduino nos estamos refiriendo al programa Arduino que sirve para editar código.

Vamos a programar el típico programa blink de Arduino. Cambia el código en main.cpp como se muestra a continuación:

#include <Arduino.h>

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  digitalWrite(LED_BUILTIN, HIGH);
  delay(250);
  digitalWrite(LED_BUILTIN, LOW);
  delay(1000);
}
  1. Pulsa en el icono PlatformIO: Build. Está situado en la barra de estado en la parte inferior y tiene forma de casilla de verificación

Compilación terminada con éxito

Una vez la compilación ha terminado con éxito sólo queda subirlo a la placa.

Subir el programa por USB desde PlatformIO (DFU)

Es posible alimentar la Longan Nano y cargar los programas a través del puerto USB tal como se hace con placas ESP como nodeMCU o Lolin / Wemos D1 mini. La Longan Nano utiliza el protocolo DFU (Device Firmware Upgrade), un mecanismo de comunicación que permite actualizar el firmware en dispositivos mediante conexión USB.

Modo de Ejecución y modo de Programación

Al contrario de lo que ocurre con placas tipo nodeMCU o Arduino UNO, la Longan Nano tiene dos modos de arranque. Por defecto, cuando alimentamos la placa desde USB, se ejecuta en modo de ejecución y se ejecuta el programa que haya cargado en la placa, pero no es posible subir ningún programa nuevo.

Para poder subir un programa hay que pasar al modo de programación. Esto se consigue siguiendo estos pasos:

  1. Pulsa el botón BOOT0
  2. Manteniendo BOOT0 pulsado pulsa brevemente el botón de RESET
  3. Suelta el botón BOOT0

Ahora la placa se ha reiniciado, pero arranca desde el "bootloader", una región de 18KiB de la flash que implementa el protocolo DFU, lo que permite subir nuevos programas usando este protocolo.

En Windows es necesario cargar los drivers DFU específicos de la placa para que reconozca el dispositivo en modo de programación. La documentación oficial menciona instalar los drivers usando la aplicación Zadig, pero a mí no me ha funcionado.

Es por este motivo que recomiendo usar Linux, ya que no hay que instalar ningún driver

Herramineta dfu-util

dfu-util es una herramienta utilizada para subir programas usando protocolo DFU. PlatformIO instala automáticamente esta herramienta cuando se añade la plataforma GigaDevice GD32V. La versión que instala, a fecha de escribir estas líneas, es la 0.9 y tiene un bug que hará que aparezca un mensaje de error al subir el programa a la placa. A efectos prácticos el error se puede ignorar, ya que el programa se sube a la placa igualmente. Para corregir el error hay que sustituir la utilidad dfu-util que instala PlatformIO por defecto por la última versión. Como esto es un proceso no apto para principiantes se explicará más adelante.

Antes de subir el firmware a la placa es buena idea comprobar que la Longan Nano es reconocida por el ordenador y que aparece como dispositivo USB con ID [2809:0189]. Conecta la Longan Nano al USB y ejecuta:

[andriu@arch-home]$ ~/.platformio/packages/tool-gd32vflash/dfu-util -l
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/

No ha detectado nada porque la placa está en modo ejecución. Pasa al modo de programación pulsando BOOT0 y RESET como se describió anteriormente. Si ejecutas ahora el comando

dfu-util -l

deberías ver algo así:

[andriu@arch-home]$ ~/.platformio/packages/tool-gd32vflash/dfu-util -l
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/

Found DFU: [28e9:0189] ver=0100, devnum=7, cfg=1, intf=0, path="4-1", alt=0, name="@Internal Flash  /0x08000000/128*001Kg", serial="3CBJ"
[andriu@arch-home]$

Esto indica que ha encontrado la placa Sipeed Longan Nano.

Reglas udev

Es probable que no tengas acceso para programar la Longan Nano mediante USB. En Linux el acceso a dispositivos USB está restringido y es necesario crear lo que se denominan reglas udev. PlatformIO provee una lista de reglas udev para todas las placas soportadas por el entorno. Puedes instalar estas reglas como sigue:

  1. Descarga el archivo de reglas de PlatformIO

  2. Copia el archivo al directorio adecuado (es necesario el comando sudo ya que hay que copiarlo a un directorio de sistema):

sudo cp 99-platformio-udev.rules /etc/udev/rules.d/99-platformio-udev.rules

Puedes comprobar que el archivo contiene una regla como esta:

# Longan Nano, make the device world writeable.
ATTRS{idVendor}=="28e9", ATTRS{idProduct}=="0189", MODE="0666"
# Better yet, set to a group using, for example, GROUP="sudo"
  1. Carga las nuevas reglas mediante el comando:

sudo udevadm control --reload.

En algunos casos es posible que sea necesario reiniciar la máquina para que se apliquen las nuevas reglas.

Subir el programa

Para poder subir el programa mediante USB usando el protocolo DFU hay que añadir la opción upload_protocol=dfu al archivo de configuración platformio.ini:

; PlatformIO Project Configuration File
;
;   Build options: build flags, source filter
;   Upload options: custom upload port, speed and extra flags
;   Library options: dependencies, extra library storages
;   Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html

[env:sipeed-longan-nano]
platform = gd32v
board = sipeed-longan-nano
framework = arduino
upload_protocol = dfu

Ahora ya está todo listo para poder subir el programa a la placa.

  1. Asegurate que la placa está en modo de programación como se explica maś arriba.

  2. Pulsa el botón PlatformIO: Upload (es el icono con una flecha hacia la derecha situado en la barra de estado en la parte inferior)

Device returned transfer size 2048
DfuSe interface name: "Internal Flash  "
Found GD32VF103, which reports a bad page size and count for its internal memory.
Fixed layout based on part number: page size 1024, count 128.
Downloading element to address = 0x08000000, size = 8268

Erase           [                         ]   0%            0 bytes
Erase           [======                   ]  24%         2048 bytes
Erase           [============             ]  49%         4096 bytes
Erase           [==================       ]  74%         6144 bytes
Erase           [======================== ]  99%         8192 bytes
Erase           [=========================] 100%         8268 bytes
Erase    done.

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
dfu-util: Error during download get_status
*** [upload] Error 74
============================ [FAILED] Took 2.03 seconds ============================
The terminal process terminated with exit code: 1

A pesar del Error 74 mostrado al final, el programa se ha subido a la placa y comienza a ejecutarse. Si todo ha ido bien deberías ver un LED rojo, situado debajo de la pantalla OLED, que parpadea.

References

https://www.susa.net/wordpress/2019/10/longan-nano-gd32vf103/

https://sigmdel.ca/michel/ha/gd32v/longan_nano_01_en.html

⚠️ **GitHub.com Fallback** ⚠️