คลาส Flash -- การเข้าถึงพื้นที่จัดเก็บข้อมูลแฟลชในตัว¶
คลาส Flash ให้การเข้าถึงระดับบล็อกโดยตรงไปยังชิปแฟลช QSPI ภายนอกของ RP2040 ไดรเวอร์นี้ใช้งานอินเทอร์เฟซ vfs.AbstractBlockDev เพื่อให้สามารถส่งต่อไปยัง vfs.mount() สำหรับการกำหนดค่าระบบไฟล์แบบกำหนดเอง
สคริปต์ส่วนใหญ่จัดเก็บข้อมูลผ่านระบบไฟล์ที่เมานต์อัตโนมัติที่ / และไม่เคยสร้าง Flash โดยตรง สร้างอินสแตนซ์ด้วยตนเองเมื่อต้องการ:
เมานต์ระบบไฟล์ที่ไม่ใช่ค่าเริ่มต้น (เช่น ห่อด้วย
vfs.VfsFat) บนพาร์ติชันแบบกำหนดเองอ่านหรือเขียนบริเวณเฟิร์มแวร์หรือบล็อกข้อมูลโรงงานที่ระบบไฟล์ไม่ได้เป็นเจ้าของ
ใช้งานรูปแบบพื้นที่จัดเก็บข้อมูลบนแฟลชแบบกำหนดเองที่ข้ามชั้นระบบไฟล์
ตัวสร้าง¶
- class rp2.Flash Flash¶
คืนค่าอ็อบเจกต์บล็อกดีไวซ์
Flashแบบซิงเกิลตันที่สนับสนุนโดยชิปแฟลช QSPI ของ RP2040 บล็อกแรกที่เปิดเผยคือบล็อกที่อยู่ถัดจากบริเวณเฟิร์มแวร์ทันที ดังนั้นผู้เรียกใช้จะเห็นเฉพาะบริเวณของชิปที่เหมาะสมกับระบบไฟล์เมธอด¶
- readblocks(block_num: int, buf: bytearray) None¶
- readblocks(block_num: int, buf: bytearray, offset: int) None
อ่านไบต์จากแฟลชลงใน
bufจุดเข้าบล็อกดีไวซ์vfs.AbstractBlockDevมาตรฐานที่ใช้โดยชั้นระบบไฟล์รูปแบบธรรมดา (
readblocks(block_num, buf)): อ่านบล็อกทั้งหมดเริ่มต้นที่ดัชนีบล็อกblock_numความยาวของlen(buf)ต้องเป็นจำนวนเท่าของขนาดบล็อกแฟลชรูปแบบขยาย (
readblocks(block_num, buf, offset)): อ่านlen(buf)ไบต์ -- ไม่จำเป็นต้องเป็นจำนวนเต็มของบล็อก -- เริ่มต้นที่ไบต์offsetภายในบล็อกblock_numใช้โดย littlefs และระบบไฟล์แบบระบุไบต์อื่นๆ
- writeblocks(block_num: int, buf: bytes) None¶
- writeblocks(block_num: int, buf: bytes, offset: int) None
เขียนไบต์จาก
bufไปยังแฟลช จุดเข้าบล็อกดีไวซ์vfs.AbstractBlockDevมาตรฐานที่ใช้โดยชั้นระบบไฟล์รูปแบบธรรมดา (
writeblocks(block_num, buf)): เขียนบล็อกทั้งหมดเริ่มต้นที่ดัชนีบล็อกblock_numความยาวของlen(buf)ต้องเป็นจำนวนเท่าของขนาดบล็อกแฟลช แต่ละบล็อกที่ได้รับผลกระทบจะถูกลบอัตโนมัติก่อนการเขียนรูปแบบขยาย (
writeblocks(block_num, buf, offset)): เขียนlen(buf)ไบต์ -- ไม่จำเป็นต้องเป็นจำนวนเต็มของบล็อก -- เริ่มต้นที่ไบต์offsetภายในบล็อกblock_numไม่มีการลบโดยนัย -- ผู้เรียกใช้ต้องตรวจสอบให้แน่ใจว่าบล็อกที่ได้รับผลกระทบถูกลบแล้วผ่านการเรียกioctl(6, block_num)ก่อนหน้า
- ioctl(cmd: int, arg: int) int | None¶
จุดเข้าควบคุม
vfs.AbstractBlockDevมาตรฐาน ถูกเรียกโดยชั้นระบบไฟล์ในเวลาเมานต์/ยกเลิกเมานต์และทุกการซิงก์ ค่าcmdที่รู้จัก:1-- เริ่มต้น คืนค่า0เมื่อสำเร็จ2-- ยกเลิกการเริ่มต้น คืนค่า0เมื่อสำเร็จ3-- ซิงก์การเขียนที่รอดำเนินการ คืนค่า04-- คืนค่าจำนวนบล็อกแฟลชที่มองเห็นได้โดยระบบไฟล์5-- คืนค่าขนาดบล็อกในหน่วยไบต์ (โดยทั่วไปคือขนาดเซกเตอร์แฟลช4096)6-- ลบบล็อกที่ดัชนีargจำเป็นต้องทำก่อนใช้รูปแบบwriteblocksแบบขยาย7-- คืนค่าว่าดีไวซ์รองรับคำสั่งลบบล็อกหรือไม่ (1บน RP2040)
ผู้เรียกใช้โดยตรงโดยปกติไม่ใช้เมธอดนี้ -- ไดรเวอร์ระบบไฟล์จะส่งต่อรหัสมาตรฐานโดยอัตโนมัติเมื่อ
Flashถูกเมานต์แล้ว