Littlefs_portenta_h7 ไลบรารี
สารบัญ
- หมายเหตุสำคัญสำหรับ portenta_h7
- ทำไมเราถึงต้องการไลบรารี Littlefs_portenta_h7
- คุณสมบัติ
- บอร์ดที่ได้รับการสนับสนุนในปัจจุบัน
- การเปลี่ยนแปลง
- ข้อกำหนดเบื้องต้น
- การติดตั้ง
- ใช้ Arduino Library Manager
- การติดตั้งด้วยตนเอง
- VS Code & Platformio
- แพทช์แพคเกจ
- 1. สำหรับบอร์ด Portenta_H7 โดยใช้ Arduino IDE ใน Linux
- ตัวอย่าง
- 1. littlefs_counting
- 2. littlefs_test
- ตัวอย่าง littlefs_test
- ตัวอย่างเอาต์พุตเทอร์มินัลดีบัก
- 1. littlefs_counting บน portenta_h7_m7
- 2. littlefs_test บน portenta_h7_m7
- การดีบัก
- การแก้ไขปัญหา
- ปัญหา
- สิ่งที่ต้องทำ
- เสร็จแล้ว
- ผลงานและขอบคุณ
- การบริจาค
- ใบอนุญาต
- ลิขสิทธิ์
หมายเหตุสำคัญสำหรับ portenta_h7
บอร์ด LittleFs ของบอร์ด Portenta_H7 ใหม่ที่ผ่านการทดสอบ OK ด้วย ไฟล์สูงสุด 8 ไฟล์ เท่านั้น ไฟล์ตั้งแต่ 9 ปีขึ้นไปไม่สามารถเขียนและ / หรืออ่านได้อย่างแปลกประหลาด นี่อาจเป็นข้อผิดพลาดใน ArduinoCore-mbed mbed_portenta core พฤติกรรมเดียวกันนั้นสังเกตได้จาก Core v2.0.0 ถึง v2.6.1
หากขนาด LittleFS ลดลงเหลือ 1024KB การทดสอบจะตกลงด้วย ไฟล์สูงสุด 4 ไฟล์ เท่านั้น
ระวังและตรวจสอบการอัปเดตต่อไป
ทำไมเราถึงต้องการไลบรารี Littlefs_portenta_h7
คุณสมบัติ
ห้องสมุดนี้เป็นเพียงเครื่องห่อหุ้ม LittleFS ที่เรียบง่ายเพื่ออำนวยความสะดวกในการใช้งาน LittleFs สำหรับ แฟลชออนบอ ร์
การเข้าถึงระบบไฟล์ใช้ APIs posix ปกติหรือ mbed filesystem apis
บอร์ดที่ได้รับการสนับสนุนในปัจจุบัน
- บอร์ด portenta_h7 เช่น portenta_h7 rev2 abx00042 ฯลฯ โดยใช้ Arduinocore-Mbed MBED_PORTENTA CORE
ข้อกำหนดเบื้องต้น
-
Arduino IDE 1.8.19+ สำหรับ Arduino -
ArduinoCore-mbed mbed_portenta core 3.4.1+ สำหรับบอร์ด Arduino Portenta_H7 เช่น Portenta_H7 REV2 ABX00042 ฯลฯ
การติดตั้ง
ใช้ Arduino Library Manager
วิธีที่ดีที่สุดและง่ายที่สุดคือใช้ Arduino Library Manager ค้นหา LittleFS_PORTENTA_H7 จากนั้นเลือก / ติดตั้งเวอร์ชันล่าสุด คุณยังสามารถใช้ลิงค์นี้สำหรับคำแนะนำโดยละเอียดเพิ่มเติม
การติดตั้งด้วยตนเอง
อีกวิธีในการติดตั้งคือ:
- นำทางไปยังหน้า littlefs_portenta_h7
- ดาวน์โหลดรุ่นล่าสุด
LittleFS_Portenta_H7-main.zip - แยกไฟล์ zip ไปยังไดเรกทอรี
LittleFS_Portenta_H7-main - คัดลอกโฟลเดอร์
LittleFS_Portenta_H7-main ไปยังไดเรกทอรี Arduino Libraries 'เช่น ~/Arduino/libraries/
VS Code & Platformio
- ติดตั้งรหัส VS
- ติดตั้ง platformio
- ติดตั้งไลบรารี LittleFS_PORTENTA_H7 โดยใช้ Library Manager ค้นหา littlefs_portenta_h7 ในห้องสมุดของผู้แต่ง Platform.io
- ใช้ไฟล์ platformio.ini รวมจากตัวอย่างเพื่อให้แน่ใจว่าไลบรารีที่ขึ้นอยู่กับทั้งหมดจะติดตั้งโดยอัตโนมัติ กรุณาเยี่ยมชมเอกสารสำหรับตัวเลือกและตัวอย่างอื่น ๆ ที่ไฟล์กำหนดค่าโครงการ
แพทช์แพคเกจ
1. สำหรับบอร์ด Portenta_H7 โดยใช้ Arduino IDE ใน Linux
เพื่อให้สามารถอัพโหลดเฟิร์มแวร์ไปยัง portenta_h7 โดยใช้ Arduino ide ใน Linux (Ubuntu ฯลฯ ) คุณต้องคัดลอกไฟล์ portenta_post_install.sh ลงในไดเรกทอรี mbed_portenta (~/.ARDUINO15/PORKAGES/Arduino/Hardware
จากนั้นเรียกใช้คำสั่งต่อไปนี้โดยใช้ sudo
$ cd ~/.arduino15/packages/arduino/hardware/mbed_portenta/3.4.1
$ chmod 755 portenta_post_install.sh
$ sudo ./portenta_post_install.sh
สิ่งนี้จะสร้างไฟล์ /etc/udev/rules.d/49-portenta_h7.rules ดังนี้:
# Portenta H7 bootloader mode UDEV rules
SUBSYSTEMS=="usb", ATTRS{idVendor}=="2341", ATTRS{idProduct}=="035b", GROUP="plugdev", MODE="0666"
สมมติว่า Arduinocore-Mbed Core เวอร์ชันคือ 3.4.1 ตอนนี้จะต้องคัดลอกไฟล์เดียวลงในไดเรกทอรี:
-
~/.arduino15/packages/arduino/hardware/mbed_portenta/3.4.1/portenta_post_install.sh
เมื่อใดก็ตามที่ติดตั้งเวอร์ชันใหม่อย่าลืมคัดลอกไฟล์นี้ลงในไดเรกทอรีเวอร์ชันใหม่ ตัวอย่างเช่นเวอร์ชันใหม่คือ x.yy.zz
ไฟล์นี้จะต้องคัดลอกลงในไดเรกทอรี:
-
~/.arduino15/packages/arduino/hardware/mbed_portenta/x.yy.zz/portenta_post_install.sh
ตัวอย่าง
- littlefs_counting
- littlefs_test
ตัวอย่าง littlefs_test
| # กำหนด lfs_mbed_portenta_h7_version_min_target " littlefs_portenta_h7 v1.2.0 " |
| # กำหนด LFS_MBED_PORTENTA_H7_VERSION_MIN 1002000 |
| |
| # กำหนด _lfs_loglevel_ 1 |
| |
| # กำหนด force_reformat false |
| |
| # รวม < littlefs_portenta_h7.h > |
| |
| littlefs_mbed *myfs; |
| |
| uint32_t file_size_kb = 64 ; |
| |
| เป็นโมฆะ readcharsFromFile ( const char * path) |
| - |
| อนุกรม พิมพ์ ( " readcharsFromFile: " ); อนุกรม พิมพ์ (เส้นทาง); |
| |
| ไฟล์ *file = fopen (path, " r " ); |
| |
| ถ้า (ไฟล์) |
| - |
| อนุกรม println ( " => เปิดตกลง " ); |
| - |
| อื่น |
| - |
| อนุกรม println ( " => เปิดล้มเหลว " ); |
| กลับ ; |
| - |
| |
| ถ่าน C; |
| |
| ในขณะที่ ( จริง ) |
| - |
| c = fgetc (ไฟล์); |
| |
| ถ้า ( feof (ไฟล์)) |
| - |
| หยุดพัก ; |
| - |
| อื่น |
| อนุกรม พิมพ์ (C); |
| - |
| |
| fclose (ไฟล์); |
| - |
| |
| เป็นโมฆะ readfile ( const char * path) |
| - |
| อนุกรม พิมพ์ ( " การอ่านไฟล์: " ); อนุกรม พิมพ์ (เส้นทาง); |
| |
| ไฟล์ *file = fopen (path, " r " ); |
| |
| ถ้า (ไฟล์) |
| - |
| อนุกรม println ( " => เปิดตกลง " ); |
| - |
| อื่น |
| - |
| อนุกรม println ( " => เปิดล้มเหลว " ); |
| กลับ ; |
| - |
| |
| ถ่าน C; |
| uint32_t numread = 1 ; |
| |
| ในขณะที่ (numread) |
| - |
| numread = fread (( uint8_t *) & c, sizeof (c), 1 , ไฟล์); |
| |
| if (numread) |
| อนุกรม พิมพ์ (C); |
| - |
| |
| fclose (ไฟล์); |
| - |
| |
| เป็นโมฆะ writefile ( const char * path, const char * ข้อความ, size_t messagesize) |
| - |
| อนุกรม พิมพ์ ( " การเขียนไฟล์: " ); อนุกรม พิมพ์ (เส้นทาง); |
| |
| ไฟล์ *file = fopen (path, " w " ); |
| |
| ถ้า (ไฟล์) |
| - |
| อนุกรม println ( " => เปิดตกลง " ); |
| - |
| อื่น |
| - |
| อนุกรม println ( " => เปิดล้มเหลว " ); |
| กลับ ; |
| - |
| |
| ถ้า ( fwrite (( uint8_t *) ข้อความ, 1 , messagesize, ไฟล์)) |
| - |
| อนุกรม println ( " * เขียนตกลง " ); |
| - |
| อื่น |
| - |
| อนุกรม println ( " * การเขียนล้มเหลว " ); |
| - |
| |
| fclose (ไฟล์); |
| - |
| |
| เป็นโมฆะ AppendFile ( const char * path, const char * ข้อความ, size_t messagesize) |
| - |
| อนุกรม พิมพ์ ( " ต่อท้ายไฟล์: " ); อนุกรม พิมพ์ (เส้นทาง); |
| |
| ไฟล์ *file = fopen (path, " a " ); |
| |
| ถ้า (ไฟล์) |
| - |
| อนุกรม println ( " => เปิดตกลง " ); |
| - |
| อื่น |
| - |
| อนุกรม println ( " => เปิดล้มเหลว " ); |
| กลับ ; |
| - |
| |
| ถ้า ( fwrite (( uint8_t *) ข้อความ, 1 , messagesize, ไฟล์)) |
| - |
| อนุกรม println ( " * ผนวกตกลง " ); |
| - |
| อื่น |
| - |
| อนุกรม println ( " * ต่อท้ายล้มเหลว " ); |
| - |
| |
| fclose (ไฟล์); |
| - |
| |
| เป็นโมฆะ deletefile ( const char * path) |
| - |
| อนุกรม พิมพ์ ( " การลบไฟล์: " ); อนุกรม พิมพ์ (เส้นทาง); |
| |
| ถ้า ( ลบ (พา ธ ) == 0 ) |
| - |
| อนุกรม println ( " => ตกลง " ); |
| - |
| อื่น |
| - |
| อนุกรม println ( " => ล้มเหลว " ); |
| กลับ ; |
| - |
| - |
| |
| เป็นโมฆะ RenameFile ( const char * path1, const char * path2) |
| - |
| อนุกรม พิมพ์ ( " การเปลี่ยนชื่อไฟล์: " ); อนุกรม พิมพ์ (path1); |
| อนุกรม พิมพ์ ( " ถึง: " ); อนุกรม พิมพ์ (path2); |
| |
| if ( เปลี่ยนชื่อ (path1, path2) == 0 ) |
| - |
| อนุกรม println ( " => ตกลง " ); |
| - |
| อื่น |
| - |
| อนุกรม println ( " => ล้มเหลว " ); |
| กลับ ; |
| - |
| - |
| |
| เป็นโมฆะ testfileio ( const char * path) |
| - |
| อนุกรม พิมพ์ ( " ไฟล์ทดสอบ I/O ด้วย: " ); อนุกรม พิมพ์ (เส้นทาง); |
| |
| # กำหนด buff_size 512 |
| |
| uint8_t buf [buff_size] ; |
| |
| ไฟล์ *file = fopen (path, " w " ); |
| |
| ถ้า (ไฟล์) |
| - |
| อนุกรม println ( " => เปิดตกลง " ); |
| - |
| อื่น |
| - |
| อนุกรม println ( " => เปิดล้มเหลว " ); |
| กลับ ; |
| - |
| |
| size_t i; |
| อนุกรม println ( " - การเขียน " ); |
| |
| uint32_t start = millis (); |
| |
| size_t result = 0 ; |
| |
| // เขียนไฟล์ด้วย file_size_kb |
| สำหรับ (i = 0 ; i <file_size_kb * 2 ; i ++) |
| - |
| result = fwrite (buf, buff_size, 1 , ไฟล์); |
| |
| ถ้า (ผลลัพธ์! = 1 ) |
| - |
| อนุกรม พิมพ์ ( " ผลการเขียน = " ); อนุกรม println (ผลลัพธ์); |
| อนุกรม พิมพ์ ( " ข้อผิดพลาดในการเขียน, i = " ); อนุกรม println (i); |
| |
| หยุดพัก ; |
| - |
| - |
| |
| อนุกรม println ( " " ); |
| uint32_t end = millis () - เริ่ม; |
| |
| อนุกรม พิมพ์ (I / 2 ); |
| อนุกรม พิมพ์ ( " kbytes เขียนใน (ms) " ); |
| อนุกรม println (สิ้นสุด); |
| |
| fclose (ไฟล์); |
| |
| printline (); |
| |
| //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
| |
| file = fopen (path, " r " ); |
| |
| เริ่มต้น = มิลลิส (); |
| สิ้นสุด = เริ่ม; |
| i = 0 ; |
| |
| ถ้า (ไฟล์) |
| - |
| เริ่มต้น = มิลลิส (); |
| อนุกรม println ( " - การอ่าน " ); |
| |
| ผลลัพธ์ = 0 ; |
| |
| fseek (ไฟล์, 0 , seek_set); |
| |
| // อ่านไฟล์ด้วย file_size_kb |
| สำหรับ (i = 0 ; i <file_size_kb * 2 ; i ++) |
| - |
| result = fread (buf, buff_size, 1 , ไฟล์); |
| |
| ถ้า (ผลลัพธ์! = 1 ) |
| - |
| อนุกรม พิมพ์ ( " อ่านผลลัพธ์ = " ); อนุกรม println (ผลลัพธ์); |
| อนุกรม พิมพ์ ( " อ่านข้อผิดพลาด, i = " ); อนุกรม println (i); |
| |
| หยุดพัก ; |
| - |
| - |
| |
| อนุกรม println ( " " ); |
| end = millis () - เริ่ม; |
| |
| อนุกรม พิมพ์ ((i * buff_size) / 1024 ); |
| อนุกรม พิมพ์ ( " kbytes อ่านใน (ms) " ); |
| อนุกรม println (สิ้นสุด); |
| |
| fclose (ไฟล์); |
| - |
| อื่น |
| - |
| อนุกรม println ( " - ล้มเหลวในการเปิดไฟล์สำหรับการอ่าน " ); |
| - |
| - |
| |
| เป็นโมฆะ printline () |
| - |
| อนุกรม println ( " ======================================================== " ); |
| - |
| |
| การตั้ง ค่าโมฆะ () |
| - |
| อนุกรม เริ่มต้น ( 115200 ); |
| ในขณะที่ (! อนุกรม) |
| |
| ความล่าช้า ( 1,000 ); |
| |
| อนุกรม พิมพ์ ( " n เริ่มต้น Littlefs_test บน " ); อนุกรม println (board_name); |
| อนุกรม println (lfs_mbed_portenta_h7_version); |
| |
| # ถ้า กำหนด (LFS_MBED_PORTENTA_H7_VERSION_MIN) |
| if (lfs_mbed_portenta_h7_version_int <lfs_mbed_portenta_h7_version_min) |
| - |
| อนุกรม พิมพ์ ( " คำเตือนต้องใช้ตัวอย่างนี้ในเวอร์ชันเท่ากันหรือต่ำกว่า: " ); |
| อนุกรม println (lfs_mbed_portenta_h7_version_min_target); |
| - |
| # endif |
| |
| myfs = ใหม่ littlefs_mbed (); |
| |
| if (! myfs-> init ()) |
| - |
| อนุกรม println ( " Littlefs Mount ล้มเหลว " ); |
| |
| กลับ ; |
| - |
| |
| char filename1 [] = mbed_littlefs_file_prefix " /hello1.txt " ; |
| char filename2 [] = mbed_littlefs_file_prefix " /hello2.txt " ; |
| |
| ข้อความ ถ่าน [] = " สวัสดีจาก " board_name " n " ; |
| |
| printline (); |
| writefile (filename1, ข้อความ, sizeof (ข้อความ)); |
| printline (); |
| ReadFile (Filename1); |
| printline (); |
| |
| ภาคผนวก (FileName1, ข้อความ, sizeof (ข้อความ)); |
| printline (); |
| ReadFile (Filename1); |
| printline (); |
| |
| RenameFile (filename1, filename2); |
| printline (); |
| readcharsFromFile (filename2); |
| printline (); |
| |
| DELETEFILE (FILENAME2); |
| printline (); |
| readfile (filename2); |
| printline (); |
| |
| TestFileio (Filename1); |
| printline (); |
| testfileio (filename2); |
| printline (); |
| DELETEFILE (FILENAME1); |
| printline (); |
| DELETEFILE (FILENAME2); |
| printline (); |
| |
| อนุกรม println ( " n ทดสอบเสร็จสมบูรณ์ " ); |
| - |
| |
| เป็นโมฆะ ลูป () |
| - |
| - |
ตัวอย่างเอาต์พุตเทอร์มินัลดีบัก
1. littlefs_counting บน portenta_h7_m7
ต่อไปนี้เป็นเอาต์พุตเทอร์มินัลตัวอย่างเมื่อเรียกใช้ตัวอย่าง littlefs_counting บน mbed portenta_h7_m7
1.1 วิ่งครั้งแรก
Start LittleFS_Counting on PORTENTA_H7_M7
LittleFS_Portenta_H7 v1 .2.0
[LFS] Flash Size : (KB) = 2048.00
[LFS] FlashIAP Start Address: = 0x0x8080000
[LFS] LittleFS size (KB) = 1536.00
[LFS] LittleFS Mount OK
Times have been run = 1
=> Open to write OK
1.2 หลังจากรีเซ็ต
Start LittleFS_Counting on PORTENTA_H7_M7
LittleFS_Portenta_H7 v1 .2.0
[LFS] Flash Size : (KB) = 2048.00
[LFS] FlashIAP Start Address: = 0x0x8080000
[LFS] LittleFS size (KB) = 1536.00
[LFS] LittleFS Mount OK
=> Open to read OK
Times have been run = 2
=> Open to write OK
2. littlefs_test บน portenta_h7_m7
ต่อไปนี้เป็นเอาต์พุตเทอร์มินัลตัวอย่างเมื่อเรียกใช้ตัวอย่าง littlefs_test บน mbed portenta_h7_m7
Start LittleFS_Test on PORTENTA_H7_M7
LittleFS_Portenta_H7 v1 .2.0
[LFS] Flash Size : (KB) = 2048.00
[LFS] FlashIAP Start Address: = 0x0x8080000
[LFS] LittleFS size (KB) = 1536.00
[LFS] LittleFS Mount OK
====================================================
Writing file: /littlefs/hello1.txt => Open OK
* Writing OK
====================================================
Reading file: /littlefs/hello1.txt => Open OK
Hello from PORTENTA_H7_M7
====================================================
Appending file: /littlefs/hello1.txt => Open OK
* Appending OK
====================================================
Reading file: /littlefs/hello1.txt => Open OK
Hello from PORTENTA_H7_M7
Hello from PORTENTA_H7_M7
====================================================
Renaming file: /littlefs/hello1.txt to: /littlefs/hello2.txt => OK
====================================================
readCharsFromFile: /littlefs/hello2.txt => Open OK
Hello from PORTENTA_H7_M7
Hello from PORTENTA_H7_M7
====================================================
Deleting file: /littlefs/hello2.txt => OK
====================================================
Reading file: /littlefs/hello2.txt => Open Failed
====================================================
Testing file I/O with: /littlefs/hello1.txt => Open OK
- writing
64 Kbytes written in (ms) 1077
====================================================
- reading
384 Kbytes read in (ms) 0
====================================================
Testing file I/O with: /littlefs/hello2.txt => Open OK
- writing
64 Kbytes written in (ms) 1003
====================================================
- reading
64 Kbytes read in (ms) 0
====================================================
Deleting file: /littlefs/hello1.txt => OK
====================================================
Deleting file: /littlefs/hello2.txt => OK
====================================================
การดีบัก
การดีบักเปิดใช้งานโดยค่าเริ่มต้นในอนุกรม
นอกจากนี้คุณยังสามารถเปลี่ยนระดับการดีบัก ( LFS_Loglevel ) จาก 0 เป็น 4
# define LFS_DEBUG_OUTPUT Serial
// These define's must be placed at the beginning before #include "LittleFS_Portenta_H7.h"
// _LFS_LOGLEVEL_ from 0 to 4
# define _LFS_LOGLEVEL_ 0
การแก้ไขปัญหา
หากคุณได้รับข้อผิดพลาดในการรวบรวมบ่อยกว่านั้นคุณอาจต้องติดตั้ง Core รุ่นใหม่สำหรับบอร์ด Arduino
บางครั้งไลบรารีจะทำงานได้ก็ต่อเมื่อคุณอัปเดตแกนบอร์ดเป็นเวอร์ชันล่าสุดเพราะฉันใช้ฟังก์ชั่นที่เพิ่มขึ้นใหม่
ปัญหา
ส่งปัญหาไปยัง: ปัญหา littlefs_portenta_h7
สิ่งที่ต้องทำ
- ค้นหาข้อผิดพลาดและการปรับปรุง
เสร็จแล้ว
- wrapper littlefs พื้นฐานสำหรับ portenta_h7 โดยใช้ Arduinocore-mbed mbed_portenta core
- เพิ่มสตริงเวอร์ชัน
- เพิ่มสารบัญ
- ลดขนาด
LittleFS เป็น 1024KB - แก้ไขข้อผิดพลาดของ Linker
multiple-definitions - เพิ่ม Astyle โดยใช้สไตล์
allman restyle ห้องสมุด
ผลงานและขอบคุณ
ขอบคุณมากสำหรับทุกคนสำหรับการรายงานข้อผิดพลาดคุณลักษณะใหม่ที่แนะนำการทดสอบและมีส่วนร่วมในการพัฒนาห้องสมุดนี้
การบริจาค
หากคุณต้องการมีส่วนร่วมในโครงการนี้:
- รายงานข้อบกพร่องและข้อผิดพลาด
- ขอการปรับปรุง
- สร้างปัญหาและดึงคำขอ
- บอกคนอื่นเกี่ยวกับห้องสมุดนี้
ใบอนุญาต
- ห้องสมุดได้รับอนุญาตภายใต้ GPLV3
ลิขสิทธิ์
ลิขสิทธิ์ (c) 2021- Khoi Hoang