machine — funciones relacionadas con el hardware¶
El módulo machine contiene funciones específicas relacionadas con el hardware de una placa en particular. La mayoría de las funciones de este módulo permiten lograr un acceso y control directos y sin restricciones de los bloques de hardware de un sistema (como la CPU, los temporizadores, los buses, etc.).
Acceso a memoria¶
El módulo expone tres objetos suscriptables que se usan para el acceso a memoria sin procesar. Cada uno se comporta como un array disperso indexado por dirección de byte: value = memN[addr] lee, memN[addr] = value escribe. La dirección es siempre una dirección de byte, independientemente del ancho de acceso.
- machine.mem8¶
Accesor de memoria suscriptable de 8 bits.
mem8[addr]lee uninten el rango 0-255 del byte enaddr;mem8[addr] = valueescribe los 8 bits bajos devalue.addrdebe estar alineado a 1 byte (cualquier dirección).
- machine.mem16¶
Accesor de memoria suscriptable de 16 bits (media palabra).
mem16[addr]lee uninten el rango 0-65535;mem16[addr] = valueescribe los 16 bits bajos.addrdebe estar alineado a 2 bytes.
- machine.mem32¶
Accesor de memoria suscriptable de 32 bits (palabra).
mem32[addr]lee uninten el rango 0-0xFFFFFFFF;mem32[addr] = valueescribe los 32 bits bajos.addrdebe estar alineado a 4 bytes.
Ejemplo de uso (los registros son específicos de un microcontrolador STM32H7 – en la OpenMV Cam H7 / H7 Plus / Pure Thermal el pin de cabecera P0 está conectado a 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
Funciones varias¶
- machine.unique_id() bytes¶
Devuelve un objeto
bytesque contiene un identificador único de esta placa. El valor se lee del hardware del MCU (normalmente el número de serie del dispositivo programado de fábrica), por lo que es estable entre reinicios y difiere de una placa a otra.La longitud depende de la familia del MCU – 12 bytes en STM32, 8 bytes en los puertos mimxrt y alif. Si tu aplicación necesita un ID de longitud fija, corta o aplica un hash al valor devuelto.
- machine.time_pulse_us(pin: Pin, pulse_level: int, timeout_us: int = 1000000, /) int¶
Mide el ancho de un único pulso en
piny devuelve su duración en microsegundos.pindebe estar configurado como una entrada digital.pulse_leveles la polaridad del pulso a medir:1para un pulso alto,0para un pulso bajo.La función funciona en dos fases. Primero, si el pin no está ya en
pulse_level, espera a que el pin pase apulse_level(el inicio del pulso). Luego mide el tiempo que el pin permanece enpulse_levelantes de volver a cambiar (el final del pulso). El tiempo medido se devuelve en microsegundos.timeout_uslimita cada fase de forma independiente (de modo que una llamada en el peor de los casos dura hasta2 * timeout_us). Si se agota el tiempo de espera, la función devuelve un valor negativo que identifica qué fase agotó su tiempo:-2– se agotó el tiempo esperando el flanco de subida (el pin nunca alcanzópulse_level).-1– se agotó el tiempo esperando el flanco de bajada (el pulso fue más largo quetimeout_us).
- machine.bitstream(pin: Pin, encoding: int, timing: tuple, data: bytes, /) None¶
Transmite data mediante bit-banging en el pin especificado. El argumento encoding especifica cómo se codifican los bits, y timing es una especificación de temporización específica de la codificación.
Las codificaciones admitidas son:
0para la modulación de duración de pulso «alto bajo». Esto transmitirá los bits 0 y 1 como pulsos temporizados, empezando por el bit más significativo. El timing debe ser una tupla de cuatro nanosegundos con el formato(high_time_0, low_time_0, high_time_1, low_time_1). Por ejemplo,(400, 850, 800, 450)es la especificación de temporización para los LED RGB WS2812 a 800kHz.
La precisión de la temporización depende del hardware; los MCU más rápidos producen pulsos más ajustados (normalmente decenas de nanosegundos).
Nota
Para controlar tiras WS2812 / NeoPixel, consulta el módulo
neopixelpara una API de más alto nivel.
Constantes¶
Las constantes siguientes son devueltas por reset_cause() e identifican por qué se reinició el MCU por última vez. Disponibles en los puertos STM32 y mimxrt; el puerto alif (OpenMV Cam AE3) no expone actualmente constantes de causa de reinicio y su reset_cause() siempre devuelve 0.
- machine.PWRON_RESET: int¶
Reinicio causado por la aplicación de alimentación al chip. Puertos STM32 y mimxrt.
- machine.WDT_RESET: int¶
Reinicio causado por la expiración del temporizador de vigilancia (watchdog). Puertos STM32 y mimxrt.
- machine.SOFT_RESET: int¶
Reinicio causado por
soft_reset()(el intérprete de Python se reinició sin un reinicio por hardware). Puertos STM32 y mimxrt.
Clases¶
- clase Pin – control de pines de E/S
- class Signal – controlar y detectar dispositivos de E/S externos
- clase LED – control portátil del LED integrado en la placa
- clase ADC – conversión de analógico a digital
- clase PWM – modulación por ancho de pulso
- clase UART – bus de comunicación serie dúplex
- class SPI – un protocolo de bus de interfaz periférica serie (lado del controlador)
- class SoftSPI – bus SPI emulado por software
- clase I2C – un protocolo serie de dos hilos
- clase SoftI2C – bus I2C emulado por software
- clase I2CTarget – un dispositivo target de I2C
- clase I2S – protocolo de bus Inter-IC Sound
- clase CAN – protocolo Controller Area Network
- clase RTC – reloj de tiempo real
- class Timer – temporizador virtual periódico / de un solo disparo
- clase WDT – temporizador de vigilancia (watchdog)
- class SDCard – controlador de tarjetas SD / MMC
- clase Counter – contador de pulsos
- clase Encoder – decodificador de cuadratura