machine --- الدوال المتعلقة بالعتاد

تحتوي وحدة machine على دوال محددة متعلقة بالعتاد على لوحة معينة. تتيح معظم الدوال في هذه الوحدة تحقيق وصول مباشر وغير مقيّد إلى كتل العتاد في النظام والتحكم فيها (مثل وحدة المعالجة المركزية والمؤقتات والنواقل، إلخ).

الوصول إلى الذاكرة

تكشف الوحدة عن ثلاثة كائنات قابلة للفهرسة تُستخدم للوصول الخام إلى الذاكرة. يتصرّف كل منها مثل مصفوفة متفرقة مفهرسة بعنوان البايت: value = memN[addr] للقراءة، وmemN[addr] = value للكتابة. العنوان هو دائمًا عنوان بايت، بغض النظر عن عرض الوصول.

machine.mem8

مُوصِّل ذاكرة قابل للفهرسة بعرض 8 بتات. mem8[addr] يقرأ قيمة int في النطاق 0-255 من البايت عند addr ؛ وmem8[addr] = value يكتب البتات الثمانية المنخفضة من value . يجب أن يكون addr محاذيًا إلى بايت واحد (أي عنوان).

machine.mem16

مُوصِّل ذاكرة قابل للفهرسة بعرض 16 بت (نصف كلمة). mem16[addr] يقرأ قيمة int في النطاق 0-65535؛ وmem16[addr] = value يكتب البتات الستة عشرة المنخفضة. يجب أن يكون addr محاذيًا إلى بايتين.

machine.mem32

مُوصِّل ذاكرة قابل للفهرسة بعرض 32 بت (كلمة). mem32[addr] يقرأ قيمة int في النطاق 0-0xFFFFFFFF؛ وmem32[addr] = value يكتب البتات الاثنتين والثلاثين المنخفضة. يجب أن يكون 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 يحتوي على معرّف فريد لهذه اللوحة. تُقرأ القيمة من عتاد المتحكم الدقيق (عادةً الرقم التسلسلي للجهاز المبرمج في المصنع)، لذا فهي ثابتة عبر عمليات إعادة التشغيل وتختلف من لوحة إلى أخرى.

يعتمد الطول على عائلة المتحكم الدقيق -- 12 بايت على STM32، و8 بايتات على منفذي mimxrt وalif. إذا كان تطبيقك يحتاج إلى معرّف ثابت الطول، فقم بتقطيع القيمة المُرجعة أو تجزئتها.

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

يرسل data عن طريق التذبذب البتي (bit-banging) على الدبوس المحدد pin. يحدّد الوسيط encoding كيفية ترميز البتات، وtiming هو مواصفة توقيت خاصة بالترميز.

الترميزات المدعومة هي:

  • 0 لتعديل مدة النبضة من نوع "مرتفع منخفض". سيرسل هذا البتين 0 و1 كنبضات موقّتة، بدءًا من البت الأكثر أهمية. يجب أن يكون timing صفًا رباعيًا من النانوثواني بالصيغة (high_time_0, low_time_0, high_time_1, low_time_1). على سبيل المثال، (400, 850, 800, 450) هي مواصفة التوقيت لمصابيح WS2812 RGB LED عند 800kHz.

تعتمد دقة التوقيت على العتاد؛ تنتج المتحكمات الدقيقة الأسرع نبضات أكثر إحكامًا (عادةً عشرات النانوثواني).

ملاحظة

للتحكم في شرائط WS2812 / NeoPixel، انظر وحدة neopixel للحصول على واجهة برمجية عالية المستوى.

الثوابت

تُرجع الثوابت أدناه من قِبل reset_cause() وتحدد سبب آخر إعادة تعيين للمتحكم الدقيق. متاحة على منفذي STM32 وmimxrt؛ ولا يكشف منفذ alif (OpenMV Cam AE3) حاليًا عن ثوابت سبب إعادة التعيين، ويُرجع reset_cause() الخاص به دائمًا 0 .

machine.PWRON_RESET: int

إعادة تعيين سببها تطبيق الطاقة على الشريحة. منفذا STM32 وmimxrt.

machine.WDT_RESET: int

إعادة تعيين سببها انتهاء مؤقت المراقبة. منفذا STM32 وmimxrt.

machine.SOFT_RESET: int

إعادة تعيين سببها soft_reset() (أُعيد تشغيل مفسّر Python دون إعادة تعيين عتادية). منفذا STM32 وmimxrt.

machine.HARD_RESET: int

إعادة تعيين سببها تأكيد دبوس NRST (زر إعادة التعيين الخارجي). منافذ STM32 فقط.

machine.DEEPSLEEP_RESET: int

إعادة تعيين سببها الاستيقاظ من السبات العميق. منافذ STM32 فقط.

الفئات