الفئة Flash -- الوصول إلى تخزين الفلاش المدمج

تتيح الفئة Flash الوصول المباشر إلى جهاز الفلاش الأساسي في OpenMV Cams القائمة على STM32.

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

ملاحظة

تستخدم OpenMV Cam H7 Plus وPure Thermal وN6 شريحة فلاش SPI/QSPI/XSPI خارجية للتخزين الأساسي؛ بينما تستخدم بقية OpenMV Cams القائمة على STM32 الفلاش الداخلي داخل MCU. وواجهة Python متطابقة في كلتا الحالتين.

المُنشئات

class pyb.Flash
class pyb.Flash(*, start: int = -1, len: int = -1)

إنشاء جهاز كتل متوافق مع vfs.AbstractBlockDev لفلاش اللوحة. توجد صيغتان:

  • Flash() (بدون وسائط): يُرجع الكائن المفرد القديم الذي يعرض الفلاش بالكامل مع جدول تقسيم افتراضي مُضاف في المقدمة. تبدأ بيانات الفلاش الفعلية عند الكتلة 0x100. هذه الصيغة مهملة وستُزال في إصدار مستقبلي من MicroPython.

  • Flash(start=..., len=...): يُرجع جهاز كتل جديداً يصل إلى الفلاش ابتداءً من إزاحة البايت start (الافتراضي 0) بمقدار len بايت (الافتراضي: ما تبقى من الجهاز). يجب أن تكون كلتا القيمتين من مضاعفات حجم الكتلة الأساسي (عادةً 512 بايت للفلاش الداخلي؛ تستخدم أجزاء SPI/QSPI/XSPI الخارجية حجم قطاع محو أكبر).

الطرائق

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) أي قيد محاذاة. مدعومة فقط على الكائنات المُنشأة بوسيطين صريحين start / len، وليس على الكائن المفرد المهمل.

writeblocks(block_num: int, buf: bytes | bytearray) None
writeblocks(block_num: int, buf: bytes | bytearray, 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). مدعومة فقط على الكائنات المُنشأة بوسيطين صريحين start / len.

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

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