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 จากแฟลชลงใน
bufoverload สองแบบเปิดเผย simple interface และ extended interface:รูปแบบ simple (
readblocks(block_num, buf)): อ่านบล็อกทั้งหมดเริ่มต้นที่ block indexblock_numlen(buf)ต้องเป็นจำนวนคูณของขนาดบล็อกของแฟลชรูปแบบ extended (
readblocks(block_num, buf, offset)): อ่านlen(buf)bytes -- ไม่จำเป็นต้องเป็นจำนวนเต็มบล็อก -- เริ่มต้นที่ byteoffsetภายในบล็อกblock_numlen(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 indexblock_numlen(buf)ต้องเป็นจำนวนคูณของขนาดบล็อกของแฟลช แต่ละบล็อกที่ได้รับผลกระทบจะถูกลบโดยอัตโนมัติก่อนการเขียนรูปแบบ extended (
writeblocks(block_num, buf, offset)): เขียนlen(buf)bytes -- ไม่จำเป็นต้องเป็นจำนวนเต็มบล็อก -- เริ่มต้นที่ byteoffsetภายในบล็อกblock_numlen(buf)ไม่มีข้อจำกัดด้านการจัดแนว และ ไม่มีการลบโดยปริยาย -- ผู้เรียกต้องตรวจสอบให้แน่ใจว่าบล็อกที่ได้รับผลกระทบถูกลบแล้วผ่านการเรียกioctl(6, block_num)ก่อนหน้านี้raise
OSErrorหากการลบหรือเขียนแฟลชที่อยู่เบื้องหลังล้มเหลว
- ioctl(cmd: int, arg: int) int | None¶
จุดเข้า ioctl ของ
vfs.AbstractBlockDevมาตรฐาน ดูvfs.AbstractBlockDev.ioctl()สำหรับรายการcmdvalues ทั้งหมดcmd=5คืนค่าขนาด flash block เป็น bytes;cmd=6ลบบล็อกที่มี indexarg