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.