Equipé d'un moteur 5V (CN459-60067 BN026Y18), d'un disque optique et d'un encodeur à quadrature optique, je voulais savoir s'il était possible de l'utiliser avec MicroPython.
Le disque optique
La photo haute résolution du disque optique permet de relever plusieurs informations utiles.
Le disque présente 50 interstices transparents entre deux numéro successif. Le disque étant numéroté de 1 à 12, cela représente 600 pulsations par tour (ce que reprend l'une des références sur le disque).
Les autres références/informations sur le disque ne renvoi malheureusement que vers les imprimantes HP.
L'encodeur optique
Pour sa part, l'encodeur optique est monté sur une plaquette fixée directement sur le support métallique. Cet encodeur contient un LED (émetteur de lumière) ainsi que deux capteur photo-sensibles. Le décalage entre les deux capteurs permet d'identifier le sens de rotation du moteur.
Le connecteur 4 contacts est utilisé pour:
la masse
l'alimentation 5V (déduit de la résistance utilisée pour la LED).
Deux signaux à quadrature.
Les signaux
Quelques mesures rapides permettent de savoir que le capteur produit une tension de sortie (pas besoin de résistances pull-up ou pull-down).
Maintenant que le brochage est identifié, il ne reste plus qu'à branché un oscilloscope sur les deux canaux de sorties.
Notez le décalage entre les deux signaux entre marche avant et marche arrière!
L'oscilloscope nous informe aussi que la fréquence des pulsations est de 24.4 KHz (soit 24400 fois par seconde). La période est de 1/24400 soit 41µSec (temps en deux impulsions sur un même canal).
Brancher sur Raspberry-Pi Pico
Les signaux de sortie étant étant en 5 volts (ou presque), il faut utiliser un pont diviseur de tension pour ramener la tension sous 3.3V.
Bibliothèque et code d'exemple
D'autre part la période de 41µSec nécessitera un code particulièrement rapide pour ne pas rater d'impulsion. Une section de code en PIO permettra de suivre suivre la cadence... même sous MicroPython!
La bibliothèque adéquate est disponible dans le dépôt esp8266-upy ( esp8266-upy/LIBRARIAN/rp2lib ). rp2qenc.py contient le code PIO et la classe PIO_QENC permettant d'utiliser un encodeur à quadrature autonome sur un Pico. La classe PIO_QENC permet de compter (ou décompter) un compteur permettant de connaître le nombre de tour moteur (valeur signée encodée sur 32 bits).
Le code permettant de lire le compteur est relativement simple.
from machine import Pin
from time import sleep_ms
from rp2qenc import PIO_QENC
pinA = Pin(15, Pin.IN, Pin.PULL_UP)
pinB = Pin(16, Pin.IN, Pin.PULL_UP)
qenc = PIO_QENC(0, (pinA, pinB))
print('starting....')
for i in range(120):
print('iter %3i : Quadrature value = %i' % (i,qenc.read()) )
sleep_ms(500)
qenc.sm_qenc.active(0)
print('stop')
Le monde du Raspberry-Pi ne se limite pas au célèbre nano-ordinateur mais s'étend aussi dans le monde industriel avec le Compute Module. Le compute module concentre sur une carte les éléments essentiels du nano-ordinateur laissant à la carte fille la possibilité de mettre en place les interfaces adéquates. Depuis le CM4, de nombreuses cartes furent lancées sur le marché. Celle-cis sont aussi compatible avec le CM5.
Une gamme Compute Module chez MCHobby
Depuis la sortie du CM5, MCHobby a décidé de s'intéresser un peu plus à cette plateforme avancée qui peut aussi offrir des possibilités inédites aux Makers et aux entrepreneurs.
Après le kit de développement CM5 (CM5 DevKit), MC Hobby à maintenant en stock son premier compute module 5:
Le stockage eMMC permet de stocker le système d'exploitation afin d'accélérer le démarrage de la plateforme. un stockage eMMC offre un débit similaire a un disque M2 sur le bus PCIe Gen 2, ce qui est plus qu'honorable :-)
eMMC vs disque M.2
Il serait tentant de penser qu'un disque M.2 serait plus intéressant d'une eMMC. C'est vrai si l'on ne considère que l'espace de stockage!
L'usage d'un disque M.2 diminue significativement la fiabilité, d'autant plus si le projet est exposée à des vibrations ou écarts de température (ce qui est le lot de tout système mobile). Ce n'est pas pour rien que les SmartPhones stockent leur OS sur une eMMC plutôt qu'une carte SD ou en disque M2 interne ;-) .
En effet, utiliser un disque M.2 implique contact électriques et contraintes mécaniques, des éléments dont il faut tenir compte car ils peuvent empêcher le système de démarrer.
Un Compute Module avec eMMC intégrée assure une meilleure résilience au système car il est assuré de booter sur ses propres ressources. Un modèle eMMC aura -lui- la possibilité de rapporter la défectuosité si le disque M.2 devenait inaccessible ou inopérant mais en soi, rien n'empêche d'ajouter un disque M.2 pour du stockage de masse.
A tester: le CM 4 Maker Board
Ce sera l'occasion d'utiliser ce module CM5 pour tester la carte CM4 Maker Board de Cytron, carte que je n'avais pas encore eu l'occasion de tester.
Je que te trouve particulièrement intéressant, c'est d'avoir tous les connecteurs sur un seul côté de la carte. Je trouve appréciable de disposer d'un HDMI standard, du GPIO Raspberry-Pi et d'un connecteur M.2 (pour un stockage de masse).
Il peut être alimenté via USB-C ou un jack (7-18V).
Vraiment une carte très intéressante pour créer un Mini-PC Raspberry-Pi avec des fonctionnalités complémentaires (puisque nous disposons de ports et de GPIOs.
Le compute module 5 (tout comme le CM4) existe en deux versions aux comportement fort différents:
CM5 Lite où il n'y a pas de stockage eMMC. Dans ce cas, l'OS est chargé depuis une carte SD. En cela, cela ne change en rien du fonctionnement d'un Raspberry-Pi 5.
CM5 avec stockage eMMC : le système d'exploitation est alors chargé depuis l'eMMC. Le connecteur SD n'est pas utilisable dans ce cas!
Comment flasher l'eMMC
La question à laquelle il faut trouver une réponse est:
Il me parait utile de préciser que SecurBoot et la Signature ne sont pas indispensables! Savoir cela peut grandement simplifier les opérations d'installation (ce qui est pratique lors de nos premières fois).
Principe d'installation
Configurer l'IO board pour désactiver le boot eMMC (avec un jumper/cavalier).
Brancher le CM5 sur un ordinateur a l'aide du cable USB-A ==> USB-C.
Mettre le Compute Module sous tension (en pressant le bouton marche/arrêt sur l'IO board).
Utiliser le logiciel rpiboot avec mass-storage-gadget64 sur l'ordinateur. Ce qui expose l'eMMC sur l'ordinateur par l'intermédiaire du lien USB.
Utiliser RPI-Imager pour flasher une image Raspberry-Pi 5 sur l'eMMC.
Installer rpiboot
Le logiciel rpiboot est l'une des pierres angulaires du processus d'installation. Il est préférable d'utiliser ce logiciel depuis une machine Linux (sous Ubuntu ou depuis un Raspberry-Pi). A noter qu'il est également possible d'utiliser Windows au pris de quelques adaptations.
rpiboot peut être installé sur une machine Linux en utilisant la commande:
$ sudo apt install rpiboot
Si l'installation apt n'est pas possible par ce qu'un OS Linux est "plus agé" (comme c'est mon cas avec Linux Mint, un dérivé d'Ubuntu) alors il faudra compiler rpiboot sur votre ordinateur... comme je l'ai fait.
A propos de rpiboot
rpiboot est une interface générique de chargement de firmware. Il permet de booter un RPi distant et d'y charger un firmware spécifique... idéal pour tester vos images personnalisés / SecurBoot / etc.
L'un des firmwares spécialisés est mass-storage-gadget64 qui émule un périphérique de stockage de masse dit MSD (Mass Storage Device). L'ordinateur hôte traitera alors le Pi comme un périphérique de stockage USB.
Compiler rpiboot
S'il n'a pas été possible d'installer le logiciel rpiboot alors il faudra le compiler directement depuis le code source.
Ce code source est disponible sur le dépôt raspberrypi/usbboot :
Branchez ensuite le DevKit sur votre ordinateur avec le câble USB. Ne pas oublier de presser le bouton marche/arrêt pour démarrer le computer module!
Utilisez dmesg pour vérifier la détection du Compute Module (le module Broadcom).
Démarrer rpiboot
1iere tentative
A mon premier démarrage, rpiboot ne trouvait pas mass-storage-gadget64 .
Voici les messages pour mémoires.
$ sudo ./rpiboot
RPIBOOT: build-date Dec 9 2024 version 20240422~085300 cbcf2934
Waiting for BCM2835/6/7/2711/2712...
2712: Directory not specified using default /usr/share/rpiboot/mass-storage-gadget64/
read_file: Failed to read "2712/bootcode5.bin" from "/usr/share/rpiboot/mass-storage-gadget64//bootfiles.bin" - No such file or directory
Failed to open bootcode5.bin
2ieme tentative
J'ai donc utilisé le paramètre -d pour indiquer le répertoire de stockage pour mass-storage-gadget64 . Il se fait que c'est un sous-répertoire direct de rpi-boot.
$ ./rpiboot -v -d mass-storage-gadget64
Alors malgré ma présence dans le groupe plugdev, je reçois un message d'erreur laissant entendre que "je ne fais peut-être pas partie du groupe plugdev"! Voyez ci-dessous le message d'erreur.
...
2712/memsys03.bin position 0008b000 size 40972
2712/bootcode5.bin position 00095400 size 72660
Completed file-read 2712/bootcode5.bin in archive mass-storage-gadget64/bootfiles.bin length 72660
Permission to access USB device denied. Make sure you are a member of the plugdev group.
$ groups
domeu adm dialout cdrom sudo dip plugdev lpadmin sambashare vboxusers
3ieme tentative
Cette fois, je me suis fendu d'un sudo pour augmenter les privilège. Et cela à fonctionné :-)
$ sudo ./rpiboot -v -d mass-storage-gadget64
RPIBOOT: build-date Dec 9 2024 version 20240422~085300 cbcf2934
Boot directory 'mass-storage-gadget64'
Loading: mass-storage-gadget64/bootfiles.bin
Using mass-storage-gadget64/bootfiles.bin
Waiting for BCM2835/6/7/2711/2712...
Device located successfully
...
...
...
File 2712/boot.img not found in mass-storage-gadget64/bootfiles.bin
Loading: mass-storage-gadget64/boot.img
File size = 30409216 bytes
Received message ReadFile: boot.img
File read: boot.img
libusb_bulk_transfer sent 30409216 bytes; returned 0
Received message Done: boot.img
CMD exit
Second stage boot server done
rpi-boot ayant finalement démarré mass-storage-gadget64 sur le compute module, notre système hôte devrait avoir accès à un nouveau lecteur/drive... ce que nous allons constater de suite.
Accès à l'eMMC
Avec le mass-storage-gadget64 actif sur le compute module, l'ordinateur hôte à maintenant accès à un nouveau lecteur branché via USB.
Voici deux méthode pour s'en assurer.
lsblk : lister les périphérique de type block
la commande lsblk affiche tous les lecteurs branchés sur l'ordinateur.
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
...
sda 8:0 0 232,9G 0 disk
├─sda1 8:1 0 512M 0 part /boot/efi
└─sda2 8:2 0 232,4G 0 part /
sdb 8:16 1 29,1G 0 disk
sr0 11:0 1 1024M 0 rom
La commande révèle un disque sdb d'une taille de 29.1 Go. Il s'agit de l'eMMC présent sur le compute module.
Le gestionnaire de disque
Les distributions Linux proposent généralement un gestionnaire de disque permettant d'inspecter les lecteurs/disques et le détail de leur partition. Voyez ci-dessous une capture du gestionnaire de disque sous Linux Mint (dérivé d'Ubuntu).
Nous y retrouvons également le disque de 31 Go du compute module. Cette fois les informations sont plus précise avec un modèle de disque reprenant la mention "mmcblk0 Raspberry Pi multi-fonction USB device (100)" .
Quel OS pour mon CM5
L'idéal est de créer un OS sur mesure pour votre projet enfoui. Mais cela serait bien trop long pour réaliser notre premier test!
Par chance, le CM5 est un équivalent du Raspberry-Pi 5 et l'IO Board du Dev Kit propose -à peu prêt- les mêmes périphériques qu'un Raspberry-Pi 5.
Nous pourrons donc flasher un OS Pi 5 pour réaliser nos premiers essais avec le Compute Module 5.
Flasher l'OS sur CM5
Le documentation renseigne l'utilitaire Linux dd pour transférer l'image sur le disque eMMC. Mais dd est aussi surnommé Disk Destroyer parce qu'une simple erreur dans son utilisation peu littéralement écraser/détruire le contenu de votre disque.
L'approche la plus simple est encore d'utiliser RPi-imager qui fera le même boulot (mais avec moins de risque).
Choisir un OS Raspberry-pi 5 / 64 bits
Choisir le périphérique correspondant au disque mmcblk0.
Bien que pas forcement nécessaire pour un OS avec bureau graphique j'ai néanmoins personnalisé mon OS.
personnalisation du système d'exploitation
Pas forcement inutile pour un projet enfoui, l'activation du service SSH sera certainement se monter utile.
Activer le service SSH
Démarrer votre CM5
Une fois flashé:
Eteindre le CM5 avec le bouton marche arrêt
Débrancher de l'ordinateur hôte
Brancher le câble HDMI sur la sortie HDMI0
Brancher le bloc d'alimentation sur la prise USB-C.
Presser le bouton marche/arrêt et soyez patient!
Comme pour un Pi 5, le CM5 redimensionnera le disque et rebootera une ou deux fois avant d'afficher quelque-chose sur la sortie HDMI.
Fiez vous à la LED activity qui rapporte les accès disques.
MCHobby investit du temps et de l'argent dans la réalisation de traduction et/ou documentation. C'est un travail long et fastidieux réalisé dans l'esprit Open-Source... donc gratuit et librement accessible.
SI vous aimez nos traductions et documentations ALORS aidez nous à en produire plus en achetant vos produits chez MCHobby.
La semaine dernière c'était la grande messe Raspberry-Pi pour les partenaires de l'aventure... dont fait partie MC Hobby en tant que Revendeur Approuvé.
L'occasion d'améliorer nos connaissances techniques sur les différentes plateformes mais aussi l'opportunité de visiter l'usine Sony à Pencoed (Pays de Galles).
Bien entendu, interdit de filmer, interdit de prendre des photos, interdit de trop traîner et même interdit de prendre un déchet!
Il y avait là un beau PCB Raspberry-Pi 5 au rebus (échec au contrôle)... je me le serait bien ramené comme souvenir... mais pas questions de l'avoir (cela aussi est interdit)!
Mettre un PCB a nu
Je voulais vraiment un PCB de Raspberry-Pi, j'en ai donc fait un a partir d'un Pi défectueux.
J'ai donc sorti ma station à air chaud, mon fer a souder et j'ai commencer à désassembler ma première carte RPi... et voir aussi comment je pouvais m'en sortie.
PI 3 B+ v1.2 - face avant
PI 3 B+ v1.2 - face arrière
C'est une expérience intéressante à réaliser, qui fait par ailleurs appel à de nombreuses techniques.
Le SoC et la RAM sont de loin les éléments les plus longs à dessouder (~5 minutes chacun).
Des connecteurs (voyez cette technique), le RJ45 fût le le plus difficile à enlever... d'où l'éraflure sur le PCB.
Voici quelques informations utiles si vous voulez conduire la même expérience:
Utiliser un tapis silicone (il resiste à la chaleur)
Préchauffer la carte (au four entre 70 et 100°C). Je ne l'avais pas fait et cela aurait été une bonne idée pour dessouder plus facilement les gros composants.
Configurer la station d'air chaud sur 430°C C'est violent mais efficace pour dessouder.
Configurer le fer a souder sur 425°C
Manipuler la carte avec soin (cela va sacrément chauffer)
Utiliser du flux et de la bride à dessouder pour éliminer les excès de soudure
Nettoyages à l'alcool (pour les résidus de flux)
Nettoyage final à l'eau chaude + Liquide vaisselle + Mr Propre.
C'est vraiment très intéressant pour tester et améliorer ses techniques à l'air chaud.
Découvrez la nouvelle carte SD optimisée pour le Raspberry Pi, conçue pour améliorer la fiabilité et les performances de votre nano-ordinateur. Une petite révolution pour prolonger la durée de vie de vos projets DIY !
Je reprend ci-dessous quelques captures de la vidéo où l'on retrouve des informations utiles pour d'autres projets similaire (merci Kevin pour ce partage).
Composition générale de l'interface
Les différentes icones de la barre d'outils (toolbar) propose les fonctionnalités décrites ci-dessous
L'icone sélectionnée dans la Toolbar (barre à outil) est affiché en négatif!
Les ressources/icones graphiques sont disponibles sous forme de fichier BPM, un format facile à lire pour un microcontrôleur
La documentation sur les animations est aussi instructive. Je me suis demandé quel pouvait être l'intérêt d'une séquence REVERSE mais a bien y réfléchir, cela permet de déplacer Baby à un endroit puis, plus tard, de revenir à sa position initiale.
Kevin prend le temps de présenter les concepts utilisés et les éléments de programmation exploités.
Amélioration possibles
Je vois quand même quelques possibilités d'amélioration (électronique et logiciel).
Prévoir de l'autonomie (avec un Accu Lipo) et recharge
Prévoir du son (du moins un minimum).
Diminuer la quantité de fichiers BPM (regrouper les ressources dans un fichier commun)
Envisager des personnages différents (et comportements différents)... d'où l'intérêt de regrouper les ressources.
Clarifier les relations entre état psychologique et paramètres vitaux (état émotionnel, actions et leurs conséquences). J'ai trouvé ce point un peu confus dans l'implémentation de Kevin.
Ce qui m'excitait beaucoup c'est la possibilité d'utiliser des objectifs de type "Microscope". Dans les faits, sur le plan microscopique il n'y a pas eu grand chose de concluant.
J'ai donc entamé quelques recherches et regroupé une série de vidéos assez intéressantes pour réaliser MicroScope DIY et le couplage d'un capteur CCD (comme la caméra HQ ou la Cam V3 qui dispose aussi de 12 Mpixels).
La méthode Pure DIY
Cette vidéo est celle qui a relancer mon intérêt pour un MicroScope Raspberry-Pi. Il utilise un matériel et des méthodes très basique mais l'intérêt réside dans la récupération de lentilles! .
Du point de vue des cours de physique, il y a là un excellent sujet d'étude sur les lentilles, les distances focales, comment comment ré-identifier ces paramètres s'ils ne sont pas connus.
L'autre intérêt est que la méthode est d'être abordable pour réaliser un atelier avec des ados.
DIY Microscope avec PiZero W et Pi Camera
Ce microscope réalisé par Brauns CNC utilise une Spy Camera Raspberry-Pi (2 Mpixels) et une lentille Macro pour SmartPhone afin de créer un agrandissement modéré avec des images de qualités.
C'est déjà un bel agrandissement... mais pas encore du domaine microscopique
The Post Acpocalyptic Inventor est un maker porté sur les projets mécaniques que je classerais dans la catégorie des "projets poids lourds". Si vous ne connaissez pas encore, je vous invite vivement à visiter sa chaîne!
Il n'empêche que de temps à autre TPAI s'attaque aussi à des projets Makers plus commun en partant d'un MicroScope existant.
Cette approche est l'une des plus abouties en terme de grossissement et de faisabilité!
Kit d'occasion acheté pour une dizaine d'euro
Il existe bien des caméras oculaires (USB) mais leur définition est de l'ordre de 2 MegaPixel là où une caméra Pi offre une définition bien supérieure!
L'intérêt d'une Caméra Pi est aussi de fonctionner avec du logiciel OpenSource alors que les solutions commerciales vous imposent leur propre logiciel.
Dans son projet de test, TPAI a remplacé le monoculaire par une caméra sans objectif (donc avec le capteur CCD directement exposé).
Capteur CCD sans lentille
Mise à la place du monoculaire
Dans un second essai, TPAI a remplacé le support monoculaire par une section de tube d'aspirine et la caméra montée sur un capuchon ajustable (pour ajuster le back-focus de la caméra).
Ce qui permet, au final, d'obtenir des résultats très impressionnant.
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!
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).
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). (A noter que la résolution réelle est de 9.5 bits pour rester au dessus du bruit)
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.
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:
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)
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.
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.
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).
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 ?
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).