mimxrt --- وظائف خاصة بـ NXP i.MXRT

تحتوي وحدة mimxrt على دوال وأصناف خاصة بعائلة المتحكمات الدقيقة NXP i.MXRT.

الأصناف

class mimxrt.Flash

يحصل على الكائن الأحادي (singleton) الذي يكشف منطقة تخزين المستخدم من ذاكرة QSPI flash المدمجة بوصفها جهازًا كتليًا متوافقًا مع vfs.AbstractBlockDev. أرقام الكتل نسبية لبداية تلك المنطقة، لا للبداية الفيزيائية للفلاش.

في معظم الحالات، لتخزين بيانات دائمة على الجهاز، سترغب في استخدام تجريد أعلى مستوى -- مثلًا نظام الملفات عبر واجهة الملفات القياسية في Python. وتفيد هذه الواجهة في تخصيص إعدادات نظام الملفات أو تنفيذ نظام تخزين منخفض المستوى لتطبيقك.

يطبّق الكائن أيضًا بروتوكول المخزن المؤقت، مما يتيح وصولًا للقراءة فقط بإسناد الذاكرة (memory-mapped) إلى منطقة تخزين الفلاش بأكملها عبر قاعدة QSPI XIP. وهذا يوفّر عرضًا بلا نسخ (zero-copy) للمنطقة دون إصدار أي قراءات للفلاش:

flash = mimxrt.Flash()
view = memoryview(flash)
magic = bytes(view[:4])      # read the first 4 bytes directly from XIP

يمكن الاستعلام عن حجم الكتلة الذي تستخدمه قطاعات الفلاش الأساسية أثناء التشغيل عبر ioctl(5, 0).

readblocks(block_num: int, buf: bytearray) None
readblocks(block_num: int, buf: bytearray, offset: int) None

يقرأ بايتات من الفلاش إلى buf. يكشف شكلان مُحمَّلان الواجهتين البسيطة والموسّعة:

الشكل البسيط (readblocks(block_num, buf)): يقرأ كتلًا كاملة بدءًا من فهرس الكتلة block_num. يجب أن يكون len(buf) مضاعفًا لحجم كتلة الفلاش.

الشكل الموسّع (readblocks(block_num, buf, offset)): يقرأ len(buf) بايت -- ليس بالضرورة عددًا صحيحًا من الكتل -- بدءًا من البايت offset داخل الكتلة block_num. ولا يخضع len(buf) لأي قيد محاذاة.

writeblocks(block_num: int, buf: bytes) None
writeblocks(block_num: int, buf: bytes, offset: int) None

يكتب بايتات من buf إلى الفلاش. يكشف شكلان مُحمَّلان الواجهتين البسيطة والموسّعة:

الشكل البسيط (writeblocks(block_num, buf)): يكتب كتلًا كاملة بدءًا من فهرس الكتلة block_num. يجب أن يكون len(buf) مضاعفًا لحجم كتلة الفلاش. وتُمحى كل كتلة متأثرة تلقائيًا قبل الكتابة إليها.

الشكل الموسّع (writeblocks(block_num, buf, offset)): يكتب len(buf) بايت -- ليس بالضرورة عددًا صحيحًا من الكتل -- بدءًا من البايت offset داخل الكتلة block_num. ولا يخضع len(buf) لأي قيد محاذاة، ولا يُجرى أي محو ضمني -- على المُستدعي ضمان أن الكتل المتأثرة قد مُحيت عبر استدعاء ioctl(6, block_num) سابق.

يطلق OSError إذا فشلت عملية محو الفلاش أو الكتابة الأساسية.

ioctl(cmd: int, arg: int) int | None

نقطة دخول ioctl القياسية لـ vfs.AbstractBlockDev. انظر vfs.AbstractBlockDev.ioctl() للحصول على القائمة الكاملة لقيم cmd. القيمة cmd=5 تعيد حجم كتلة الفلاش بالبايت؛ والقيمة cmd=6 تمحو الكتلة ذات الفهرس arg.