Risc-V : découverte sous MaixPy (MicroPython pour Risc-V)

Bonjour à tous,

La technologie Risc-V fait beaucoup parler d'elle avec, par exemple, le Kendryte K210 et des prototypes de projets parfois très impressionnants (intelligence artificielle, reconnaissance faciales, d'objets, etc).

J'ai aussi entendu parlé de MaixPy, une version de MicroPython pour Risc-V sur laquelle Damien Georges (créateur de MicroPython) a participé.


Je me suis donc penché un peu sur le carte de développement MaxDuino AI incluant un TFT 2.4" couleur et une caméra.

Bien supportant l'environnement Arduino et Plateforme IO, c'est surtout MaixPy (donc MicroPython) qui m'intéressait... d'autant qu'il est pré-chargé sur la plateforme de développement!

La carte MaxDuino

Commençons par le début... la carte de développement elle même.


Le MaxDuino est une carte basée sur le processeur Sipeed M1. Sous le couvercle métallique marqué d'un grand S nous retrouvons le fameux K210 de Kendryte, un module double coeur RISC-V orienté Intelligence Artificielle (IA) et accompagné des éléments nécessaires à son bon fonctionnement (comme régulateur, Flash, etc).

La carte de développement Maixduino AI est une carte au facteur de forme Arduino UNO équipé d'un module Sipeed M1 AI (Artificial Intelligence) et d'un module ESP32 pour assurer la connectivité WiFi et Bluetooth ainsi que le support Analogique pour la carte MaixDuino. Cet ESP32 est préchargé avec un firmware spécialisé qu'il ne sera pas nécessaire de modifier.

La carte MaixDuino propose également les éléments suivants:

  • Connecteur DVP: Le "Digital Video Port" port vidéo numérique est une interface parallèle branché directement sur le microcontrôleur. Celui-ci est conçu pour y brancher une camera.
  • Connecteur LCD: qui est une interface SPI permettant de connecter un afficheur LCD. Le  MaixDuino est livré avec un LCD de 2.4" exploitant le contrôleur ST7789 (voir les spécifications ici). Ce LCD propose une résolution de 320x240 pixels en 262K couleurs.
  • Microphone: microphone MEMS intégré à la carte (MSM261S4030H0)
  • Sortie Audio: avec le DAC TM8211 qui est composant I2S (protocole série destinée aux sorties audios).
  • Amplificateur Audio: le NS4150 assure une amplification audio de 3W.
  • Port USB-C: port USB 2.0 pour alimentation e programmation de la carte.
  • Conn. Arduino UNO: entrées/sortie numériques, PWM, I2C, UART,  6x entrées analogiques et lignes d'alimentations.

Sipeed M1 et son Kendryte K210

Le Sipeed M1 est un processeur Kendryte K210 64 bits cadencé à 400 Mhz (ajustable en fréquence) et disposant de 8 Mo de SRAM et 16 Mo de mémoire Flash. Un montre de puissance dans le domaine des microcontrôleurs.


Le K210 dispose également d'un FPU double-précision (unité de calcul en virgule flottante) supportant les opérations de multiplication, de division  et racine carrée. Il dispose également d'un accélérateur de transformation de fourrier (FFT).

Le coeur Kendryte K210 est équipé d'un réseau neuronal matériel (un accélérateur KPU), une unité de traitement vocal (APU), un programmable IO array permettant d'associer des fonctions matérielles aux broches du K210 (FPIOA/IOMUX).

L'unité de traitement IA du K210 peut effectuer des opérations tels que calcul de convolution, normalisation par lots, activation et pooling. En même temps, il est capable d'effectuer un pré-traitement d'une source vocale (la direction) et prise en charge d'une sortie audio.

Attention: deux ports séries

Cela est déroutant si on n'est pas au courant... mais le MaixDuino ouvre DEUX ports Usb-Série lorsqu'il est connecté à l'ordinateur.
Ces deux canaux UARTs sont ouverts par le composant CH522 et permet ainsi à l'ordinateur d'atteindre les deux microcontrôleurs présent sur la carte!

  • Le premier canal permet d'atteindre l'ESP32 qui est déjà préprogrammé (et ne devrait donc pas nécessité le téléversement d'un firmware).
  • Le second canal permet d'atteindre le processeur Sipeed M1 (K210) pour y téléverser le programme utilisateur. 

A noter que le canal USB-Série vers le K210 est utilisé pour programmer la carte MaixDuino avec Arduino IDE/Plateform IO/MicroPython MaixPy.

MaixPy : MicroPython préchargé


MaixPy est une version de MicroPython développé pour pour les cartes Maix's (c'est donc un MicroPython pour Risv-V et plus précisément K210).

En tant qu'amateur MicroPython, cela est du premier intérêt pour moi.

La carte est préchargée avec MaixPy, connectez simplement un terminal sur le port USB-Série du processeur Sipeed et commencez à saisir des commandes en Python sur la ligne de commande REPL. 

Vous pouvez également utiliser vos outils favoris pour téléverser des fichiers sur la carte MicroPython.

Note: Rappelez-vous de sélectionner le bon port USB-Série exposé par le processeur Sipeed M1.

>>> 
[MAIXPY]Pll0:freq:832000000
[MAIXPY]Pll1:freq:398666666
[MAIXPY]Pll2:freq:45066666
[MAIXPY]cpu:freq:416000000
[MAIXPY]kpu:freq:398666666
[MAIXPY]Flash:0xc8:0x17
open second core...
gc heap=0x8016d4e0-0x801ed4e0
[MaixPy] init end
 
 __  __              _____  __   __  _____   __     __
|  \/  |     /\     |_   _| \ \ / / |  __ \  \ \   / /
| \  / |    /  \      | |    \ V /  | |__) |  \ \_/ /                           
| |\/| |   / /\ \     | |     > <   |  ___/    \   /                            
| |  | |  / ____ \   _| |_   / . \  | |         | |                             
|_|  |_| /_/    \_\ |_____| /_/ \_\ |_|         |_|                             
                                                                                
Official Site : https://www.sipeed.com                                          
Wiki          : https://maixpy.sipeed.com                                       
                                                                                
MicroPython 9f3862f on 2019-07-19; Sipeed_M1 with kendryte-k210                 
Type "help()" for more information.

Il s'agit d'une implémentation standard de MicroPython, la commande help() et help('modules') sont disponibles et permettent d'obtenir de précieuses informations sur l'environnement MicroPython.

>>> help();                                                                     
Welcome to MicroPython on the Sipeed Maix!                                      
                                                                                
For generic online docs please visit https://maixpy.sipeed.com                  
                                                                                
Official website : http://www.sipeed.com                                        
                                                                                
Control commands:                                                               
  CTRL-A        -- on a blank line, enter raw REPL mode                         
  CTRL-B        -- on a blank line, enter normal REPL mode                      
  CTRL-C        -- interrupt a running program                                  
  CTRL-D        -- on a blank line, do a soft reset of the board                
  CTRL-E        -- on a blank line, enter paste mode                            
                                                                                
For further help on a specific object, type help(obj)                           
For a list of available modules, type help('modules')                           
>>> help('modules')                                                             
KPU               hashlib           random            uheapq                    
Maix              heapq             re                uio                       
__main__          image             sensor            ujson                     
_boot             json              socket            uos                       
_webrepl          lcd               struct            urandom                   
audio             machine           sys               ure                       
binascii          math              time              usocket                   
board             math              touchscreen       ustruct                   
builtins          micropython       ubinascii         utime                     
cmath             modules           ucollections      utimeq                    
collections       nes               ucryptolib        uzlib                     
errno             network           uctypes           video                     
fpioa_manager     os                uerrno            zlib                      
gc                pye_mp            uhashlib                                    
Plus any modules on the filesystem                                              
>>> 

Le module machine permet d'accéder au fonctionnalités standards de module. A rappeler que ce module n'est pas une implémentation complète... étant donné les spécificités du K210, certaines fonctionnalités sont implémentées dans d'autres modules.

Le module fpioa_manager prend en charge la gestion de la matrice de multiplexage (association des fonctions matérielles avec les broches du K210).

Cette implémentation intègre également l'éditeur pye de Robert-HH fonctionnant directement dans l'environnement MicroPython de la carte (voir le module pye_mp).

Pour le reste, quelques modules spécifiques à la plateforme mériteraient quelques investigations: lcd, sensor, image, nes, audio, touchscreen, video.

Avis personnel

Je dois avouer avoir été très impressionné par l'implémentation MaixPy! La plateforme est stable et une fois que l'on sait qu'il faut sélectionner le bon port série... l'interaction avec MicroPython devient un vrai jeu d'enfant (comme sur une Pyboard)!

j'ai malheureusement beaucoup de projets sur le feu, ce qui m'empêche de poursuivre plus loin les explorations. Ceci dit, j'y reviendrais avec plaisir.

Plus d'information

Il y a encore tellement a dire à propos de cette carte... tellement de ressources à partager.. suivez simplement le lien vers la fiche produit

Aucun commentaire