Vue lecture

Il y a de nouveaux articles disponibles, cliquez pour rafraîchir la page.

Le Pico 2 et son MCU RP2350

Bonjour à tous,

Le projet Amethyst, tel était son nom avant de devenir RP2350, a débuté presque en même temps que celui du RP2040. Le projet Amethyst visait déjà à anticiper les améliorations nécessaires du RP2040.

Suivez le fil de cet article... il se pourrait que vous découvriez d'autres informations croustillantes! 

Pico 2 - disponible chez MC Hobby

Ce second microcontrôleur créé par le fondation Raspberry-Pi et baptisé RP2350 est basé sur Cortex-M33 double coeurs à 150 Mhz épaulé par une mémoire flash de 4 Mio (QSPI). Le RP2350 dispose aussi d'une mémoire RAM de 512 Kio (presque le double du Pico original).

Ce nouveau microcontrôleur est non seulement plus rapide mais il dispose aussi d'une vraie unité de calcul en virgule flottante double précision. Le RP2350 dispose également d'un support DSP pour le traitement de signal... tout en restant 100% compatible avec le Pico original (logiciel et matériel).

Pico 2 - disponible chez MC Hobby

L'augmentation de fréquence d'horloge de 133 MHz à 150 MHz améliore aussi le temps d'accès à la RAM et à la mémoire Flash mais le gain en performance va bien au delà des quelques 11% apportés par l'augmentation de fréquence d'horloge.
En effet, une série Cortex-M3 est tellement plus performant qu'une série Cortex-M0

Côté GPIOs, il y a aussi une surprise:

  • Les GPIOs sont tolérant 5V ... un grand pas pour le monde rétro!
  • Les 6 bus (2x I2C, 2x SPI, 2x UART) qu'il est possible de localiser à de très nombreux emplacements sur les GPIOs grâce au Bus Fabric.
  • 24 canaux PWM.
  • toujours 3 entrées analogiques @ 12 bits (500.000 échantillons par seconde).
  • 16 canaux DMA (pour automatiser des transferts entres périphériques internes et la RAM).

Si la carte ne dispose toujours pas de lecteur pour carte SD, l'interface SDIO est toujours disponible. Il est toujours possible de réaliser une sortie VGA mais c'est le nouveau périphérique TMDS qui permettra de créer plus facilement une sortie HDMI/DVI-D qui a attiré mon attention. Le périphérique TMDS est le résultat immédiat du bloc HSTX (High Speed data Transmission) destiné à la transmission de données à haut débit.

Rien n'a changé du côté du support USB et nous avons toujours une fiche micro-USB (là où certains acteurs auraient préférés de l'USB-C même s'il est plus coûteux).

Cortex M33 ou Risc-V

L'une des grandes nouveautés du RP2350 est la possibilité d'utiliser soit les 2 coeurs ARM Cortex M33, soit deux coeurs RISC-V (ou un coeur de chaque type). 

La sélection des cores utilisés est opéré par la séquence de boot du Pico 2 qui est capable de détecter l'architecture utilisée dans le binaire utilisateur (celui qui doit être exécuté après le boot).

RISC-V est un jeu d'instruction en standard ouvert qui fait des émules depuis quelques années. Plus récemment, c'est le déploiement des premiers ordinateurs RISC-V qui fait le buzz.
Une technologie qu'il ne faut vraiment plus ignorer! A voir sur riscv.org

La fondation ouvre ainsi la porte des MCU RISC-V avec l'implémentation Open-Source Hazard3 (Dépôt GitHub).

Hazard3 prend en charge les spécifications RV32IMAC, une belle occasion de découvrir et tester le monde RISC-V sans devoir acheter un produit spécifique. Le fichier readme de Hazard3 inclus une documentation assez précise... incluant des notes pour mettre en place la chaîne de compilation.

A noter que Hazard3 est le fruit du travail personnel de Luke Wren, l'un des ingénieurs impliqués dans le projet Raspberry-Pi.

MicroPython dispose par ailleurs d'une implémentation RISC-V qui peut être testé sur le Pico 2 comme en témoigne cette vidéo (YouTube)

Mes impressions
Avec cette proposition double architecture, il est fort a parier que la fondation explore le potentiel de RISC-V pour une future lignée de microcontrôleur, voire aussi de processeurs. Avec les travaux de Luke Wren, la fondation démontre aussi qu'elle dispose d'un savoir faire en interne... et ce n'est pas rien.
Moi qui voulais explorer RISC-V et ses possibilités... voila que cela est servi sur un plateau :-)

Consommation réduite en mode veille

L'une des grosses critiques du Pico original concernait le mode veille (deepsleep) qui consommait une courant de l'ordre de 1 à 2 milliampère. Bien qu'apparemment faible, cela limite la durée de vie d'un projet sur batterie à quelques semaines.

Le Pico 2 dispose d'un tout nouvel étage d'alimentation basé sur un hacheur DC/DC très performant.

Le Pico 2 en mode veille réduit la consommation à moins de 10 µA, ce qui permet d'envisager une durée de vie de plusieurs mois sur batterie.

A noter qu'il est possible de maintenir la RAM interne sous-tension (dit "rétention mode") au prix d'un courant de veille plus important.

RAM en accès concurrent

Les 512 Kio de RAM sont répartis en 10 banques à accès concurrent! Cela signifie que chaque coeur peut accéder à son propre espace RAM en toute indépendance.

Cela autorise un périphérique tierce (ex: ADC, HSTX, PIO) à effectuer des transferts vers une banque mémoire sans être entravé par un autre processus. C'est aussi pour cela que le Pico 2 dispose de 16 canaux DMA!

Cette possibilité d'accès concurrent aux différentes banques permet ainsi d'éviter des temps d'attente imposés par une RAM monolithique ne supportant les accès concurrents. Même si cela n'est pas vraiment neuf, il s'agit là d'une optimisation importante pour maintenir de hautes performances.

Support pour RAM QSPI / PSRAM externe

Le bus QSPI (Quad SPI) est un bus SPI avec 4 lignes de données, ce qui permet de transférer plusieurs bits en un seul cycle d'horloge. Ce type de bus est déjà utilisé sur le Pico original pour accéder à la mémoire Flash.

Le microcontrôleur RP2350 apporte également le support de PSRAM externe déjà très populaire avec les plateformes ESP32.
Cela permet d'augmenter la quantité de RAM disponible sur le microcontrôleur jusqu'à atteindre 8 Mio.

A noter que le SparkFun Pro Micro RP2350 propose une carte avec 8Mio de PSRAM et 16 Mio de mémoire Flash.

SparkFun Pro Micro RP2350

Il faut cependant garder à l'esprit qu'une telle RAM est accédé par l'intermédiaire d'un bus série (même 4 bits à la fois) et qu'elle inévitablement plus lente que la RAM interne du MicroContrôleur.

Mes impressions
Le RP2040 atteignait déjà la puissance d'un Pentium, puissance que l'on dépasse allégrement avec le RP2350. Avec une PSRAM externe, le support USB et le périphérique TMDS (que nous verrons plus tard) il devient évident qu'il est possible de créer un ordinateur rétro type Pentium à partir d'un Pico RP2350.
Il va être possible de créer de puissant émulateurs avec un tel MCU.

XIP: amélioration accès à la mémoire Flash

L'accès à la mémoire flash dispose d'une plus grande bande passante grâce à une technique de cache double-banked (word stripping).

Le support de l'interface XIP (eXecute In Place) permet au MCU d'exécuter des instructions directement depuis la mémoire Flash sans nécessiter de cycle d'horloge supplémentaire. Il me semble que cette technique est déjà exploitée par MicroPython depuis un bon moment.

Les temps de transferts sont également améliorés avec des modes accélérés (burst) en lecture/écritures, translation d'adresse et "odd clock divisors" (qui me paraît encore obscure).

Mes impressions
La présence d'un Burst Mode est particulièrement pratique pour tous les projets exploitant un système de fichiers en Flash. Je pense plus particulièrement à MicroPython / CircuitPython.

Améliorations PIO

Cette section cache une petite pépite!

PIO (Programmable IO) est un langage de bas-niveau offre de vrais avantages concernant le traitement de données et manipulations des entrées/sorties en bas niveau. PIO offre des machines à état fini (StateMachine) associé à un GPIO et à une programme PIO (qui manipule le GPIO). Le programme sera exécuter à une fréquence entre 2000 Hz et 125.000.000 Hz (125 MHz). PIO permet d'envisager la réalisation d'application "time-critical" comme, par exemple, une sortie VGA, HDMI, transfert haut debit.

Le RP2350 se voit accompagné d'un 3ieme bloc PIO, ce qui porte le nombre processus PIO à 12 machine à état! ... Soit 12 mini-processus autonomes indépendants des coeurs.

Non seulement les PIO profitent de l'augmentation de fréquence à 150 MHz (contre 133 Mhz) mais le RP2350 dispose d'instructions PIO supplémentaires.

Le nouveau périphérique HSTX (High Speed Transfert) permet de créer une sortie DVI (TMDS) avec un faible impact sur le système... laissant ainsi beaucoup de ressource disponibles pour le projet.
Il est ainsi possible de créer une sortie VGA à 60 Hz sans overclocking produisant deux pixels en sortie par tick.

Le seul autre endroit où j'en ai entendu parlé est sur cette vidéo d'Adafruit Industrie qui semble avoir capté le potentiel de ce périphérique.


Architecture sécurisée

La grande nouveauté du RP2350 est l'apport d'une architecture sécurisée. Si celle-ci intéressera surtout les professionnels, elle apporte aussi ses avantages aux monde des Makers.

RP2350 inclus la fonctionnalité "ARM TrustZone-M" qui permet d'isoler du code et ses données du reste de l'application à l'aide de 8 SAU (Secure Attribut Unit). 
Voir TrustZone technology for Armv8-M Architecture sur arm.com .

Les applications industrielles utiliseront cette fonctionnalité pour verrouiller leur firmware ou garder les éléments importants à l'abri des yeux indiscrets.

Les Makers pourrons utiliser cette fonctionnalité pour y cacher des jetons de connexion (Tokens) des clés d'accès aux API (API Keys), clé WiFi et des informations privées. 

Ainsi, si le projet se perd dans la nature, il n'y a aucun risque pour les données sensibles qu'il transporte.

L'architecture sécurisée inclus:

  • Secure boot : pour empêcher l'exécution de code non autorisé sur le RP2350
  • Encrypted boot : pour empêcher la lecture non autorisée du code et des données.
  • Isolated execution : code sécurisé et code non-sécurisé peuvent être exécutés en même temps.
    Le code sécurisé a accès à la zone non-sécurisée (mais pas l'inverse!)

Cette architecture sécurisée est possible grâce aux éléments suivants:

  • Inclusion de l'extension "ARM TrustZone-M" et de 8 SAU (Secure Attribut Unit). Voir TrustZone technology for Armv8-M Architecture sur arm.com
  • 8Kio de Mémoire antifuse OTP (one-time-programmable) permettant la configuration de clé de stockage (avec blocage matériel ou logiciel).
  • Signature du boot (optionnel). Cette vérification est effectué par ma Mask ROM du microcontrôleur (donc non modifiable/non attackable) avec l'empreinte de la clé (fingerprint) stocké dans la mémoire OTP!
  • Un stockage OTP protégé pour la clé de décryption du boot (optionnel)
  • Accélération matériel du hash SHA-256
  • Un vrai générateur de nombre aléatoire matériel (TRNG)
  • Détection de glitch pour résister aux attaques par injection électro-magnétique.
  • Clé de débogage via OTP

Les attaque par injection EM

Voici une petit vidéo de Aaron Christophel qui cherche le meilleur point d'attaque pour injecter une impulsion électromagnétique en vue d'extraire le firmware d'un LPC2388. C'est la méthode de Glictching qui est ici utilisée. Cette analyse débouche sur une seconde vidéo où le firmware est extrait de la carte.


A propos de la mémoire OTP AntiFuse

OTP (One Time Programmable) est une mémoire de type ROM que l'on peut programmer une seule fois. Elle peut être utilisé pour y stocker des clés.

La mémore OTP offre une excellente résistance aux attaques car il n'est pas possible de lire les bits à l'aide d'un microscope à balayage (oui, il y a des moyens dans l'espionnage industriel).

Comme le montre l'image ci-dessous, une mémoire eFuse OTP traditionnelle, il est très facile de lire le bit (s'il est à 1 ou à 0) puisque la section de métal est vaporisée sur le fusible.


Les AntiFuse OTP fonctionnent différemment car on brûle volontairement le la jonction d'un "transistor" (son substrat) créant ainsi une voie d'écoulement  permanente pour le courant!
La différence ici, c'est qu'il n'est pas possible d'identifier les jonctions non-altérée  des jonctions en court-circuit.

C'est à la vue de tous... mais pas lisible :-)
Il semblerait que ce type de jonction soit aussi beaucoup plus difficile à manipuler avec les techniques usuelles d'espionnage industriel.

Voir ici pour plus d'information (pufsecurity.com).

MCU en version A ou version B

Le microcontrôleur RP2350 existe en deux versions A et B (30 GPIOs et 48 GPIOs).
Le MCU équipant le Pico 2 est le RP2350A qui expose 30 GPIOs sur un composant en QFN60 (10x10mm) avec une mémoire Flash externe de 4 Mio (contre 2 Mio Pico original).

Ces révisions ne concernent pas vraiment le Pico 2 mais les Makers disposés à créer leurs propres cartes!

Là où les choses deviennent intéressantes:

  • Le RP2350B dispose aussi de 8 entrées analogiques!
  • Le RP205xA & B seront disponibles avec 2 Mio de mémoire Flash QSPI stacked-in-package (c'est à dire empilé au dessus microcontrôleur).

Ces nouvelles variantes portent les références RP2354A and RP2354B (avec le dernier chiffre 4 indiquant la quantité de mémoire Flash empilé sur le microcontrôleur.

Nouveau SDK 2.0

La sortie du nouveau RP2350 et du Pico 2 coïncide avec la sortie du SDK 2.0. Rien de vraiment étonnant puisqu'il faut pouvoir supporter les nouvelles fonctionnalités du RP2350.

Il y a de nouvelles options CMake font leurs apparitions pour le support RP2350.

Le SDK inclus la configuration du boot OTP et la programmation des clés. Le SDK couvre également l'exécution de sécurisé (Secure Code).

Enfin, le SDK Python prend en charge le RP2350 ainsi que le support WiFi, Bluetooth, Ethernet pour le Pico 2.

Le Pico 2 Wireless est d'ores et déjà annoncé pour la fin de l'année 2024. Ce dernier utilisera le même module que pour le Pico original.

En attendant, il semble que Wiznet dispose déjà de cartes RP2350 à base de ses Chip Ethernet W5100S, W5500, W6100.

WizNet.io

Intégration Rust

Le langage RUST est devenu très populaire ces dernières années. Très similaire au C, RUST est surtout réputé pour sa fiabilité d'exécution (plus d'info en Français ou en Anglais).

Rust Lang

La sortie du RP2350 coïncide avec la sortie de la couche d'abstraction matériel RUST pour le RP2350 (GitHub) ainsi que le Blog documentaire l'accompagnant.

Cela signifie que des carte Pico 2 et le SDK étaient disponibles pour ajouter le support RP2350 à Rust.
Une preuve, s'il en faut, que la fondation prend Rust très au sérieux!

Intégration MicroPython

Est-il vraiment nécessaire de préciser qu'il existe une version MicroPython / CircuitPython disponible le jour même de la sortie du Pico 2 et du RP2350 ?
MicroPython do love the Amethyst
 
Vous trouverez bien entendu la version de MicroPython pour RP2350 sur micropython.org

Où acheter

Vous avez trouvé ces informations intéressantes ? Alors aider nous à en produire plus en achetant vos produits chez MC Hobby

SuperPi: Constitution du Rack de test - Organisation

Bonjour à tous,

Le projet SuperPi Cluster dispose de son alimentation de test.
Le dernier article en date a valider l'utilisation d'un bloc d'alimentation 5V 10A  pour l'alimentation du rack.

C'est le moment de se pencher sur les raccordements électriques et l'organisation réseau.

50+ Raspberry-Pi en Rack


A propos de SuperPi

Le projet SuperPi vise à créer un super-calculateur/Cluster didactique à l'aide de 50+ Raspberry-Pi. Voyez cet article contenant plus de détails.

La force d'un Super-Calculateur/Cluster c'est le traitement en parallèle (Parallel Computing) pouvant servir dans de très nombreux domaines.

Mini-rack de test

J'ai assemblé un mini-rack de test pour faciliter les tests et apprentissages qui se profilent.

 

 

 

Organisation électrique


Seule les éléments de contrôle comme le Router, le NAS et la Station de contrôle sont immédiatement mis sous-tension.

L'alimentation du Rack de Pi est contrôlée séparément à l'aide d'un Power-Switch-Tail . Le Power-Switch-Tail tout comme le signal Panic (qui fait une shutdown rapide des RPi) sont pris en charge par la station de contrôle par m'intermédiaire de GPIO..

La Station de contrôle aura ici un rôle essentiel puisque:

  • Active/désactive les différents Rack
  • Effectue les mise-à-jour sur les racks
  • Distribue les tâches de calcul
  • Collecte les résultats
  • Affiche les statistiques
  • Collecte et stocke les résultats
  • Affiche les résultat (en option)

Organisation réseau

Pour faciliter la mise en oeuvre, les différents éléments sont configurés en adresse IP Fixe (voir configuration des noeuds)

Organisation réseau - cliquer pour agrandir

Seul l'adresse externe du routeur n'est pas encore fixée car il s'agit toujours d'un élément inconnu.

Le Routeur est là pour autoriser les connexions:

  • vers Internet,
  • vers un réseau hôte
  • ou autorisé une connexion depuis le réseau hôte (pour prendre le contrôle de SuperPi depuis l'extérieur).

Pour la suite

Il faut que m'active sur le routeur et sa configuration.
Ce sera l'occasion de me perfectionner dans se domaine (j'y ai quand même des lacunes).

Ressources

MicroPython: bibliothèque pour les afficheurs SerLCD de SparkFun

Bonjour à tous,

Les amateurs de MicroPython seront heureux d'apprendre qu'une nouvelle bibliothèque qwiic-serlcd-i2c vient d'être ajoutée à notre dépôt esp8266-upy

Qu'est ce que SerLCD?

SerLCD de SparkFun est un afficheur LCD série propulsé par un microcontrôleur ATmega328P.
SerLCD permet d'ajouter un afficheur Cristaux Liquide 16x2 RGB dans votre projet. Le microcontrôleur gère l'écran et les communications séries!

SerLCD de SparkFun

Les afficheurs SerLCD peuvent communiquer de trois façon différentes: série, I2C et SPI. L'afficheur est équipé de d'un connecteur Qwiic (aussi appelé StemmaQT), ce qui l'intègre dans l'écosystème Qwiic qui simplifie les raccordements grâce à sa connexion universelle.

Outre son connecteur Qwiic/StemmaQt, l'intérêt de SerLCD réside dans son support du bus I2C (il n'a donc besoin que des signaux SDA et SCL) et que l'adresse I2C est modifiable de façon logicielle.

La bibliothèque

Cette dernière -nommée serlcd.py- est disponible sur le dépôt dans le sous-répertoire  qwiic-serlcd-i2c

Elle doit être copiée sur votre plateforme MicroPython avant de pouvoir l'utiliser.

Si vous utilisez mpremote, l'installation peut se faire très simplement à l'aide de la commande suivante:

mpremote mip install github:mchobby/esp8266-upy/qwiic-serlcd-i2c

Brancher un SerLCD

Pour pouvoir utiliser cet afficheur, il suffit d'utiliser son connecteur Qwiic/StemmaQt avec un câble adaptateur JST-SH 4 . Le raccordement est super simple.

En guise d'exemple, voici le raccordement sur un Raspberry Pico... simple non?

Source: dépôt qwiic-serlcd-i2c

Utiliser la bibliothèque

L'utilisation de la bibliothèque est très similaire à la version "LcdI2C" (voir ici) que nous proposons déjà pour un autre afficheur.

from machine import I2C,Pin
from serlcd import SerLCD
import time

# Raspberry-Pi Pico
i2c = I2C( 1, sda=Pin.board.GP6, scl=Pin.board.GP7 )

# Adresse par défaut (0x72)
# Ajouter parametre address=0x38 pour une adresse personnalisée
lcd = SerLCD( i2c, cols=16, rows=2 )

lcd.backlight( (0,255,0) ) # Vert
time.sleep_ms(500)
lcd.backlight( (0,0,255) ) # Bleu
time.sleep_ms(500)
lcd.backlight( (255,0,0) ) # Rouge

lcd.print( "Hello" )
time.sleep(2)
lcd.clear()
lcd.print( "World!" )
time.sleep(1)
lcd.display( False ) # éteindre le LCD et retro-éclairage
time.sleep(1)
lcd.display( True )  # allumer le LCD et restaurer le rétro-éclairage

lcd.set_cursor( (9,1) ) #colonne,ligne (0..N-1)
lcd.print("*")

lcd.contrast( 0 ) # Contraste au maximum. Valeur (0..255)
#lcd.contrast( 100 ) # devrait être totalement transparent

# Désactiver les messages systèmes comme 'Contrast: 5'
lcd.system_messages( enable=False )

# Sauver le contenu actuel de l'écran comme écran d'accueil
# lcd.save_splash()

# Désactiver l'écran d'accueil (à la mise sous-tension)
lcd.splash( enable=False )

# Changer l'adresse I2C du SerLCD (stocké en EEPROM)
# lcd.set_address( 0x73 )

Ressources

❌