UTFS ระบบไฟล์ Lightweight สำหรับไมโครคอนโทรลเลอร์

CLI Systems ได้เปิดตัว UTFS (μTFS) ซึ่งเป็นระบบจัดเก็บข้อมูลสำหรับระบบสมองกลฝังตัวที่ออกแบบมาให้เรียบง่ายและน้ำหนักเบา (Lightweight) เหมาะสำหรับไมโครคอนโทรลเลอร์ (MCU) ขนาดเล็ก ต่างจากระบบไฟล์ทั่วไปอย่าง FAT32 หรือ EXT4 รวมถึงระบบไฟล์ขนาดเล็กอย่าง LittleFS และ SPIFFS ที่นิยมใช้กับบอร์ดอย่าง ESP32 โดย UTFS มีความเรียบง่ายกว่ามาก ไม่ใช้หน่วยความจำแบบไดนามิก (zero-allocation) และหลีกเลี่ยงฟีเจอร์ที่ซับซ้อน เช่น Wear Leveling ทำให้เหมาะกับอุปกรณ์ที่มีทรัพยากรจำกัด

UTFS ถูกออกแบบมาสำหรับหน่วยความจำแบบเข้าถึงได้ตามไบต์ เช่น EEPROM, Flash ภายใน MCU หรือหน่วยความจำ SPI/I²C Flash ภายนอก โดยช่วยให้เฟิร์มแวร์แบบ Bare-Metal สามารถจัดเก็บข้อมูลในรูปแบบบล็อกข้อมูลที่มีชื่อ (“ไฟล์”) เรียงต่อกันในหน่วยความจำได้ แต่ละไฟล์จะมีส่วนหัว (Header) ขนาดคงที่ 24 ไบต์สำหรับเก็บข้อมูลเมตา เช่น ตัวระบุไฟล์ ขนาดไฟล์ และลายเซ็นที่กำหนดโดยแอปพลิเคชัน

μTFS lightweight zero allocation file system

คุณสมบัติและสเปกของ UTFS

  • Footprint – ใช้ Header ขนาดคงที่เพียง 24 ไบต์ต่อไฟล์ และไม่ใช้ Heap (ไม่ต้องใช้ malloc)
  • รูปแบบข้อมูล (Format) – ใช้โครงสร้างแบบลำดับต่อเนื่อง (Sequential Layout) คล้าย TAR และรองรับการขยายในอนาคต โดยสามารถเพิ่มไฟล์ใหม่ได้โดยไม่กระทบกับโครงสร้างหน่วยความจำเดิม
  • ไม่ผูกกับสื่อจัดเก็บข้อมูล (Storage Agnostic) – ต้องพอร์ตเพียง 2 ฟังก์ชันเพื่อเชื่อมต่อกับฮาร์ดแวร์ ได้แก่ sys_read และ sys_write
  • ความน่าเชื่อถือ – ใช้ลายเซ็นที่กำหนดโดยผู้พัฒนา (เช่น 0xABCD) เพื่อตรวจสอบความเสียหายของข้อมูลหรือพื้นที่จัดเก็บที่ยังไม่ได้เริ่มต้นใช้งาน ระหว่างการเรียก utfs_load()
  • สัญญาอนุญาต (License) – เป็นโอเพนซอร์สภายใต้สัญญาอนุญาต MIT License ไม่มีข้อจำกัดจากฟอร์แมตเฉพาะของผู้ผลิตรายใด

โดยทั่วไป โปรเจกต์ไมโครคอนโทรลเลอร์จำนวนมากมักเก็บข้อมูลทั้งหมดไว้ในโครงสร้างข้อมูล (Structure) ขนาดใหญ่เพียงชุดเดียวที่ตำแหน่งคงที่ใน EEPROM วิธีนี้เรียบง่าย แต่จะเกิดปัญหาเมื่อมีการเปลี่ยนแปลงรูปแบบข้อมูลในอนาคต เพราะข้อมูลเก่าอาจไม่สามารถใช้งานร่วมกับเฟิร์มแวร์เวอร์ชันใหม่ได้ ในทางกลับกันระบบไฟล์เต็มรูปแบบอย่าง FatFs หรือ LittleFS มีฟีเจอร์ขั้นสูงมากมาย แต่ต้องใช้หน่วยความจำมากกว่าและมีภาระการทำงานสูงสำหรับ MCU ขนาดเล็ก

UTFS automatically adjusts data positions when file sizes change across firmware revisions Left and uses a custom base address to safely coexist with legacy data Right
UTFS ปรับตำแหน่งข้อมูลอัตโนมัติเมื่อขนาดไฟล์เปลี่ยนระหว่างเวอร์ชันเฟิร์มแวร์ (ซ้าย) และรองรับ Base Address แบบกำหนดเองเพื่อใช้งานร่วมกับข้อมูลเดิมได้อย่างปลอดภัย (ขวา)

UTFS จึงถูกออกแบบให้อยู่กึ่งกลางระหว่างสองแนวทางนี้ โดยสามารถปรับตำแหน่งการจัดเก็บข้อมูลอัตโนมัติเมื่อขนาดไฟล์เปลี่ยนแปลงระหว่างเวอร์ชันของเฟิร์มแวร์ และยังรองรับการกำหนด Base Address เองเพื่อให้สามารถใช้งานร่วมกับข้อมูลเดิมที่มีอยู่ในหน่วยความจำได้อย่างปลอดภัย แต่ UTFS ไม่มีฟีเจอร์ขั้นสูง เช่น Wear Leveling หรือการเขียนข้อมูลแบบ Atomic ดังนั้นหากไฟดับหรือรีเซ็ตระบบระหว่างการบันทึกข้อมูล อาจเกิดการเขียนข้อมูลไม่สมบูรณ์ได้ เช่นเดียวกับการเขียน EEPROM แบบทั่วไป จุดเด่นของ UTFS คือการจัดเก็บข้อมูลเป็นบล็อกแยกตามชื่อไฟล์ ทำให้การจัดการและอัปเดตข้อมูลในระบบขนาดเล็กทำได้ง่ายขึ้น โดยไม่ต้องแบกรับความซับซ้อนและการใช้ทรัพยากรของระบบไฟล์เต็มรูปแบบ

ข้อมูลเพิ่มเติม รวมถึงมีตัวอย่างการใช้งานกับบอร์ดยอดนิยม เช่น Arduino Uno (ATmega328) ที่ใช้ EEPROM ภายใน และ Microchip SAMD20 ที่ใช้หน่วยความจำ Flash ภายใน สามารถดูได้จาก CLI Systems page, โดยการนำ UTFS ไปใช้กับฮาร์ดแวร์อื่น ๆ จำเป็นต้องเชื่อมต่อ API ของ UTFS เข้ากับฟังก์ชันอ่านและเขียนข้อมูลของอุปกรณ์เท่านั้น ทั้งซอร์สโค้ดมาตรฐาน C99 ตัวอย่างการใช้งาน และเอกสารประกอบทั้งหมดเปิดให้ดาวน์โหลดผ่าน GitHub repository ของ CLI Systems เพื่อนำไปผสานรวมกับโปรเจกต์ต่าง ๆ ได้ทันที

UTFS Hello World Program
ตัวอย่างโปรแกรม Hello World สำหรับ UTFS

แปลจากบทความ : UTFS is a lightweight, zero-allocation file system for embedded devices

Subscribe
Notify of
guest
0 Comments
Oldest
Newest Most Voted
โฆษณา