Sipeed M1s Dock (RISC-V) para AIoT

Placa de desarrollo para proyectos AIoT (Inteligencia artificial de las cosas) basada en el procesador BL808 de tres núcleos y arquitectura RISC-V

SISTEMAS EMBEBIDOS

Biblioman

3/3/20244 min read

Introducción

La placa M1s Dock es una placa de desarrollo fabricada por Sipeed que incorpora como procesador el BL808 de tres núcleos con arquitectura RISC-V de la empresa bouffalolab diseñada para proyectos AIoT

  • Núcleo 1: RV64GCV+ de 64 bits a 480 MHz

  • Núcleo 2: RV32GCP+ de 32 bits a 320 MHZ

  • Núcleo 3: RV32EMC de 32 bits a 160 MHz

Además cuenta con una alta conectividad: WIFI+BLE+ Zigbee, 768K SRAM + 64 MB UHS PSRAM de memoria RAM, 16MB de memoria Flash que permite instalar una versión minimalista de Linux aunque el sistema operativo funcional para trabajar con esta placa es FreeRTOS del que dispone de soporte completo, cuenta con una pequeña NPU (Unidad de procesamiento Neuronal) de 100 GOPS que le permite ejecutar la inferencia de pequeños modelos de IA entrenados previamente para el reconocimiento de imágenes para ello de manera opcional se puede adquirir con una cámara MIPI OV2685 de 2MP y Led Flash más un LCD de 280x240 px

Pinout y puertos de expansión

La placa dispone de 32 pines de expansión a los que se les puede soldar los pines de cabecera correspondientes para pinchar en una protoboard de los cuales tenemos un pin GND otro de alimentación 3.3V y otro de 5V (VBUS), además dispone de las típicas interfaces UART, I2C, SPI, SDIO, Ethernet (RMII), ADC/DAC, 2xUSB tipo C de los cuales uno es OTG y el otro es USB-SERIAL ambos se pueden utilizar para la programación del firmware, dispone de un slot para tarjetas micro-SD, cuatro pulsadores (S1, S2, RST y BOOT) y un micrófono analógico.

Alimentación y programación del firmware

La alimentación y la programación del firmware es un poco "peculiar". La forma habitual de alimentar la placa es a través de cualquiera de los puertos USB tipo C que usaremos también para cargar el firmware en la memoria SPI Flash, no he visto documentación para arrancar desde la micro-SD que se utiliza para depuración a través de un módulo que se vende por separado y que sería útil para usos mas avanzados.

En el siguiente diagrama se muestra las opciones de alimentación y carga del firmware:

Podéis ver la review de esta pequeña placa en el siguiente vídeo así como una comparativa con su mas directo competidor el ESP32 S3

Instalación del entorno de desarrollo (SDK) y test de inferencia modelo IA para reconocimiento de números

La instalación del entorno de desarrollo DSK se tiene que hacer desde una computadora con arquitectura X86/64 bits con un sistema operativo Linux instalado, en mi caso voy a utilizar Ubuntu 22.04 LTS.

Los pasos a seguir son los siguientes que podréis encontrar en el repositorio de Gitte

1. Creamos el directorio bl808 en nuestra carpeta home y clonamos el SDK:

mkdir ~/bl808 && cd ~/bl808
git clone https://github.com/sipeed/M1s_BL808_SDK.git

2. Descargamos los ejemplos y creamos un enlace simbólico a la carpeta SDK :

cd ~/bl808
git clone https://github.com/sipeed/M1s_BL808_example.git
cd M1s_BL808_example && ln -s ../M1s_BL808_SDK ./

3. Descargamos las herramientas de compilación cruzada (toolchain) versión versión 2.2.4 desde aquí o aquí y las descomprimimos en la carpeta M1s_BL808_SDK/toolchain/ después renombramos la carpeta con el nombre Linux_x86_64

cd ~/bl808 && mkdir M1s_BL808_SDK/toolchain

mv {Tú ruta de descarga}/Xuantie-900-gcc-elf-newlib-x86_64-V2.2.4-20220715.tar.gz ~/bl808
tar -zxvf Xuantie-900-gcc-elf-newlib-x86_64-V2.2.4-20220715.tar.gz -C M1s_BL808_SDK/toolchain/

cd M1s_BL808_SDK/toolchain && mv Xuantie-900-gcc-elf-newlib-x86_64-V2.2.4/ Linux_x86_64 && cd -

4. Compilamos el ejemplo blai_mnist_demo basado en la base de datos MNIST

cd ~/bl808/M1s_BL808_example/c906_app/

# Configuramos las variables de entorno (se ejecuta solo una vez por entorno de trabajo)
export BL_SDK_PATH=$(pwd)/../M1s_BL808_SDK

# Compilamos el ejemplo de IA basado en la base de datos MNIST
./build.sh hello_world

5. El archivo .bin resultante de la compilación se crea en la carpeta:

cd ~/bl808/M1s_BL808_example/c906_app/build_out

6. Por último grabamos el firmware en la SPI Flash de la placa, hay dos métodos para esto:

1) Utilizar el firmware de fabrica que viene cargado en la placa por defecto y el puerto USB tipo C OTG, al conectarlo al PC se creará una unidad USB de almacenamiento y arrastraremos y soltaremos el archivo .bin en ella. El sistema de archivos crea dos particiones mira el vídeo de abajo para saber como acceder a ellas y donde guardar el modelo de IA entrenado previamente.

2) Utilizar el software Bouffalo Lab Dev Cube en este caso conectaremos el cable USB tipo C UART y seguiremos las instrucciones del fabricante

En el siguiente vídeo se muestra el proceso a seguir: