Vue normale

Reçu aujourd’hui — 8 juin 2025

PicoCalc de ClockWorkPi: partie 2 - autres firmwares

Bonjour à tous,

C'est article suit la précédente parution  "PicoCalc de ClockWorkPi (partie 1)" avec le firmware recommandé PicoMite Basic et la vidéo de retroComb Tech.

A propos de PicoCalc

Le PicoCalc de ClockWorkPi est un périphérique portable propulsé par un Raspberry-Pi Pico

PicoCalc de ClockWorkPi

Le PicoCalc est un périphérique portable de 16x10cm propulsé par un Raspberry-Pi Pico tout en offrant de nombreuses fonctionnalités (voir le précédent article).

Retour sur les Firmware

Continuons notre exploration du dépôt PicoCalc (parmi les dépôts de ClockWorkPi) et son sous-répertoire Bin contenant plusieurs  firmwares pour le Pico (fichiers uf2).

PicoCalc NES emulator 

Vous avez bien lu, PicoCalc dispose d'un firmware d'émulation NES basé sur ShapoNES.
Voici quelques captures glanées sur les forums de PicoCalc.

 





Remarque:

J'ai aussi déniché un émulateur Gameboy sur les forums ClockworkPi.

Emulateur GameBoy pour PicoCalc

MicroLisp pour PicoCalc

Lisp est un langage fonctionnelle basé sur un typage simple et un typage dynamique. Bien d'aussi vieux que Fortran, Lisp est surtout connu pour le développement d'application dans le domaine de l'intelligence artificielle.

Grâce à sa syntaxe simple et élégante, Lisp est encore largement utilisé  de nos jours et à élargit son champs d'application (ex: WEB, recherche, etc).
Voyez Lisp sur Wikipedia pour en apprendre plus.

uLisp MicroLisp (www.ulisp.com) est une implémentation de Lisp pour MicroControleur. Dans le cas du PicoCalc, uLisp supporte également l'affichage graphique.

Source: ce billet uLisp sur les forums ClockWorkPi

Source: uLisp.com

Perso je ne suis pas fan de ce langage mais il semble bien adapté à l'étude des Fractales... qui sait, je ferais peut-être du Lisp un jour.

Fuzix pour PicoCalc

Fuzix OS est un système d'exploitation de type Unix destiné aux systèmes a faibles ressources et processeurs archaïques comme le 6502, Z80, Intel 8080, Motorola, 68000, etc. Il existe même une version de Fuzzix pour RC2014!

J'ai personnellement un faible pour les systèmes Unix/Linux.

Etant donné que ClockWorkPi fourni un patch pour Fuzix permettant ainsi de compiler Fuzix sur votre ordinateur, il devient maintenant possible de compiler et ajouter vos propres utilitaires dans la distribution. Ce sera  l'occasion de refaire un peu de C/C++.

PicoCalc sous Fuzix

Visiblement, Hackable Magazine, N°49 (juillet/août 2023) traitait de Fuzix OS pour Pico.

MP3 player pour PicoCalc

Il existe un firmware pour jouer des fichiers MP3.
Je n'ai cependant pas eu l'occasion de trouver des ressources concernant cette fonctionnalité.

Il est même possible de jouer un fichier MP3 depuis la ligne de commande Basic ( PLAY MP3 "filename.mp3" ). Voir ce billet.

SD LOADER pour PicoCalc

Le firmware Picocalc_SD_Boot (projet info) permet de charger un firmware depuis la carte SD par l'intermédiaire d'une interface graphique.


Pour pouvoir charger vis firmwares avec le SD Loader, le programme cible doit être recompilé avec avec un script personnalisé afin de décaler l'adresse de départ du firmware à charger.

En effet, si SD Loader charge le firmware cible à l'adresse Flash où SD Loader est lui même en cours d'exécution alors cela débouchera sur un gros crash.

SD Loader charge donc le firmware cible 256 Kio plus loin dans la mémoire Flash afin de ne pas écraser SD Loader. 

Organisation mémoire
du Pico avec SD Loader

Ensuite SD Loader fait un saut sur la première instruction du firmware fraîchement chargé. Il faut donc que le firmware cible soit compilé pour avoir sa première instruction  cette nouvelle adresse de base.

MicroPython pour PicoCalc

Il existe également un implémentation de MicroPython pour PicoCalc.
Ce dernier prend en charge le clavier et l'affichage REPL sur la dalle graphique.

Etant moi même un grand fan de MicroPython, j'ai décidé que "MicroPython sur PicoCalc" fera l'objet d'un 3ième article.

Bonne découverte,
Dominique

 

PicoCalc de ClockWorkPi: Partie 1 - Présentation et PicoMite basic

Bonjour à tous,

Comme moi, vous avez certainement croisé des vidéos sur le PicoCalc de ClockWorkPi, ce périphérique portable propulsé par un Raspberry-Pi Pico

PicoCalc de ClockWorkPi

Ce que j'aime beaucoup dans ce périphérique portable de 16x10cm c'est qu'il est propulsé par un Raspberry-Pi Pico tout en offrant de nombreuses fonctionnalités comme:

  • Un grand écran IPS 4" (320x320 pixel couleur). La technologie IPS permet d'avoir un écran qui reste lisible sur un grand angle de vue.
  • Un clavier rétro-éclairé assez complet.
  • Un lecteur de carte SD pour un stockage complémentaire
  • Des haut-parleurs (visiblement pas si mauvais que cela) et sortie Audio.
  • Deux accus 18650 indépendants l'un de l'autre... ce qui permet de changer l'accu sans éteindre le PicoCalc.
  • 8 Mio de PSRAM, pour les applications gourmandes
  • Un GPIO Pico + un GPIO  STM32 facilement accessible

En équipant le PicoCalc avec un Pico2 WH, nous avons un système Dual Core cadencé à 150 Mhz avec 150 Kio de RAM et un module WiFi + BlueTooth.

Le tout dans un magnifique boîtier disposant même d'une protection pour l'écran.


Le Hardware

Sur base des informations disponibles sur le dépôt GitHub de PicoCalc, j'ai réussi a identifier quelques éléments intéressants. 

Pour commencer, la carte comporte également un microcontrôleur STM32 qui prend en charge:

  • la gestion du clavier, 
  • le retro-éclairage du clavier (KEY_BL sur PC8)
  • la luminosité de l'écran (LCD_BL sur PA8)
  • la gestion de l'alimentation Pico
    - contrôle de la broche RUN depuis PA13,
    - gestion de l'AXP2101 (Power Management Unit pour les Lipo) via le bus I2C M_I2C2 du STM32

Le clavier est est interrogé par le Pico par l'intermédiaire du bus I2C(1) en relation direct avec le bus M_I2C1 du STM32 (PB8 et PB9).

Ce même bus I2C peut aussi être utilisé pour y connecter des capteurs. Il semblerait que cela soit le bus I2C(1) avec les GP6=sda et GP7=scl


Le rétro-éclairage est configurable à l'aide de DIP switch (juste en dessous de la carte SD).

L'afficheur est contrôlé directement par le bus SPI(1) du Pico tandis que le retro-élcairage est, lui, prit en charge par un microcontrôleur STM32 présent sur la carte.

Connecteur Pico sur le PicoCalc
 

Les éléments suivants sont raccordés directement sur le Pico:

  • Audio en PWM sur GP26 et GP27.
  • Carte SD sur le bus SPI(0) avec les GP22 (détection SD), GP19,18,17,16 
  • PSRAM sur les GP21,20,2,3,4,5 . La PSRAM est visiblement un ajout sur la version V2.0 du PicoCalc
    Le nombre d'IO utilisés permet d'accroître le taux de transfert et d'assurer des performances honorables.

Les connecteurs GPIOs

Le connecteur est divisé en deux parties. Certains GPIOs sont directement connectés au Pico et d'autres sur le STM32.
Par contre, il n'est pas évident de faire la distinction entre les deux à partir du schéma.


Les GP2,3,4,5,21 sont maintenant attachés à la PSRAM, j'imagine que le graphique ci-dessus concerne la version 1.0 du Pico Calc.

Le GP28 semble toujours disponible. A noter que c'est aussi une entrée analogique.

L'UART0_RX et TX correspond au GP0 et GP1 du Pico. Ces broches peuvent aussi servir bus I2C(0). Etant donné que I2C(0) n'est pas utilisé sur le PicoCalc, il est donc envisageable d'utiliser ces deux broches comme GPIO, UART ou I2C au choix.

Les broches USB_DP et USB_DM sont directement raccordés sur le STM32. Ces broches correspondent à USB Data + (plus) et USB Data - (minus).

L'UART1_RX et TX est plus ambigu. Ce dernier est raccordé sur les GP9 et GP8 du Pico mais aussi sur le M_UART3 du STM32 (respectivement PC11 et PC10 pour RX/TX). Après quelques recherches, il semblerait qu'il soit possible d'utiliser l'USART3 du STM32 (PC10 & PC11) avec le bootloader (mise-à-jour du firmware STM32).

Pour l'instant, je n'ai aucune idée de la disponibilité des signaux UART1_RX & TX côté Pico.

Mais si le STM32 activait ses broches PC10 & 11 en entrée (haute impédance) alors il serait possible d'utiliser les GP8 et GP9 du Pico aussi bien en entrée qu'en sortie. Ce serait TOP car il serait possible d'y placer des GPIO, l'UART(1) ou d'y déplacer le bus I2C(0).


Accès aux deux ports USBs

Le port MicroUSB (en bas de l'image) donne directement accès au Pico, ce qui permet d'y téléverser un des multiples firmwares disponibles (le bouton Boot du Pico reste accessible par l'arrière du PicoCalc).

Le port USB-C (en haut de l'image) est utilisé pour recharger les accus mais est également utilisé à d'autres fins grâce à deux "switchs analogiques" WAS7227 (sel1 et sel2)
PicoCalc : Branchement USB-C (cliquer pour agrandir)

Les deux switchs analogiques sont commander par le même interrupteur SW701 visible en bas de l'image.

Lorsque SW701 est ouvert (comme sur l'image), ses deux interrupteurs internes qui sont solidaires sont ouvert. Par conséquent: sel1=LOW, sel2=LOW et Boot0=LOW.

Sur le STM32, Boot0=LOW permet au STM32 de démarrer le programme en flash (et donc le support Clavier du STM32).
SEL2=LOW redirige l'USB-C vers le convertisseur USB-to-UART (CH340C).
SEL1=LOW redirige l'USB-to-UART vers l'UART(0) du Pico (GP0 & GP1).

Dans cette configuration, l'USB-C est branché directement sur sur l'UART(0) du Pico.

Cet UART est souvent utilisé pour répliquer la ligne de commande du firmware (MicroPython, MMBasic, etc).
Cela permet donc d'utiliser le port USB-C avec un ordinateur avec un programme Terminal. Il sera ainsi plus facile de coder vos programmes depuis un ordinateur comme s'ils étaient encodés sur le PicoCalc lui-même.

A noter aussi que cet UART(0) est également accessible sur la 2ième partie du connecteur GPIO PicoCalc.

Lorsque SW701 est fermé (à l'inverse de l'image), les deux interrupteurs internes sont solidaires et fermés. Par conséquent: sel1=HIGH, sel2=HIGH et boot0=HIGH.

Dans ce cas de figure, USB-C est branché sur l'interface USB du STM32 (via U701). Boot0 étant en HIGH, le STM32 passe en mode de programmation, cela permet de faire la mise-à-jour du firmware clavier du STM32 via le port USB-C. 

Note: U702 & U703 ne mène nulle part dans cette configuration... c'est assez bizarre.

Les firmwares disponibles

Selon le site officiel PicoCalc, plusieurs firmwares sont disponibles (Basic, Lisp, Unix, MP3 Player).

Et la plateforme supporte de nombreux langages de programmation (MicroPython, C/C++, Lua Script, GoLang, Javascript, Rust).

Les environnements de développement courants du Pico sont bien entendu supportés. Parmi ceux-cis ont retrouve:

  • Le SDK Pico
  • Arduino IDE
  • ThonnyIDE (pour MicroPython).

En farfouillant sur le dépôt PicoCalc (parmi les dépôts de ClockWorkPi), je découvre le sous-répertoire Bin contient plusieurs  firmware pour le Pico (fichiers uf2).

PicoMite Basic pour PicoCalc

PicoMite Basic pour PicoCalc est une version adaptée de PicoMite destiné a fonctionner directement sur le PicoCalc.

PicoMite MMBasic

Ce Basic propose:

  • Une ligne de commande
  • Un éditeur de code (rudimentaire mais agréable d'emploi) 
  • Le chargement et sauvegarde de code Basic.
  • Stockage sur le Pico ou sur la carte SD.
  • Support de mode graphique. 
  • Le support des numéro de ligne OU de code structuré
  • Le chargement d'images (format BMP).
  • Le contrôle de GPIO directement depuis le code Basic.
    C'est idéal pour la découverte du Hacking électronique.

PicoMite est une version modifiée de MMBasic (mmbasic.com) pour Raspberry-Pi Pico. MMBasic est décidément devenu très populaire depuis qu'il a quitté la plateforme Maximite pour s'adapter à d'autres environnement.

Le manuel détaillé du Basic est celui de MMBasic (MaxiMiteBasic) disponible depuis la section des téléchargement de MMBasic.

Vous pouvez découvrir PicoCalc et PicoBasic sur cette vidéo de retroComb Tech.


Les autres firmwares

Cet article devient très long et l'éditeur peine un peu... je vais donc reporter la suite des Firmwares PicoCalc dans un second article.

A tout bientôt,
Dominique

❌