machine — fonctions liées au matériel¶
Le module machine contient des fonctions spécifiques liées au matériel d’une carte particulière. La plupart des fonctions de ce module permettent d’obtenir un accès direct et non restreint au contrôle des blocs matériels d’un système (comme le CPU, les minuteurs, les bus, etc.).
Accès mémoire¶
Le module expose trois objets indexables utilisés pour l’accès mémoire brut. Chacun se comporte comme un tableau creux indexé par adresse d’octet : value = memN[addr] lit, memN[addr] = value écrit. L’adresse est toujours une adresse d’octet, quelle que soit la largeur d’accès.
- machine.mem8¶
Accesseur mémoire 8 bits indexable.
mem8[addr]lit unintdans la plage 0-255 depuis l’octet àaddr;mem8[addr] = valueécrit les 8 bits de poids faible devalue.addrdoit être aligné sur 1 octet (toute adresse).
- machine.mem16¶
Accesseur mémoire 16 bits (demi-mot) indexable.
mem16[addr]lit unintdans la plage 0-65535 ;mem16[addr] = valueécrit les 16 bits de poids faible.addrdoit être aligné sur 2 octets.
- machine.mem32¶
Accesseur mémoire 32 bits (mot) indexable.
mem32[addr]lit unintdans la plage 0-0xFFFFFFFF ;mem32[addr] = valueécrit les 32 bits de poids faible.addrdoit être aligné sur 4 octets.
Exemple d’utilisation (les registres sont spécifiques à un microcontrôleur STM32H7 – sur l’OpenMV Cam H7 / H7 Plus / Pure Thermal, la broche d’en-tête P0 est câblée à PB15) :
import machine
from micropython import const
GPIOB = const(0x58020400)
GPIO_BSRR = const(0x18)
GPIO_IDR = const(0x10)
# set P0 (PB15) high via the GPIOB bit-set/reset register
machine.mem32[GPIOB + GPIO_BSRR] = 1 << 15
# read P0 (PB15) directly out of the GPIOB input-data register
value = (machine.mem32[GPIOB + GPIO_IDR] >> 15) & 1
Fonctions diverses¶
- machine.unique_id() bytes¶
Renvoie un objet
bytescontenant un identifiant unique pour cette carte. La valeur est lue depuis le matériel du MCU (généralement le numéro de série de l’appareil programmé en usine), elle est donc stable d’un redémarrage à l’autre et diffère d’une carte à l’autre.La longueur dépend de la famille de MCU – 12 octets sur STM32, 8 octets sur les ports mimxrt et alif. Si votre application a besoin d’un ID de longueur fixe, découpez ou hachez la valeur renvoyée.
- machine.time_pulse_us(pin: Pin, pulse_level: int, timeout_us: int = 1000000, /) int¶
Mesure la largeur d’une seule impulsion sur
pinet renvoie sa durée en microsecondes.pindoit être configurée comme entrée numérique.pulse_levelest la polarité de l’impulsion à chronométrer :1pour une impulsion haute,0pour une impulsion basse.La fonction fonctionne en deux phases. D’abord, si la broche n’est pas déjà à
pulse_level, elle attend que la broche passe àpulse_level(le début de l’impulsion). Ensuite, elle mesure le temps pendant lequel la broche reste àpulse_levelavant de revenir (la fin de l’impulsion). Le temps mesuré est renvoyé en microsecondes.timeout_usborne chaque phase indépendamment (de sorte qu’un appel dans le pire des cas dure jusqu’à2 * timeout_us). En cas d’expiration du délai, la fonction renvoie une valeur négative identifiant quelle phase a expiré :-2– expiration en attendant le front montant (la broche n’a jamais atteintpulse_level).-1– expiration en attendant le front descendant (l’impulsion était plus longue quetimeout_us).
- machine.bitstream(pin: Pin, encoding: int, timing: tuple, data: bytes, /) None¶
Transmet data en bit-banging sur la pin spécifiée. L’argument encoding spécifie comment les bits sont encodés, et timing est une spécification de chronométrage propre à l’encodage.
Les encodages pris en charge sont :
0pour la modulation de durée d’impulsion « haut bas ». Cela transmettra les bits 0 et 1 sous forme d’impulsions chronométrées, en commençant par le bit de poids fort. Le timing doit être un quadruplet de nanosecondes au format(high_time_0, low_time_0, high_time_1, low_time_1). Par exemple,(400, 850, 800, 450)est la spécification de chronométrage pour les LED RGB WS2812 à 800kHz.
La précision du chronométrage dépend du matériel ; les MCU plus rapides produisent des impulsions plus précises (généralement des dizaines de nanosecondes).
Note
Pour contrôler les bandeaux WS2812 / NeoPixel, voir le module
neopixelpour une API de plus haut niveau.
Constantes¶
Les constantes ci-dessous sont renvoyées par reset_cause() et identifient pourquoi le MCU s’est réinitialisé pour la dernière fois. Disponibles sur les ports STM32 et mimxrt ; le port alif (OpenMV Cam AE3) n’expose pas actuellement les constantes de cause de réinitialisation et son reset_cause() renvoie toujours 0.
- machine.PWRON_RESET: int¶
Réinitialisation causée par la mise sous tension de la puce. Ports STM32 et mimxrt.
- machine.WDT_RESET: int¶
Réinitialisation causée par l’expiration du minuteur de surveillance. Ports STM32 et mimxrt.
- machine.SOFT_RESET: int¶
Réinitialisation causée par
soft_reset()(l’interpréteur Python a redémarré sans réinitialisation matérielle). Ports STM32 et mimxrt.
Classes¶
- classe Pin – contrôle des broches d’E/S
- class Signal – contrôler et détecter des périphériques d’E/S externes
- classe LED – contrôle portable des LED embarquées
- classe ADC – conversion analogique-numérique
- classe PWM – modulation de largeur d’impulsion
- classe UART – bus de communication série bidirectionnel
- class SPI – un protocole de bus Serial Peripheral Interface (côté contrôleur)
- class SoftSPI – bus SPI émulé de manière logicielle
- class I2C – un protocole série à deux fils
- class SoftI2C – bus I2C émulé par logiciel
- class I2CTarget – un périphérique cible I2C
- classe I2S – protocole de bus Inter-IC Sound
- classe CAN – protocole Controller Area Network
- classe RTC – horloge en temps réel
- class Timer – minuteur virtuel périodique / à coup unique
- classe WDT – minuteur de surveillance (watchdog)
- class SDCard – pilote de carte SD / MMC
- classe Counter – compteur d’impulsions
- classe Encoder – décodeur en quadrature