คลาส Flash -- เข้าถึงพื้นที่จัดเก็บแฟลชในตัว¶
คลาส Flash ช่วยให้เข้าถึงอุปกรณ์แฟลชหลักโดยตรงบน OpenMV Cam ที่ใช้ STM32
ในกรณีส่วนใหญ่ หากต้องการจัดเก็บข้อมูลถาวรบนอุปกรณ์ คุณจะต้องการใช้การสรุปนามธรรมระดับสูงกว่า เช่น ระบบไฟล์ผ่าน Python's standard file API แต่อินเทอร์เฟซนี้มีประโยชน์สำหรับ ปรับแต่งการกำหนดค่าระบบไฟล์ หรือใช้งานระบบจัดเก็บข้อมูลระดับต่ำสำหรับแอปพลิเคชันของคุณ
Note
OpenMV Cam H7 Plus, Pure Thermal และ N6 ใช้ชิปแฟลช SPI/QSPI/XSPI ภายนอกสำหรับที่จัดเก็บหลัก ส่วน OpenMV Cam อื่นๆ ที่ใช้ STM32 ใช้แฟลชภายในที่อยู่ใน MCU อินเทอร์เฟซ Python เหมือนกันทั้งสองกรณี
คอนสตรักเตอร์¶
- class pyb.Flash¶
- class pyb.Flash(*, start: int = -1, len: int = -1)
สร้างอุปกรณ์บล็อกที่เข้ากันได้กับ
vfs.AbstractBlockDevสำหรับแฟลชบนบอร์ด มีสองรูปแบบ:Flash()(ไม่มีอาร์กิวเมนต์): คืนค่าออบเจ็กต์ singleton แบบเดิมที่เปิดเผยแฟลชทั้งหมดโดยมีตารางพาร์ติชันเสมือนแนบไว้ข้างหน้า ข้อมูลแฟลชจริงเริ่มต้นที่บล็อก0x100รูปแบบนี้เลิกใช้แล้ว และจะถูกลบออกในรุ่น MicroPython ในอนาคตFlash(start=..., len=...): คืนค่าอุปกรณ์บล็อกใหม่ที่เข้าถึงแฟลชโดยเริ่มจากออฟเซ็ตไบต์start(ค่าเริ่มต้น0) เป็นระยะเวลาlenไบต์ (ค่าเริ่มต้น: ส่วนที่เหลือของอุปกรณ์) ทั้งสองค่าต้องเป็นทวีคูณของขนาดบล็อกพื้นฐาน (โดยทั่วไป 512 ไบต์สำหรับแฟลชภายใน ส่วนชิ้น SPI/QSPI/XSPI ภายนอกใช้ขนาดเซกเตอร์การลบที่ใหญ่กว่า)
เมธอด¶
- readblocks(block_num: int, buf: bytearray) None¶
- readblocks(block_num: int, buf: bytearray, offset: int) None
อ่านไบต์จากแฟลชลงใน
bufมีสองโอเวอร์โหลดที่เปิดเผยอินเทอร์เฟซแบบง่ายและแบบขยาย:รูปแบบง่าย (
readblocks(block_num, buf)): อ่านบล็อกทั้งหมดโดยเริ่มจากดัชนีบล็อกblock_numlen(buf)ต้องเป็นทวีคูณของขนาดบล็อกแฟลชรูปแบบขยาย (
readblocks(block_num, buf, offset)): อ่านlen(buf)ไบต์ -- ไม่จำเป็นต้องเป็นจำนวนบล็อกทั้งหมด -- โดยเริ่มจากไบต์offsetภายในบล็อกblock_numlen(buf)ไม่มีข้อจำกัดด้านการจัดแนว รองรับเฉพาะออบเจ็กต์ที่สร้างด้วยอาร์กิวเมนต์start/lenที่ชัดเจน ไม่ใช่ singleton ที่เลิกใช้
- writeblocks(block_num: int, buf: bytes | bytearray) None¶
- writeblocks(block_num: int, buf: bytes | bytearray, offset: int) None
เขียนไบต์จาก
bufไปยังแฟลช มีสองโอเวอร์โหลดที่เปิดเผยอินเทอร์เฟซแบบง่ายและแบบขยาย:รูปแบบง่าย (
writeblocks(block_num, buf)): เขียนบล็อกทั้งหมดโดยเริ่มจากดัชนีบล็อกblock_numlen(buf)ต้องเป็นทวีคูณของขนาดบล็อกแฟลช แต่ละบล็อกที่ได้รับผลกระทบจะถูกลบโดยอัตโนมัติก่อนการเขียนรูปแบบขยาย (
writeblocks(block_num, buf, offset)): เขียนlen(buf)ไบต์ -- ไม่จำเป็นต้องเป็นจำนวนบล็อกทั้งหมด -- โดยเริ่มจากไบต์offsetภายในบล็อกblock_numlen(buf)ไม่มีข้อจำกัดด้านการจัดแนว และ ไม่มีการลบโดยปริยาย -- ผู้เรียกต้องตรวจสอบให้แน่ใจว่าบล็อกที่ได้รับผลกระทบถูกลบแล้วผ่านการเรียกioctl(6, block_num)ก่อนหน้า รองรับเฉพาะออบเจ็กต์ที่สร้างด้วยอาร์กิวเมนต์start/lenที่ชัดเจน
- ioctl(cmd: int, arg: int) int | None¶
จุดเข้า ioctl มาตรฐานของ
vfs.AbstractBlockDevดูvfs.AbstractBlockDev.ioctl()สำหรับรายการค่าcmdทั้งหมดcmd=5คืนค่าขนาดบล็อกแฟลชในหน่วยไบต์cmd=6ลบบล็อกที่มีดัชนีarg