MicroPython 1.20 et bus SPI - Subtile différence dans la déclaration

Bonjour à tous,

J'ai récemment découvert une subtile différence dans l'implémentation de MicroPython pour RP2040 (Raspberry-Pi Pico).

Cas de figure RFM69HCW

En testant le module RFM69 sur le Raspberry-Pi Pico, je me rend compte que le module fonctionne parfaitement sur MicroPython 1.19 mais inaccessible sous MicroPython 1.20.

Module RFM69HCW branché sur Pico - Source: Projet Zumo Robot

Il aura fallut un temps certain pour me rendre compte que la version de MicroPython était en cause!

Appel sous MicroPython 1.19

L'utilisation du module passe par la création de l'interface SPI.

from machine import SPI, Pin
from rfm69 import RFM69
...

spi = SPI(0, baudrate=50000, polarity=0, phase=0, firstbit=SPI.MSB)
nss = Pin( 5, Pin.OUT, value=True )
rst = Pin( 22, Pin.OUT, value=False )

rfm = RFM69( spi=spi, nss=nss, reset=rst )
...

Et cela fonctionne très bien sous MicroPython v1.19 étant donné que le port SPI0 est mappé sur les GPIO 4, 5, 6, 7.

Pinout simplifié du Pico. Source: Pyboard-driver/Pico

 

Appel sous MicroPython 1.20

Les mêmes appels sous MicroPython 1.20 produit une erreur puisque le module ne répond pas au requêtes!

Après un passage à l'oscilloscope, je constate qu'il n'y a pas de signal sur MOSI et sur SCK (signal d'horloge), ce qui est totalement anormal!

Me souvenant qu'un port SPI peut être relocalisé en déclarant les broches lors de la création du port SPI. J'ai donc essayé et BINGO maintenant tout fonctionne comme attendu.

from machine import SPI, Pin
from rfm69 import RFM69
...

spi = SPI(0, miso=Pin(4), mosi=Pin(7), sck=Pin(6), baudrate=50000, polarity=0, phase=0, firstbit=SPI.MSB)
nss = Pin( 5, Pin.OUT, value=True )
rst = Pin( 22, Pin.OUT, value=False )

rfm = RFM69( spi=spi, nss=nss, reset=rst )
...

Conclusion

J'aimais bien la déclaration d'un bus SPI matériel en utilisant uniquement son numéro. Cela rendais le code "moins verbeux" et restait dans la lignée MicroPython.

Avantages de cette syntaxe 

  1. mentionner la connectique matériel durant la création du bus SPI évite les malentendu (sur les broches utilisées pour le bus SPI).

  2. Cela permet aussi de déclarer un bus SPI avec uniquement une broche MOSI (pas de SCK et pas de MISO).
    Cela est utile pour envoyer facilement des données vers un périphérique utilisant un time-based protocole (comme les NeoPixel).


Aucun commentaire