mimxrt --- ฟังก์ชันเฉพาะสำหรับ NXP i.MXRT

โมดูล mimxrt มีฟังก์ชันและ class เฉพาะสำหรับ microcontroller ตระกูล NXP i.MXRT

Classes

class mimxrt.Flash

รับ singleton object ที่เปิดเผยพื้นที่จัดเก็บข้อมูลผู้ใช้ของ QSPI flash บนบอร์ดเป็นอุปกรณ์ block ที่เข้ากันได้กับ vfs.AbstractBlockDev หมายเลขบล็อกสัมพัทธ์กับจุดเริ่มต้นของพื้นที่นั้น ไม่ใช่จุดเริ่มต้นทางกายภาพของแฟลช

ในกรณีส่วนใหญ่ หากต้องการจัดเก็บข้อมูลถาวรบนอุปกรณ์ คุณควรใช้ abstraction ระดับสูงกว่า -- เช่น filesystem ผ่าน file API มาตรฐานของ Python interface นี้มีประโยชน์สำหรับการ ปรับแต่งการกำหนดค่า filesystem หรือใช้งาน storage system ระดับต่ำสำหรับแอปพลิเคชันของคุณ

ออบเจกต์นี้ยังใช้งาน buffer protocol ซึ่งอนุญาตให้เข้าถึงหน่วยความจำแบบอ่านอย่างเดียว (read-only memory-mapped) ไปยังพื้นที่จัดเก็บแฟลชทั้งหมดผ่าน QSPI XIP base ซึ่งทำให้สามารถมองเห็น view แบบ zero-copy ของพื้นที่ได้โดยไม่ต้องออก flash read ใด ๆ:

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

ขนาดบล็อกที่ใช้โดย flash sector ที่อยู่เบื้องหลังสามารถ query ได้ที่ runtime ด้วย ioctl(5, 0)

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

อ่าน bytes จากแฟลชลงใน buf overload สองแบบเปิดเผย simple interface และ extended interface:

รูปแบบ simple (readblocks(block_num, buf)): อ่านบล็อกทั้งหมดเริ่มต้นที่ block index block_num len(buf) ต้องเป็นจำนวนคูณของขนาดบล็อกของแฟลช

รูปแบบ extended (readblocks(block_num, buf, offset)): อ่าน len(buf) bytes -- ไม่จำเป็นต้องเป็นจำนวนเต็มบล็อก -- เริ่มต้นที่ byte offset ภายในบล็อก block_num len(buf) ไม่มีข้อจำกัดด้านการจัดแนว

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

เขียน bytes จาก buf ไปยังแฟลช overload สองแบบเปิดเผย simple interface และ extended interface:

รูปแบบ simple (writeblocks(block_num, buf)): เขียนบล็อกทั้งหมดเริ่มต้นที่ block index block_num len(buf) ต้องเป็นจำนวนคูณของขนาดบล็อกของแฟลช แต่ละบล็อกที่ได้รับผลกระทบจะถูกลบโดยอัตโนมัติก่อนการเขียน

รูปแบบ extended (writeblocks(block_num, buf, offset)): เขียน len(buf) bytes -- ไม่จำเป็นต้องเป็นจำนวนเต็มบล็อก -- เริ่มต้นที่ byte offset ภายในบล็อก block_num len(buf) ไม่มีข้อจำกัดด้านการจัดแนว และ ไม่มีการลบโดยปริยาย -- ผู้เรียกต้องตรวจสอบให้แน่ใจว่าบล็อกที่ได้รับผลกระทบถูกลบแล้วผ่านการเรียก ioctl(6, block_num) ก่อนหน้านี้

raise OSError หากการลบหรือเขียนแฟลชที่อยู่เบื้องหลังล้มเหลว

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

จุดเข้า ioctl ของ vfs.AbstractBlockDev มาตรฐาน ดู vfs.AbstractBlockDev.ioctl() สำหรับรายการ cmd values ทั้งหมด cmd=5 คืนค่าขนาด flash block เป็น bytes; cmd=6 ลบบล็อกที่มี index arg