الفئة 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.