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

يوفر الصنف Flash وصولاً مباشراً على مستوى الكتل إلى شريحة فلاش QSPI الخارجية الخاصة بـ RP2040. يطبّق المشغّل واجهة vfs.AbstractBlockDev بحيث يمكن تمريره إلى vfs.mount() لإعدادات أنظمة الملفات المخصّصة.

تحتفظ معظم البرامج النصية بالبيانات عبر نظام الملفات المركّب تلقائياً عند / ولا تنشئ Flash مباشرة أبداً. أنشئ كائناً يدوياً عندما تحتاج إلى:

  • تركيب نظام ملفات غير افتراضي (مثل التغليف بـ vfs.VfsFat) على قسم مخصّص.

  • قراءة أو كتابة مناطق البرنامج الثابت أو كتل بيانات المصنع التي لا يملكها نظام الملفات.

  • تطبيق صيغة تخزين مخصّصة على الفلاش تتجاوز طبقة نظام الملفات.

البانيات (Constructors)

class rp2.Flash Flash

إرجاع كائن جهاز الكتل المفرد Flash المدعوم بشريحة فلاش QSPI الخاصة بـ RP2040. أول كتلة مكشوفة هي تلك التي تلي مباشرة منطقة البرنامج الثابت، بحيث لا يرى المستدعون سوى المنطقة المؤهلة لنظام الملفات من الشريحة.

الطرائق (Methods)

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

قراءة بايتات من الفلاش إلى buf. نقطة الدخول القياسية لجهاز الكتل وفق vfs.AbstractBlockDev التي تستخدمها طبقة نظام الملفات.

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

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

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

كتابة بايتات من buf إلى الفلاش. نقطة الدخول القياسية لجهاز الكتل وفق vfs.AbstractBlockDev التي تستخدمها طبقة نظام الملفات.

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

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

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

نقطة دخول التحكم القياسية وفق vfs.AbstractBlockDev. تُستدعى من طبقة نظام الملفات عند التركيب/الفصل وعند كل مزامنة. قيم cmd المعروفة:

  • 1 -- التهيئة. يُرجع 0 عند النجاح.

  • 2 -- إلغاء التهيئة. يُرجع 0 عند النجاح.

  • 3 -- مزامنة عمليات الكتابة المعلّقة. يُرجع 0.

  • 4 -- إرجاع عدد كتل الفلاش المرئية لنظام الملفات.

  • 5 -- إرجاع حجم الكتلة بالبايت (عادةً حجم قطاع الفلاش، 4096).

  • 6 -- محو الكتلة عند الفهرس arg. مطلوب قبل استخدام الصيغة الموسّعة لـ writeblocks.

  • 7 -- إرجاع ما إذا كان الجهاز يدعم أمر محو الكتلة (1 على RP2040).

لا يستخدم المستدعون المباشرون هذه الطريقة عادةً -- يرسل مشغّل نظام الملفات الرموز القياسية تلقائياً بمجرد تركيب Flash.