machine — פונקציות הקשורות לחומרה¶
המודול machine מכיל פונקציות ספציפיות הקשורות לחומרה שעל לוח מסוים. רוב הפונקציות במודול זה מאפשרות להשיג גישה ובקרה ישירות ובלתי מוגבלות על בלוקים חומרתיים במערכת (כמו CPU, טיימרים, אפיקים וכו«).
גישה לזיכרון¶
המודול חושף שלושה אובייקטים הניתנים לאינדוקס, המשמשים לגישה גולמית לזיכרון. כל אחד מתנהג כמערך דליל המאונדקס לפי כתובת בייט: value = memN[addr] קורא, memN[addr] = value כותב. הכתובת היא תמיד כתובת בייט, ללא תלות ברוחב הגישה.
- machine.mem8¶
אובייקט גישה לזיכרון 8 ביטים הניתן לאינדוקס.
mem8[addr]קוראintבטווח 0-255 מהבייט בכתובתaddr;mem8[addr] = valueכותב את 8 הביטים התחתונים שלvalue.addrחייבת להיות מיושרת לבייט אחד (כל כתובת).
- machine.mem16¶
אובייקט גישה לזיכרון 16 ביטים (חצי-מילה) הניתן לאינדוקס.
mem16[addr]קוראintבטווח 0-65535;mem16[addr] = valueכותב את 16 הביטים התחתונים.addrחייבת להיות מיושרת ל-2 בייטים.
- machine.mem32¶
אובייקט גישה לזיכרון 32 ביטים (מילה) הניתן לאינדוקס.
mem32[addr]קוראintבטווח 0-0xFFFFFFFF;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 – 12 בייטים ב-STM32, 8 בייטים בפורטי mimxrt ו-alif. אם היישום שלך זקוק ל-ID באורך קבוע, חתוך או גבב (hash) את הערך המוחזר.
- 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). בעת timeout הפונקציה מחזירה ערך שלילי המזהה איזה שלב חרג מהזמן:-2– חריגת זמן בהמתנה לקצה המוביל (הפין מעולם לא הגיע ל-pulse_level).-1– חריגת זמן בהמתנה לקצה הנגרר (הפולס היה ארוך יותר מ-timeout_us).
- machine.bitstream(pin: Pin, encoding: int, timing: tuple, data: bytes, /) None¶
משדר data באמצעות bit-banging של ה-pin המצוין. הארגומנט encoding מציין כיצד הביטים מקודדים, ו-timing הוא מפרט תזמון ספציפי לקידוד.
הקידודים הנתמכים הם:
0עבור מודולציית משך פולס ”high low“. זה ישדר ביטים 0 ו-1 כפולסים מתוזמנים, החל מהביט המשמעותי ביותר. ה-timing חייב להיות four-tuple של ננו-שניות בפורמט(high_time_0, low_time_0, high_time_1, low_time_1). לדוגמה,(400, 850, 800, 450)הוא מפרט התזמון עבור נוריות WS2812 RGB ב-800kHz.
דיוק התזמון תלוי בחומרה; מיקרו-בקרים מהירים יותר מייצרים פולסים מהודקים יותר (בדרך כלל עשרות ננו-שניות).
הערה
לשליטה ברצועות WS2812 / NeoPixel, ראה את המודול
neopixelלקבלת API ברמה גבוהה יותר.
קבועים¶
הקבועים שלהלן מוחזרים על ידי reset_cause() ומזהים מדוע ה-MCU אופס לאחרונה. זמין בפורטי STM32 ו-mimxrt; פורט alif (OpenMV Cam AE3) אינו חושף כעת קבועי סיבת איפוס וה-reset_cause() שלו תמיד מחזיר 0.
- machine.SOFT_RESET: int¶
איפוס שנגרם מ-
soft_reset()(מפרש ה-Python הופעל מחדש ללא איפוס חומרתי). פורטי STM32 ו-mimxrt.
מחלקות¶
- class Pin – בקרת פיני קלט/פלט
- class Signal – בקרה וחישה של התקני I/O חיצוניים
- מחלקה LED – בקרה ניידת של נורית LED על הלוח
- class ADC – המרה אנלוגית לדיגיטלית
- מחלקה PWM – אפנון רוחב פולס
- class UART – אפיק תקשורת טורית דו-כיוונית
- class SPI – פרוטוקול אפיק Serial Peripheral Interface (צד הבקר)
- class SoftSPI – אפיק SPI בהדמיית תוכנה
- class I2C – פרוטוקול תקשורת טורי בשני חוטים
- class SoftI2C – אפיק I2C המדומה בתוכנה
- class I2CTarget – התקן יעד I2C
- מחלקה I2S – פרוטוקול אפיק הקול Inter-IC Sound
- class CAN – פרוטוקול Controller Area Network
- class RTC – שעון זמן-אמת
- class Timer – טיימר וירטואלי מחזורי / חד-פעמי
- class WDT – טיימר שמירה (watchdog)
- class SDCard – מנהל התקן לכרטיס SD / MMC
- class Counter – מונה פולסים
- class Encoder – מפענח מרובע