mimxrt — פונקציונליות ספציפית ל-NXP i.MXRT

המודול mimxrt מכיל פונקציות ומחלקות הספציפיות למשפחת המיקרו-בקרים NXP i.MXRT.

מחלקות

class mimxrt.Flash

קבלו את אובייקט ה-singleton שחושף את אזור אחסון-המשתמש של זיכרון ה-QSPI flash שעל הלוח כהתקן בלוקים תואם vfs.AbstractBlockDev. מספרי הבלוקים יחסיים לתחילת אזור זה, לא לתחילתו הפיזית של ה-flash.

ברוב המקרים, כדי לאחסן נתונים מתמשכים בהתקן, תרצו להשתמש בהפשטה ברמה גבוהה יותר – למשל מערכת הקבצים דרך ה-API הסטנדרטי של Python לקבצים. ממשק זה שימושי כדי להתאים אישית את תצורת מערכת הקבצים או לממש מערכת אחסון ברמה נמוכה עבור היישום שלכם.

האובייקט גם מממש את פרוטוקול החוצץ (buffer), ומאפשר גישה לקריאה-בלבד הממופה לזיכרון לכל אזור אחסון ה-flash דרך בסיס ה-QSPI XIP. הדבר הופך תצוגת zero-copy של האזור לזמינה ללא ביצוע קריאות flash כלשהן:

flash = mimxrt.Flash()
view = memoryview(flash)
magic = bytes(view[:4])      # read the first 4 bytes directly from XIP

ניתן לתשאל את גודל הבלוק שמשמש את מגזרי ה-flash הבסיסיים בזמן ריצה באמצעות ioctl(5, 0).

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

קראו בתים מה-flash אל buf. שתי גרסאות עמוסות (overloads) חושפות את הממשקים הפשוט והמורחב:

צורה פשוטה (readblocks(block_num, buf)): קוראת בלוקים שלמים החל מאינדקס הבלוק block_num. len(buf) חייב להיות כפולה של גודל בלוק ה-flash.

צורה מורחבת (readblocks(block_num, buf, offset)): קוראת len(buf) בתים – לא בהכרח מספר שלם של בלוקים – החל מבית offset בתוך בלוק block_num. ל-len(buf) אין מגבלת יישור (alignment).

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

כתבו בתים מ-buf אל ה-flash. שתי גרסאות עמוסות (overloads) חושפות את הממשקים הפשוט והמורחב:

צורה פשוטה (writeblocks(block_num, buf)): כותבת בלוקים שלמים החל מאינדקס הבלוק block_num. len(buf) חייב להיות כפולה של גודל בלוק ה-flash. כל בלוק מושפע נמחק אוטומטית לפני שנכתב אליו.

צורה מורחבת (writeblocks(block_num, buf, offset)): כותבת len(buf) בתים – לא בהכרח מספר שלם של בלוקים – החל מבית offset בתוך בלוק block_num. ל-len(buf) אין מגבלת יישור, ואין ביצוע מחיקה משתמעת – הקורא חייב לוודא שהבלוקים המושפעים נמחקו באמצעות קריאת ioctl(6, block_num) קודמת.

מעלה OSError אם פעולת המחיקה או הכתיבה של ה-flash הבסיסי נכשלת.

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

נקודת כניסה סטנדרטית של ioctl ל-vfs.AbstractBlockDev. ראו vfs.AbstractBlockDev.ioctl() עבור הרשימה המלאה של ערכי cmd. cmd=5 מחזיר את גודל בלוק ה-flash בבתים; cmd=6 מוחק את הבלוק עם האינדקס arg.