Décortiquer le GPIO 29 du Raspberry-Pi Pico et Pico-W

C'est connu, le GPIO29 n'est pas disponible sur le Raspberry-Pi Pico mais permet néanmoins de lire la tension VSYS/3 puisque c'est également l' ADC3 (seul ADC0..2 sont accessibles).
Pour rappel, VSYS peut recevoir un accu (5.5V max) pour rendre la plateforme autonome.

Par contre, il y a des petites subtilités aussi bien sur le Pico que sur le Pico-W. Cet article explore les petites ingéniosités exploitées durant la conception du Pico et du Pico-W.

Pas pareil entre le Pico & Pico-W

pour commencer, bien que le microcontrôleur soit identique (RP2040) sur les deux plateformes... il y a une sacré différence sur les schémas.

Le point commun reste la présence des deux résistances de 200K et 100K pour diviser VSYS/3 . Cette tension est présentée sur le GPIO29_ADC3 (visible sur la droite des shémas).

Comparatif de la lecture ADC3 entre Pico & Pico-W

GPIO29 sur le Pico

C'est le cas le plus simple des deux... mais que fait ce MosFet au milieu du schéma.

GPIO29 sur le Pico

C'est assez simple: il serait mal venu d'appliquer une tension sur l'entrée ADC alors que le microcontrôleur est hors tension!

En effet, l'étage de régulation pourrait être désactive (donc pas de 3.3V et RP2040 à l'arrêt). Dans ce cas précis, sans le MOSFET Q1, une tension peut être présente sur ADC3 alors que le RP2040 n'est pas alimenté.

GPIO29 sur le Pico-Wireless

C'est un peu plus subtil mais les choses deviennent plus évidentes si l'on sait que le GPIO29 à un double usage:

  1. Lecture analogique de VSYS/3
  2. Signal d'horloge du module WiFi (bus SPI)

Comment est-ce possible?

GPIO29 sur Pico-W

 Et bien c'est simple en suivant ce le principe suivant

  • Quand le RP2040 communique avec le module WiFi alors pas de lecture analogique possible.
  • Quand le RP2040 ne communique pas avec le module WiFi alors lecture analogique possible quand tu veux!

Alors, le GPIO25 n'est plus utilisé comme LED utilisateur sur le Pico W mais comme signal WL_CS ( WireLess Chip Select).

Et comme c'est un bus SPI qui permet de communiquer avec le module WiFi, celui-ci est activé quand WL_CS = LOW.
Quand on utilise plus le module WiFi, WL_CS passe au niveau haut HIGH pour libéré le bus.
Tout est là... entrons maintenant dans les détails.

Cas général: Pas de communication avec le module WiFi

Dans ce cas, GPIO25 est au niveau HAUT, ce qui:

  1. Désactive le module WiFi (qui ne s'intéresse donc pas à ce qui se passe sur son bus SPI).
  2. Active le MosFet Q1 qui devient passant.

Sans communication WiFi

Le firmware (MicroPython ou autre) peut donc configurer le GPIO29 en entrée analogique sans aucun risque de perturbation pour le module WiFi.

Comme le GPIO25 est au niveau haut le signal WL_CS (chip select du module WiFi) l'est aussi. Sur un bus SPI, un module est actif avec son signal CS au niveau bas. En conséquences, le module WiFi ne se préoccupe absolument pas de ce qui passe sur le bus SPI (dont GPIO29 fait partie en tant que signal d'horloge).

Cas particulier: communication avec le module WiFi

Dans ce cas, le firmware passe le GPIO25 au niveau base, ce qui:

  1. Active le module WiFi
  2. Désactive le MosFet Q1 qui devient bloquant.

AVEC communication WiFi

Etant donné que le Firmware (MicroPython ou autre) sait qu'il peut communiquer avec le module WiFi (avec WL_CS à LOW), il peut aussi se permettre de reconfigurer le GPIO29 en sortie. Le GPIO29 peut donc servir a créer le signal d'horloge SPI nécessaire à la communication avec le module WiFi.

La résistance de 10K est totalement inutile dans le cas présent. Elle agit comme "une résistance" pull-down, (qui ramène le potentiel à 0V) superflue puisque GPIO29, configuré en  sortie, impose l'état du niveau de sortie. Il n'est pas nécessaire d'utiliser un second MosFet pour isoler cette résistance... cela fonctionnera aussi très bien avec celle-ci.

Enfin, une fois la communication SPI achevée avec le module WiFi, le firmware restaure l'état/configuration précédent de la broche GPIO29 avant de désactiver le me module WiFi (signal WL_CS qui passe au niveau haut).

Nous revenons donc dans l'état "SANS wifi".


J'espère que vous avez trouvé cela intéressant.

Aucun commentaire