machine — 하드웨어 관련 함수¶
machine 모듈에는 특정 보드의 하드웨어와 관련된 구체적인 함수가 포함되어 있습니다. 이 모듈의 대부분의 함수는 시스템의 하드웨어 블록(CPU, 타이머, 버스 등)에 대한 직접적이고 제한 없는 접근과 제어를 가능하게 합니다.
메모리 접근¶
이 모듈은 원시 메모리 접근에 사용되는 세 개의 첨자 접근 가능한 객체를 노출합니다. 각각은 바이트 주소로 인덱싱되는 희소 배열처럼 동작합니다: value = memN[addr]는 읽기, memN[addr] = value는 쓰기입니다. 주소는 접근 폭에 관계없이 항상 바이트 주소입니다.
- machine.mem8¶
첨자 접근 가능한 8비트 메모리 접근자입니다.
mem8[addr]는addr의 바이트에서 0-255 범위의int를 읽고,mem8[addr] = value는value의 하위 8비트를 씁니다.addr은 1바이트로 정렬되어야 합니다(임의의 주소).
- machine.mem16¶
첨자 접근 가능한 16비트(하프워드) 메모리 접근자입니다.
mem16[addr]는 0-65535 범위의int를 읽고,mem16[addr] = value는 하위 16비트를 씁니다.addr은 2바이트로 정렬되어야 합니다.
- machine.mem32¶
첨자 접근 가능한 32비트(워드) 메모리 접근자입니다.
mem32[addr]는 0-0xFFFFFFFF 범위의int를 읽고,mem32[addr] = value는 하위 32비트를 씁니다.addr은 4바이트로 정렬되어야 합니다.
사용 예시(레지스터는 STM32H7 마이크로컨트롤러에 특정됩니다 – OpenMV Cam H7 / H7 Plus / Pure Thermal에서 헤더 핀 P0은 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
기타 함수¶
- machine.unique_id() bytes¶
이 보드의 고유 식별자를 포함하는
bytes객체를 반환합니다. 이 값은 MCU의 하드웨어에서 읽어 들이므로(일반적으로 공장에서 프로그래밍된 장치 일련번호), 재부팅 후에도 안정적이며 보드마다 다릅니다.길이는 MCU 제품군에 따라 다릅니다 – STM32에서는 12바이트, mimxrt 및 alif 포트에서는 8바이트입니다. 애플리케이션에 고정 길이 ID가 필요하면 반환된 값을 슬라이스하거나 해시하십시오.
- machine.time_pulse_us(pin: Pin, pulse_level: int, timeout_us: int = 1000000, /) int¶
pin에서 단일 펄스의 폭을 측정하고 그 지속 시간을 마이크로초 단위로 반환합니다.pin은 디지털 입력으로 구성되어야 합니다.pulse_level은 측정할 펄스 극성입니다: 하이 펄스의 경우1, 로우 펄스의 경우0입니다.이 함수는 두 단계로 작동합니다. 먼저, 핀이 아직
pulse_level에 있지 않으면 핀이pulse_level로 전환될 때까지 기다립니다(펄스의 시작). 그런 다음 핀이 다시 전환되기 전까지pulse_level에 머무는 시간을 측정합니다(펄스의 끝). 측정된 시간은 마이크로초 단위로 반환됩니다.timeout_us는 각 단계를 독립적으로 제한합니다(따라서 최악의 경우 호출은 최대2 * timeout_us동안 지속됩니다). 타임아웃 시 함수는 어느 단계가 타임아웃되었는지 식별하는 음수 값을 반환합니다:-2– 상승 에지를 기다리다 타임아웃됨(핀이pulse_level에 도달하지 못함).-1– 하강 에지를 기다리다 타임아웃됨(펄스가timeout_us보다 길었음).
- machine.bitstream(pin: Pin, encoding: int, timing: tuple, data: bytes, /) None¶
지정된 pin을 비트 뱅잉하여 data를 송신합니다. encoding 인수는 비트가 인코딩되는 방식을 지정하며, timing은 인코딩에 특정한 타이밍 사양입니다.
지원되는 인코딩은 다음과 같습니다:
“high low” 펄스 지속 시간 변조의 경우
0. 이는 0과 1 비트를 최상위 비트부터 시작하여 타이밍된 펄스로 송신합니다. timing은(high_time_0, low_time_0, high_time_1, low_time_1)형식의 나노초 4-튜플이어야 합니다. 예를 들어,(400, 850, 800, 450)은 800kHz에서 WS2812 RGB LED의 타이밍 사양입니다.
타이밍 정확도는 하드웨어에 따라 다릅니다. 더 빠른 MCU는 더 정밀한 펄스를 생성합니다(일반적으로 수십 나노초).
참고
WS2812 / NeoPixel 스트립 제어에 대해서는 보다 상위 수준의 API를 제공하는
neopixel모듈을 참조하십시오.
상수¶
아래 상수는 reset_cause()에 의해 반환되며 MCU가 마지막으로 리셋된 이유를 식별합니다. STM32 및 mimxrt 포트에서 사용할 수 있습니다. alif 포트(OpenMV Cam AE3)는 현재 리셋 원인 상수를 노출하지 않으며 reset_cause()는 항상 0을 반환합니다.
- machine.SOFT_RESET: int¶
soft_reset()에 의해 발생한 리셋(하드웨어 리셋 없이 Python 인터프리터가 재시작됨). STM32 및 mimxrt 포트.
클래스¶
- class Pin – I/O 핀 제어
- class Signal – 외부 I/O 장치 제어 및 감지
- class LED – 이식 가능한 온보드 LED 제어
- class ADC – 아날로그-디지털 변환
- class PWM – 펄스 폭 변조
- class UART – 양방향 직렬 통신 버스
- class SPI – 직렬 주변장치 인터페이스 버스 프로토콜(컨트롤러 측)
- class SoftSPI – 소프트웨어 에뮬레이션 SPI 버스
- class I2C – 2선식 시리얼 프로토콜
- class SoftI2C – 소프트웨어로 에뮬레이션된 I2C 버스
- class I2CTarget – I2C 타깃 장치
- class I2S – Inter-IC Sound 버스 프로토콜
- class CAN – Controller Area Network 프로토콜
- class RTC – 실시간 클록
- class Timer – 가상 주기/일회성 타이머
- class WDT – 워치독 타이머
- class SDCard – SD / MMC 카드 드라이버
- class Counter – 펄스 카운터
- class Encoder – 직교 디코더