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