machine — funções relacionadas ao hardware¶
O módulo machine contém funções específicas relacionadas ao hardware de uma placa em particular. A maioria das funções deste módulo permite obter acesso e controle diretos e irrestritos a blocos de hardware de um sistema (como CPU, timers, barramentos, etc.).
Acesso à memória¶
O módulo expõe três objetos indexáveis usados para acesso bruto à memória. Cada um se comporta como um array esparso indexado por endereço de byte: value = memN[addr] lê, memN[addr] = value escreve. O endereço é sempre um endereço de byte, independentemente da largura de acesso.
- machine.mem8¶
Acessador de memória de 8 bits indexável.
mem8[addr]lê umintno intervalo 0-255 a partir do byte emaddr;mem8[addr] = valueescreve os 8 bits inferiores devalue.addrdeve estar alinhado em 1 byte (qualquer endereço).
- machine.mem16¶
Acessador de memória de 16 bits (halfword) indexável.
mem16[addr]lê umintno intervalo 0-65535;mem16[addr] = valueescreve os 16 bits inferiores.addrdeve estar alinhado em 2 bytes.
- machine.mem32¶
Acessador de memória de 32 bits (word) indexável.
mem32[addr]lê umintno intervalo 0-0xFFFFFFFF;mem32[addr] = valueescreve os 32 bits inferiores.addrdeve estar alinhado em 4 bytes.
Exemplo de uso (os registradores são específicos de um microcontrolador STM32H7 – nas OpenMV Cam H7 / H7 Plus / Pure Thermal, o pino P0 do header está ligado 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
Funções diversas¶
- machine.unique_id() bytes¶
Retorna um objeto
bytescontendo um identificador único para esta placa. O valor é lido do hardware do MCU (tipicamente o número de série do dispositivo programado de fábrica), de modo que é estável entre reinicializações e difere de uma placa para outra.O comprimento depende da família do MCU – 12 bytes no STM32, 8 bytes nas portas mimxrt e alif. Se sua aplicação precisar de um ID de comprimento fixo, faça o slice ou o hash do valor retornado.
- machine.time_pulse_us(pin: Pin, pulse_level: int, timeout_us: int = 1000000, /) int¶
Mede a largura de um único pulso em
pine retorna sua duração em microssegundos.pindeve estar configurado como uma entrada digital.pulse_levelé a polaridade do pulso a ser medida:1para um pulso alto,0para um pulso baixo.A função funciona em duas fases. Primeiro, se o pino ainda não estiver em
pulse_level, ela aguarda o pino fazer a transição parapulse_level(o início do pulso). Em seguida, ela mede o tempo em que o pino permanece empulse_levelantes de fazer a transição de volta (o fim do pulso). O tempo medido é retornado em microssegundos.timeout_uslimita cada fase de forma independente (de modo que, no pior caso, a chamada dura até2 * timeout_us). Em caso de timeout, a função retorna um valor negativo identificando qual fase atingiu o timeout:-2– timeout aguardando a borda de subida (o pino nunca atingiupulse_level).-1– timeout aguardando a borda de descida (o pulso foi mais longo do quetimeout_us).
- machine.bitstream(pin: Pin, encoding: int, timing: tuple, data: bytes, /) None¶
Transmite data fazendo bit-banging no pin especificado. O argumento encoding especifica como os bits são codificados, e timing é uma especificação de temporização específica da codificação.
As codificações suportadas são:
0para modulação por duração de pulso “high low”. Isso transmitirá os bits 0 e 1 como pulsos temporizados, começando pelo bit mais significativo. O timing deve ser uma tupla de quatro valores em nanossegundos no formato(high_time_0, low_time_0, high_time_1, low_time_1). Por exemplo,(400, 850, 800, 450)é a especificação de temporização para LEDs RGB WS2812 a 800kHz.
A precisão da temporização depende do hardware; MCUs mais rápidos produzem pulsos mais precisos (tipicamente dezenas de nanossegundos).
Nota
Para controlar fitas WS2812 / NeoPixel, veja o módulo
neopixelpara uma API de nível mais alto.
Constantes¶
As constantes abaixo são retornadas por reset_cause() e identificam por que o MCU foi resetado pela última vez. Disponíveis nas portas STM32 e mimxrt; a porta alif (OpenMV Cam AE3) atualmente não expõe constantes de causa de reset, e seu reset_cause() sempre retorna 0.
- machine.SOFT_RESET: int¶
Reset causado por
soft_reset()(o interpretador Python reiniciou sem um reset de hardware). Portas STM32 e mimxrt.
Classes¶
- classe Pin – controla pinos de E/S
- classe Signal – controlar e detectar dispositivos de E/S externos
- classe LED – controle portátil do LED embutido na placa
- classe ADC – conversão analógico-digital
- classe PWM – modulação por largura de pulso
- classe UART – barramento de comunicação serial duplex
- classe SPI – um protocolo de barramento Serial Peripheral Interface (lado do controlador)
- classe SoftSPI – barramento SPI emulado por software
- classe I2C – um protocolo serial de dois fios
- classe SoftI2C – barramento I2C emulado por software
- classe I2CTarget – um dispositivo alvo I2C
- classe I2S – protocolo de barramento Inter-IC Sound
- classe CAN – protocolo Controller Area Network
- classe RTC – relógio de tempo real
- classe Timer – timer virtual periódico / de disparo único
- classe WDT – watchdog timer
- classe SDCard – driver de cartão SD / MMC
- classe Counter – contador de pulsos
- classe Encoder – decodificador de quadratura