alif — פונקציות של ה-SoC מסוג Alif Ensemble¶
המודול alif חושף פונקציונליות ספציפית ליציאה (port) עבור ה-SoC מסוג Alif Ensemble, כולל עוטף התקן-בלוקים לזיכרון ה-flash מסוג OSPI המובנה ועזר להדפסת מידע על ה-SoC משירותי ה-Secure Enclave.
דוגמה:
import alif
alif.info()
flash = alif.Flash()
פונקציות¶
מחלקות¶
- class alif.Flash(*, start: int = -1, len: int = -1)¶
יוצרת אובייקט התקן-בלוקים המגובה על-ידי זיכרון ה-flash מסוג OSPI המובנה. מחלקה זו זמינה רק כאשר הקושחה נבנתה עם תמיכת OSPI מאופשרת.
כאשר נקראת ללא ארגומנטים, מחזירה את אובייקט הסינגלטון בברירת המחדל המכסה את אזור מערכת הקבצים הניתן לכתיבה ב-flash.
startהוא היסט הבתים בתוך אזור אחסון ה-flash. חייב להיות כפולה של גודל בלוק ה-flash ובתוך טווח אחסון ה-flash. ברירת המחדל היא-1שמשמעותה התחלה מהיסט0.lenהוא האורך בבתים של אזור ה-flash שהאובייקט חושף. חייב להיות כפולה של גודל בלוק ה-flash ולא להשתרע מעבר לסוף אזור אחסון ה-flash. ברירת המחדל היא-1שמשמעותה שימוש בכל הבתים הנותרים החל מ-start.האובייקט מממש גם את פרוטוקול ה-buffer, ומאפשר גישה ממופת-זיכרון לקריאה-בלבד אל אזור ה-flash דרך בסיס ה-XIP של OSPI. הדבר הופך תצוגת אפס-העתקה (zero-copy) של כל האזור לזמינה ללא הנפקת קריאות flash כלשהן:
flash = alif.Flash() view = memoryview(flash) magic = bytes(view[:4]) # read the first 4 bytes directly from XIP
- readblocks(block_num: int, buf: bytearray) int¶
- readblocks(block_num: int, buf: bytearray, offset: int) int
קוראת בתים מה-flash אל תוך
buf. שתי הצורות החליפיות חושפות את הממשק הפשוט והמורחב:צורה פשוטה (
readblocks(block_num, buf)): קוראת בלוקים שלמים החל מאינדקס הבלוקblock_num.len(buf)חייב להיות כפולה של גודל בלוק ה-flash.צורה מורחבת (
readblocks(block_num, buf, offset)): קוראתlen(buf)בתים – לא בהכרח מספר שלם של בלוקים – החל מביתoffsetבתוך בלוקblock_num. ל-len(buf)אין אילוץ יישור.מחזירה
0בהצלחה או קוד שגיאה שלילי. שים לב שפרוטוקול התקן-הבלוקים הסטנדרטי של MicroPython מחזירNone; מנהל ההתקןalifחושף בכוונה את קוד הסטטוס של ה-OSPI הבסיסי, כך שקוראים העוקפים אתvfsיכולים להגיב לשגיאות חומרה.
- writeblocks(block_num: int, buf: bytes) int¶
- writeblocks(block_num: int, buf: bytes, offset: int) int
כותבת בתים מ-
bufאל ה-flash. שתי הצורות החליפיות חושפות את הממשק הפשוט והמורחב:צורה פשוטה (
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)קודמת.מחזירה
0בהצלחה או קוד שגיאה שלילי (ראוreadblocks()לנימוק).
- ioctl(cmd: int, arg: int) int¶
מבצעת פעולת בקרה על התקן-בלוקים.
cmdהוא אחד מפקודות ה-MP_BLOCKDEV_IOCTL_*הסטנדרטיות של MicroPython:1(init) — מחזירה0.2(deinit) — מחזירה0.3(sync) — מחזירה0.4(block count) — מחזירה את מספר הבלוקים באזור.5(block size) — מחזירה את גודל בלוק ה-flash בבתים.6(block erase) — מוחקת את הבלוק באינדקסargומחזירה את תוצאת פעולת המחיקה.
ערכי
cmdאחרים מחזיריםNone.