alif --- دوال شريحة Alif Ensemble SoC¶
تكشف الوحدة alif عن وظائف خاصة بالمنفذ لشريحة Alif Ensemble SoC، بما في ذلك غلاف لجهاز الكتل للذاكرة OSPI flash الموجودة على اللوحة ومساعد لإخراج معلومات الشريحة من خدمات الحاوية الآمنة (Secure Enclave).
مثال:
import alif
alif.info()
flash = alif.Flash()
الدوال¶
الأصناف¶
- class alif.Flash(*, start: int = -1, len: int = -1)¶
ينشئ كائن جهاز كتل مدعوماً بالذاكرة OSPI flash الموجودة على اللوحة. لا يتوفر هذا الصنف إلا عندما يُبنى البرنامج الثابت مع تمكين دعم OSPI.
عند استدعائه دون وسائط، يُعيد الكائن المفرد الافتراضي الذي يغطي منطقة نظام الملفات القابلة للكتابة من ذاكرة flash.
startهو إزاحة البايت داخل منطقة تخزين flash. يجب أن يكون مضاعفاً لحجم كتلة flash وضمن نطاق تخزين flash. القيمة الافتراضية هي-1وتعني البدء عند الإزاحة0.lenهو الطول بالبايتات لمنطقة flash التي يكشفها الكائن. يجب أن يكون مضاعفاً لحجم كتلة flash وألا يمتد إلى ما بعد نهاية منطقة تخزين flash. القيمة الافتراضية هي-1وتعني استخدام جميع البايتات المتبقية بدءاً منstart.يُنفّذ الكائن أيضاً بروتوكول المخزن المؤقت، مما يتيح وصولاً للقراءة فقط مُسقطاً في الذاكرة إلى منطقة flash عبر قاعدة OSPI XIP. هذا يجعل عرضاً بلا نسخ للمنطقة بأكملها متاحاً دون إصدار أي عمليات قراءة من 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(التهيئة) --- تُعيد0.2(إنهاء التهيئة) --- تُعيد0.3(المزامنة) --- تُعيد0.4(عدد الكتل) --- تُعيد عدد الكتل في المنطقة.5(حجم الكتلة) --- تُعيد حجم كتلة flash بالبايتات.6(محو الكتلة) --- تمحو الكتلة عند الفهرسargوتُعيد نتيجة عملية المحو.
تُعيد قيم
cmdالأخرىNone.