Jesfs - ระบบไฟล์อนุกรมฝังตัวของ Jo
สำหรับมาตรฐาน (อนุกรม) Nor-Flash
แค่คิดถึงสิ่งที่ง่ายมากเช่นข้อมูลภาษา: บนอุปกรณ์ฝังตัวที่“ เล็กมาก” (ไม่ใช่สิ่งที่“ ใหญ่” เหมือน Linux ที่ฝังตัว แต่สิ่งที่สามารถทำงานกับแบตเตอรี่ขนาดเล็กเป็นเวลาหลายปี): มันรวมกันโดยทั่วไป“ ที่ไหนสักแห่งในรหัส”
เปลี่ยนยาก! แต่ถ้าข้อมูลภาษาอยู่ในไฟล์การเปลี่ยนแปลงนั้นง่าย เช่นเดียวกับกราฟิกการตั้งค่าทุกอย่าง ... มันยังอนุญาตให้เปลี่ยนเฟิร์มแวร์บนอุปกรณ์ฝังตัวจากแหล่งต่าง ๆ มากมาย!
ลองนึกถึงอุปกรณ์ที่ฝังตัวซึ่งสามารถรับเฟิร์มแวร์ล่าสุดของพวกเขาได้ด้วยตัวเอง! เช่นผ่าน wifi, อินเทอร์เน็ตบนมือถือ, บลูทู ธ , UART, วิทยุลิงค์, ...
ทันใดนั้นตัวเลือกทั้งหมดก็เปิด! และถ้าคุณมีข้อกังวลเกี่ยวกับความปลอดภัย: ไม่ต้องกังวล: ปัญหาแก้ไขแล้วตามที่คุณเห็นในภายหลัง ..
ปัญหาหลักสำหรับ“ อุปกรณ์ขนาดเล็กมาก” - จนถึงตอนนี้ -“ ระบบไฟล์”: ทุกคนรู้ว่า“ อ้วน”,“ NTFS”, … แต่คุณเคยนึกถึงระบบไฟล์บนชิปขนาดเล็กหรือไม่? หรือแม้กระทั่งภายใน CPU? ไม่มีปัญหากับซอฟต์แวร์ที่เหมาะสม นี่คือเหตุผลที่ฉันเขียน
“ Jesfs - ระบบไฟล์อนุกรมฝังตัวของโจ”

[ภาพ: 4MB JESFS บน 2x3 มม.]
งานประจำวันของฉันคือ IoT เนื่องจากฉันไม่พบวิธีแก้ปัญหาที่ใช้งานได้จริงฉันจึงตัดสินใจสร้างตัวเอง “ ความทนทาน”,“ ความปลอดภัย” และ“ รอยเท้าเล็ก” เป็นข้อ จำกัด การออกแบบของฉัน
Jesfs ได้รับการออกแบบมาเพื่อใช้ใน "โลกแห่งความจริง" และใช้กับความทรงจำแบบอนุกรม Nor-Flash มาตรฐานเช่น M25R-Series ที่ใช้กับ NRF52840-DK, NRF52832 และ CC13XX/CC26XX Launchpads ซึ่งมีอยู่สูงสุด 16 MB
พื้นฐานบางอย่างเกี่ยวกับ JESFS:
- รอยเท้า RAM และรหัสพิเศษพิเศษ: สามารถใช้กับ MCU ที่เล็กที่สุดที่มีหน่วยความจำโปรแกรม 8kbyte เพียง 8kbyte หรือน้อยกว่า (เช่น MSP430-series ที่มีชื่อเสียงเกือบทั้งหมดของคอร์แขน 32 บิต (M0, M3, M4, ….) RAM เพียง 200 ไบต์เท่านั้นที่เพียงพอ!
- โอเพ่นซอร์สฟรีและเขียนในมาตรฐาน C.
- ทำงานร่วมกับ Serial Nor-Flash จาก 8KBYTE ถึง 16MBYTE (เลือกสูงถึง 2GBYTE) แต่ยังสามารถใช้กับ CPU-internal NOR-FLASH
- ทำงานร่วมกับ Bootloader ที่ปลอดภัยของ Jesfsboot ที่มีขนาดเล็กมาก (ต้องใช้น้อยกว่า 8KB ในแกนแขนมาตรฐานรวมถึงเอ็นจิ้นการเข้ารหัส AES-128 สำหรับการอัปเดตที่เชื่อถือได้ (“ OTA”))
- รวมถึงการปรับระดับการสึกหรอที่ดีที่สุด (สำหรับอายุการใช้งานสูงสุดของหน่วยความจำ)
- การถ่ายโอนข้อมูลที่รวดเร็วมาก (เช่น การอ่านไฟล์: 3.7MB/วินาที บน NRF52840)
- มีการเพิ่มโหมดพิเศษเพื่ออนุญาตให้มีรอบการเขียนหลายล้านรอบโดยเฉพาะอย่างยิ่งสำหรับการรวบรวมข้อมูลรายงานเหตุการณ์และการบันทึกการบันทึก
- JESFS นั้นคงอยู่: ไม่มีการสูญเสียข้อมูลจากการสูญเสียพลังงานหรือรีเซ็ต
- ออกแบบมาสำหรับ (เกือบ) ทุกสถานการณ์โดยที่หรือความทรงจำสามารถใช้งานได้ (สิ่งที่สามารถลบบล็อกได้เท่านั้น (0-> 1) และเขียนเพียง 0 เท่านั้น
- ทดสอบด้วย: MacRonix MX25RXX, GIGADEVICES GD25WDXX และ GD25WQXX, ...
- Taylored อย่างเคร่งครัดถึงระบบฝังตัวที่ต่ำเป็นพิเศษ
- ออกแบบมาเพื่อใช้ประโยชน์จาก RTOs พื้นฐาน แต่ยังสามารถใช้แบบสแตนด์อโลนได้
- แอปพลิเคชันตัวอย่างสำหรับ NRF52840/NRF52832-DK, LaunchPads CC13XX/26XX, ATMEL SAMD20, Windows-PC และอื่น ๆ (เอกสาร PDF: JESFS.PDF)
- ใช้งานง่ายกับ API ที่ใช้งานง่าย:
int16_t fs_open(FS_DESC *pdesc, char* pname, uint8_t flags);
int32_t fs_read(FS_DESC *pdesc, uint8_t *pdest, uint32_t anz);
int16_t fs_write(FS_DESC *pdesc, uint8_t *pdata, uint32_t len);
int16_t fs_close(FS_DESC *pdesc);
int16_t fs_delete(FS_DESC *pdesc);
int16_t fs_rewind(FS_DESC *pdesc);
int16_t fs_rename(FS_DESC *pd_odesc, FS_DESC *pd_ndesc);
uint32_t fs_get_crc32(FS_DESC *pdesc);
int16_t fs_check_disk(void cb_printf(char *fmt, ...), uint8_t *pline, uint32_t line_size);
int16_t fs_format(uint32_t f_id);
int16_t fs_start(uint8_t mode);
void fs_deepsleep(void);
int16_t fs_info(FS_STAT *pstat, uint16_t fno);
void fs_sec1970_to_date(uint32_t asecs, FS_DATE *pd);
Changelog (JESFS_MAIN.C)
- v1.0 cc13xx/cc26xx และ windows
- V1.5 (NRF52) NRF52840 พอร์ต
- v1.51 (NRF52) NRF52840 รองรับการนอนหลับลึก/ตื่น (การนอนหลับลึกกับ RTC ที่ใช้งานอยู่และการเก็บรักษาแบบเต็ม RAM <3UA)
- v1.6 เพิ่ม 'fs_disk_check ()': ตรวจสอบดิสก์อย่างระมัดระวัง
- V1.61 (NRF52) เครื่องสำอางแหล่งที่มาและลดนาฬิกา Spim เริ่มต้นเป็น 16MHz บน NRF52840 (แนะนำ 32MHz โดยไม่มี SoftDevice เท่านั้น)
- V1.7 (NRF52) เพิ่มการกำหนดสำหรับ U-Blox Nina-B3
- v1.8 เพิ่มเวลาตั้งค่าด้วย '!' และ uart-rx-error
- v2.0 (nrf52) เปลี่ยนไดรเวอร์ uart เป็น app_uart สำหรับการใช้งานหลายครั้งใน tb_tools
- V2.01 (NRF52) เปลี่ยนเป็น SDK17 (ปัญหากับ nrf_clock () ใน SDK17 ดู docu)
- V2.02 (NRF52) เปลี่ยนเป็น SDK17.0.2 และ SES 5.10B (ปัญหากับ NRF_CLOCK () ใน SDK17.0.2 ไม่ได้รับการแก้ไขใน SDK17.0.2, ดู DOCU)
- v2.10 (NRF52) เพิ่มการสนับสนุนสำหรับ NRF52832
- V2.20 (NRF52) เพิ่มตัวอย่างสำหรับ NRF52832 (การกำหนดค่า I/O สำหรับ U-Blox Anna-B112 โมดูล)
- v2.30 (NRF52) เพิ่มการพิมพ์ของ Flash ID สำหรับการวิเคราะห์ใน JESFS_MAIN.C
- v2.54 (nrf52) เพิ่ม 'tb_get_runtime ()' ใน tb_tools.c
- v2.55 (NRF52) เปลี่ยนเป็น SDK17.1.0 และ SES 5.42AB (ปัญหากับ NRF_CLOCK () ใน SDK17.0.2 ไม่ได้รับการแก้ไขใน SDK17.0.2 ดูเอกสาร)
- v2.60 (nrf52) ใช้ macro global $ sdk_root
- V2.61 (SAMD20) ATMEL SAMD20 มีส่วนร่วม ( Kudos !)
- v2.70 เพิ่ม _feature supply_voltage_check ();
- v2.71 การตรวจสอบ fs_-functions ทั่วโลกทั้งหมดตรวจสอบ _supply_voltage_check () ในรายการ
- v2.72 JESFS_HL.C (ไฟล์ v1.91)
ใช้ Jesfs-Blackbox-Demo
เครื่องบันทึกเที่ยวบินสำหรับใช้ที่บ้าน
อุปกรณ์ทางเทคนิคจำนวนมากทำงานได้น่าเชื่อถือเป็นเวลาหลายปีและไม่มีใครสนใจพวกเขา แต่ถ้าพวกเขาล้มเหลวมีคำถามเสมอ: เกิดอะไรขึ้น?
นี่คือที่ที่ Jesfs อาจมีประโยชน์อย่างมาก
อ่านเพิ่มเติม: blackbox_eval.pdf
ฮาร์ดแวร์
ชิป flash แบบอนุกรมที่ผ่านการทดสอบ
ช่วงแรงดันไฟฟ้ากว้าง (1.6V-3.6V) และสแตนด์บายพลังงานต่ำพิเศษ:
- MacRonix MX25R-Series (MX25RXX)
- Gigadevices GD25W-Series (GD25WD80C, GD25WQ64E, ... )
ใช้กับ NRF52-CPU:


ใช้กับ CC13XX/26XX-CPUS:

การติดตั้ง (สำหรับ NRF52 CPU):
สร้างด้วย SES (v6.22a ( )) และ SDK 17.1.0 ( : SES เวอร์ชันใหม่จำเป็นต้องมีการตั้งค่าโครงการที่เปลี่ยนแปลง !!!)
ตั้งค่ามาโคร $ sdk_root ที่ไหนที่จะค้นหา sdk ใน ses -> เครื่องมือ -> ตัวเลือก -> อาคาร: เช่น: "macros ทั่วโลก": "sdk_root = c: nordic nrf5_sdk_17.1.0_ddde560"
ตั้งค่าแมโครแพลตฟอร์มด้วย I/O-pins (ดู tb_tools.h)
เลือกแก้ไขปัญหาด้วย nrf_clock () (ดู docu tb_tools_nrf52.c/.h)