class Flash – גישה לאחסון פלאש מובנה

המחלקה Flash מאפשרת גישה ישירה להתקן הפלאש הראשי על OpenMV Cams מבוססות STM32.

ברוב המקרים, כדי לאחסן נתונים מתמשכים בהתקן, תרצו להשתמש בהפשטה ברמה גבוהה יותר, לדוגמה מערכת הקבצים דרך ה-API הסטנדרטי של קבצים ב-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() (ללא ארגומנטים): מחזיר את אובייקט הסינגלטון הישן (legacy) שחושף את כל הפלאש עם טבלת מחיצות וירטואלית המקדימה אותו. נתוני הפלאש בפועל מתחילים בבלוק 0x100. צורה זו הוצאה משימוש (deprecated) ותוסר בגרסה עתידית של 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.