machine --- fungsi-fungsi terkait perangkat keras¶
Modul machine berisi fungsi-fungsi khusus terkait perangkat keras pada papan tertentu. Sebagian besar fungsi dalam modul ini memungkinkan akses langsung dan tidak terbatas ke serta kontrol atas blok perangkat keras pada suatu sistem (seperti CPU, timer, bus, dll.).
Akses memori¶
Modul ini mengekspos tiga objek yang dapat di-subscript yang digunakan untuk akses memori mentah. Setiap objek berperilaku seperti array jarang yang diindeks oleh alamat byte: value = memN[addr] membaca, memN[addr] = value menulis. Alamat selalu merupakan alamat byte, terlepas dari lebar akses.
- machine.mem8¶
Pengakses memori 8-bit yang dapat di-subscript.
mem8[addr]membacaintdalam rentang 0-255 dari byte diaddr;mem8[addr] = valuemenulis 8 bit rendah darivalue.addrharus sejajar dengan 1 byte (alamat mana pun).
- machine.mem16¶
Pengakses memori 16-bit (halfword) yang dapat di-subscript.
mem16[addr]membacaintdalam rentang 0-65535;mem16[addr] = valuemenulis 16 bit rendah.addrharus sejajar dengan 2 byte.
- machine.mem32¶
Pengakses memori 32-bit (word) yang dapat di-subscript.
mem32[addr]membacaintdalam rentang 0-0xFFFFFFFF;mem32[addr] = valuemenulis 32 bit rendah.addrharus sejajar dengan 4 byte.
Contoh penggunaan (register bersifat khusus untuk mikrokontroler STM32H7 -- pada OpenMV Cam H7 / H7 Plus / Pure Thermal pin header P0 terhubung ke 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
Fungsi-fungsi lain-lain¶
- machine.unique_id() bytes¶
Mengembalikan objek
bytesyang berisi pengidentifikasi unik untuk papan ini. Nilainya dibaca dari perangkat keras MCU (biasanya nomor seri perangkat yang diprogram di pabrik), sehingga stabil di seluruh reboot dan berbeda dari satu papan ke papan lainnya.Panjangnya bergantung pada keluarga MCU -- 12 byte pada STM32, 8 byte pada port mimxrt dan alif. Jika aplikasi Anda memerlukan ID dengan panjang tetap, potong atau hash nilai yang dikembalikan.
- machine.time_pulse_us(pin: Pin, pulse_level: int, timeout_us: int = 1000000, /) int¶
Mengukur lebar satu pulsa pada
pindan mengembalikan durasinya dalam mikrodetik.pinharus dikonfigurasi sebagai input digital.pulse_leveladalah polaritas pulsa yang dihitung waktunya:1untuk pulsa tinggi,0untuk pulsa rendah.Fungsi bekerja dalam dua fase. Pertama, jika pin belum berada di
pulse_level, fungsi menunggu pin berpindah kepulse_level(awal pulsa). Kemudian mengukur waktu pin tetap dipulse_levelsebelum berpindah kembali (akhir pulsa). Waktu yang diukur dikembalikan dalam mikrodetik.timeout_usmembatasi setiap fase secara independen (sehingga panggilan kasus terburuk berlangsung hingga2 * timeout_us). Saat timeout, fungsi mengembalikan nilai negatif yang mengidentifikasi fase mana yang mengalami timeout:-2-- timeout menunggu tepi depan (pin tidak pernah mencapaipulse_level).-1-- timeout menunggu tepi belakang (pulsa lebih panjang daritimeout_us).
- machine.bitstream(pin: Pin, encoding: int, timing: tuple, data: bytes, /) None¶
Mentransmisikan data dengan bit-banging pada pin yang ditentukan. Argumen encoding menentukan cara bit dikodekan, dan timing adalah spesifikasi timing khusus encoding.
Encoding yang didukung adalah:
0untuk modulasi durasi pulsa "high low". Ini akan mentransmisikan bit 0 dan 1 sebagai pulsa berdurasi tertentu, dimulai dari bit paling signifikan. timing harus berupa empat-tuple nanosecond dalam format(high_time_0, low_time_0, high_time_1, low_time_1). Misalnya,(400, 850, 800, 450)adalah spesifikasi timing untuk LED RGB WS2812 pada 800kHz.
Akurasi timing bergantung pada perangkat keras; MCU yang lebih cepat menghasilkan pulsa yang lebih ketat (biasanya puluhan nanodetik).
Catatan
Untuk mengontrol strip WS2812 / NeoPixel, lihat modul
neopixeluntuk API tingkat yang lebih tinggi.
Konstanta¶
Konstanta di bawah ini dikembalikan oleh reset_cause() dan mengidentifikasi mengapa MCU terakhir kali direset. Tersedia pada port STM32 dan mimxrt; port alif (OpenMV Cam AE3) saat ini tidak mengekspos konstanta penyebab reset dan reset_cause()-nya selalu mengembalikan 0.
- machine.PWRON_RESET: int¶
Reset yang disebabkan oleh daya yang diberikan ke chip. Port STM32 dan mimxrt.
- machine.WDT_RESET: int¶
Reset yang disebabkan oleh watchdog timer yang kedaluwarsa. Port STM32 dan mimxrt.
- machine.SOFT_RESET: int¶
Reset yang disebabkan oleh
soft_reset()(interpreter Python dimulai ulang tanpa hard reset). Port STM32 dan mimxrt.
Kelas-kelas¶
- kelas Pin -- kontrol pin I/O
- class Signal -- mengendalikan dan mendeteksi perangkat I/O eksternal
- class LED -- kontrol LED on-board yang portabel
- kelas ADC -- konversi analog ke digital
- class PWM -- pulse-width modulation
- kelas UART -- bus komunikasi serial dupleks
- class SPI -- protokol bus Serial Peripheral Interface (sisi kontroler)
- class SoftSPI -- bus SPI yang diemulasi oleh perangkat lunak
- kelas I2C -- protokol serial dua kabel
- kelas SoftI2C -- bus I2C berbasis software
- kelas I2CTarget -- perangkat target I2C
- class I2S -- Protokol bus Inter-IC Sound
- kelas CAN -- Protokol Controller Area Network
- kelas RTC -- real-time clock
- class Timer -- timer virtual periodik / satu kali
- kelas WDT -- watchdog timer
- class SDCard -- driver kartu SD / MMC
- kelas Counter -- penghitung pulsa
- kelas Encoder -- dekoder kuadratif