Electoday 4.0

ไมโครคอนโทรลเลอร์ => ARM Processors => Topic started by: tha on May 05, 2022, 10:36:15 am

Title: FatFs Module Application Note
Post by: tha on May 05, 2022, 10:36:15 am
http://elm-chan.org/fsw/ff/doc/appnote.html#port (http://elm-chan.org/fsw/ff/doc/appnote.html#port)

FatFs Module Application Note

1. How to Port
2. Limits
3. Memory Usage
4. Reducing Module Size
5. Long File Name
6. Unicode API
7. exFAT Filesystem
8. 64-bit LBA
9. Re-entrancy
10. Duplicated File Access
11. Performance Effective File Access
12. Considerations on Flash Memory Media
13. Critical Section
14. Various Usable Functions for FatFs Projects
15. About FatFs License
Title: Re: FatFs Module Application Note
Post by: tha on May 08, 2022, 08:57:11 am
How to Port

Basic Considerations
   The FatFs module ถือเงื่อนไขต่อไปนี้ในการพอร์ต.

      •  ANSI C
         The FatFs module เป็น a middleware ที่เขียนใน ANSI C (C89). ไม่มีการพึ่งพาแพลตฟอร์ม, ตราบใดที่คอมไพเลอร์เป็นไป
         ตาม C89 หรือใหม่กว่า. เฉพาะ exFAT feature เท่านั้นที่ต้องการ C99.

      •  ขนาดของ integer types
         •  Size of char ต้องเป็น 8-bit.
         •  Size of int, ตลอดจน integer promotion, ต้องเป็น 16-bit or 32-bit.
         •  Size of short and long ต้องเป็น 16-bit and 32-bit ตามลำดับ. (ใน C89 เท่านั้น)

      •  Dependency
         •  C89: string.h.
         •  C99: string.h and stdint.h.
Title: Re: FatFs Module Application Note
Post by: tha on May 08, 2022, 09:30:27 am
Integer Types in FatFs API

   Integer types ที่ใช้ใน FatFs ถูกกำหนดใน ff.h ดังอธิบายข้างล่าง. มันถูกอิงตาม Win32 API (windef.h). นี้จะไม่เป็นปัญหากับ
   แพลตฟอร์มส่วนใหญ่. เมื่อมีข้อขัดแย้งกับ existing definitions เกิดขึ้น, คุณต้องแก้ไขมันด้วยความระมัดระวัง.

   BYTE
      8-bit unsigned integer ในช่วง 0 ถึง 28 - 1.

   WORD
      16-bit unsigned integer in range of 0 to 216 - 1.

   DWORD
      32-bit unsigned integer in range of 0 to 232 - 1.

   QWORD
      64-bit unsigned integer in range of 0 to 264 - 1.

   UINT
      นามแฝงของ unsigned int ที่ใช้เพื่อระบุจำนวนใดๆ.

   WCHAR
      นามแฝงขอ WORD ที่ใช้เพื่อระบุ a UTF-16 code unit.

   TCHAR
      นามแฝงขอ char, WCHAR or DWORD ที่ใช้เพื่อระบุ a character encoding unit.

   FSIZE_t
      นามแฝงขอ DWORD or QWORD ที่ใช้เพื่อแอดเดรสส์ file offset และเพื่อระบุ file size.

   LBA_t
      นามแฝงขอ DWORD or QWORD ที่ใช้เพื่อแอดเดรสส์ sectors ใน LBA และเพื่อระบุ number of sectors.
Title: Re: FatFs Module Application Note
Post by: tha on May 08, 2022, 10:21:43 am
System Organizations

   The dependency diagram ที่แสดงข้างล่างเป็นการกำหนดค่าแบบทั่วไป, แต่ไม่เฉพาะเจาะจง, ของ the embedded system ด้วย
   FatFs module.
   (https://i.imgur.com/wqJmCng.png)

   (a) ถ้า a working disk module สำหรับ FatFs ถูกจัดให้มี, ไม่มีสิ่งอื่นจะถูกต้องการ.
   (b) เพื่อแนบติด existing disk drivers ที่มีอินเตอร์เฟสที่ต่างกัน, บาง glue functions ถูกต้องการเพื่อแปล the interfaces ระหว่าง
        FatFs และ the driver.
   (https://i.imgur.com/aubDdhb.png)
Title: Re: FatFs Module Application Note
Post by: tha on May 09, 2022, 07:20:42 am
Required Functions

คุณจำเป็นต้องจัดให้มีเฉพาะ MAI functions ที่ต้องการโดย FatFs module เท่านั้นและไม่มีสิ่งอื่นอีก. ถ้า a working device control module สำหรับ the target system มีให้ใช้ประโยชน์, คุณจำเป็นต้องเขียนเฉพาะ glue functions เพื่อแนบติดมันกับ the FatFs module. ถ้าไม่, คุณจำเป็นต้องพอร์ต another device control module หรือเขียนมันตั้งแต่เริ่มต้น. ส่วนใหญ่ของ MAI functions ไม่จำเป็นเสมอไป. เช่น, the write function ไม่ถูกต้องการใน read-only configuration. ตารางต่อไปนี้แสดงซึ่งฟังชั่นใดถูกต้องการขึ้นอยู่กับ the configuration options.

(https://i.imgur.com/ecjOUyY.png)

FatFs ไม่สนใจเกี่ยวกับทั้งชนิดของ storage device ที่ถูกใช้เป็นอะไรหรือทั้งวิธีที่มันถูกนำไปใช้งานอย่างไร. มีความต้องการเพียงว่ามันเป็น a block device ที่อ่าน/ที่เขียนใน fixed-size blocks ที่สามารถเข้าถึงได้โดยทาง the disk I/O functions ที่กำหนดไว้ข้างบน.
Title: Re: FatFs Module Application Note
Post by: tha on May 09, 2022, 08:23:01 am
Limits

  •  Filesystem type: FAT, FAT32(rev0.0) and exFAT(rev1.0).
  •  Number of open files: ไม่จำกัด. (ขึ้นอยู่กับ available memory)
  •  Number of volumes: สูงถึง 10.
  •  Sector size: 512, 1024, 2048 and 4096 bytes.
  •  Minimum volume size: 128 sectors.
  •  Maximum volume size: 2^32 - 1 sectors in 32-bit LBA, แทบไม่จำกัดใน 64-bit LBA ด้วย exFAT.
  •  Maximum file size: 2^32 - 1 bytes on FAT volume, แทบไม่จำกัดในบน exFAT volume.
  •  Cluster size: สูงถึง 128 sectors บน FAT volume และสูงถึง 16 MB บน exFAT volume.
Title: Re: FatFs Module Application Note
Post by: tha on May 09, 2022, 09:08:37 am
Memory Usage

The memory usage ต่างกันไปขึ้นอยู่กับ the configuration options.

(https://i.imgur.com/GxIhSLL.png)

เหล่านี้คือ the memory usage ของ FatFs module โดยไม่มี lower layer บนบาง target systems ในเงื่อนไขต่อไปนี้. V หมายถึง
จำนวนของ mounted volumes และ F หมายถึงจำนวนของ open files. ทุกๆตัวอย่างที่นี่ถูกปรับให้เหมาะสมใน code size.

(https://i.imgur.com/FK02uL2.png)
Title: Re: FatFs Module Application Note
Post by: tha on May 09, 2022, 09:27:07 am
Reducing Module Size

ตารางต่อไปนี้แสดงว่า API function ใดถูกลบโดย configuration options เพื่อลด the module size. เพื่อใช้ an API function, แถวของ the function ต้องเคลียร์.

(https://i.imgur.com/ZlgJEoC.png)
Title: Re: FatFs Module Application Note
Post by: tha on May 09, 2022, 01:47:46 pm
Long File Name

FatFs module รองรับ the long file name (LFN) extension ของ the FAT filesystem. The two different file names, short file name (SFN) and LFN, ของ a file เปิดเผยบน the API. การรองรับสำหรับ LFN feature ถูกปิดการใช้งานโดยเริ่มต้น. เพื่อเปิดการใช้งาน the LFN, เซ็ต FF_USE_LFN เป็น 1, 2 or 3, และเพิ่ม ffunicode.c ไปยัง the project. The LFN feature ต้องการ a certain working buffer. The buffer size สามารถถูกกำหนดค่าโดย FF_MAX_LFN สอดคล้องกับ the available memory. The length of LFN สามารถยาวถึง 255 characters, ดังนั้น the FF_MAX_LFN ควรถูกเซ็ตถึง 255 สำหรับ any existing file names. ถ้า the size of working buffer ไม่เพียงพอสำหรับ the input file name, the file function ล้มเหลวด้วย FR_INVALID_NAME. เมื่อใช้การกลับเข้ามาใหม่ใดๆไปยัง the API ด้วย LFN feature ใน RTOS environment, FF_USE_LFN ต้องถูกเซ็ตเป็น 2 or 3. ในกรณีนี้, the file function จัดสรร the working buffer บน the stack or heap. The LFN working buffer ครอบครอง (FF_MAX_LFN + 1) * 2 bytes และเพิ่มเติม (FF_MAX_LFN + 44) / 15 * 32 bytes เมื่อ exFAT ถูกเปิดการใช้งาน.
Title: Re: FatFs Module Application Note
Post by: tha on May 09, 2022, 02:25:03 pm
Impact upon Module Size

เมื่อ the LFN ถูกเปิดการใช้งาน, the module size จะถูกเพิ่มขึ้นขึ้นอยู่กับ the configured code page. ตารางด้านขวาแสดงการเพิ่มขึ้นของ code size ในบาง code pages. โดยเฉพาะอย่างยิ่ง, ใน the CJK region, หลายหมื่น characters กำลังถูกใช้. น่าเสียดาย, มันต้องการ a huge OEM-Unicode bidirectional conversion table และ the module size จะถูกเพิ่มขึ้นอย่างมากตามที่แสดงในตาราง.
ด้วยเหตุนี้, the FatFs ที่มี LFN ที่เปิดการใช้งานด้วย DBCS code pages จะไม่สามารถถูกพอร์ตบน the most 8-bit MCU systems. ถ้า the target system อยู่ใน legacy-free, ในเฉพาะ Unicode และ any ANSI/OEM code ไม่ถูกใช้ได้เลย, the code page setting จะไม่มีความหมาย. คุณจะสามารถลด the code size ได้โดยการกำหนดค่า FatFs สำหรับ Unicode API ด้วย any SBCS code page.
มีข้อจำกัดบางประการเกี่ยวกับการใช้ LFN สำหรับ open source project, เนื่องจาก the LFN extension บน the FAT filesystem เคยเป็นสิทธิบัตรของ Microsoft Corporation. อย่างไรก็ตามสิทธิบัตรที่เกี่ยวข้องทั้งหมดได้หมดอายุและการใช้ the LFN feature นั้นฟรีสำหรับ projects ใดๆ.

(https://i.imgur.com/3wdSi1L.png)
Title: Re: FatFs Module Application Note
Post by: tha on May 10, 2022, 08:16:50 am
Unicode API

โดยค่าเริ่มต้น, FatFs ใช้ ANSI/OEM code เซ็ตบน the API แม้ใน LFN configuration. FatFs ยังสามารถสวิทช์ the character encoding บน the API ไปยัง Unicode โดย configuration option FF_LFN_UNICODE. นี้หมายความว่า FatFs เป็นไปตาม the full featured LFN specification. The data type TCHAR ระบุ path name strings บน the API เป็นนามแฝงของอย่างใดอย่างหนึ่ง char(ANSI/OEM or UTF-8), WCHAR(UTF-16) or DWORD(UTF-32) ขึ้นอยู่กับ option นั้น. สำหรับข้อมูลเพิ่มเติม โปรดดูที่คำอธิบายใน the file name.
โปรดทราบว่าการเซ็ต code page, FF_CODE_PAGE, นั้นไม่มีความหมายจริง ๆ เมื่อ FatF ถูกกำหนดค่าสำหรับ the Unicode API. มันควรถูกเซ็ต 437 เพื่อลด the module size. อย่างไรก็ตาม มันยังคงส่งผลต่อ code conversion ของ string I/O functions เมื่อ FF_STRF_ENCODE == 0, และยังเข้ากันได้แบบย้อนหลังกับระบบเดิม. ในกรณีนี้ , the code page อาจจำเป็นต้องถูกกำหนดค่าอย่างเหมาะสมถ้ามันถูกพิจารณาว่ามีปัญหา.
Title: Re: FatFs Module Application Note
Post by: tha on May 10, 2022, 02:03:27 pm
exFAT Filesystem

The exFAT (Microsoft's Extended File Allocation Table) filesystem เป็นการสืบทอดของ the FAT/FAT32 filesystem ซึ่งถูกใช้อย่างแพร่หลายใน embedded systems, consumer devices และ portable storage media. มันถูกนำมาใช้โดย SDA (SD Association) เป็น the filesystem สำหรับ SDXC card, 64 GB และใหญ่กว่า, และกำลังถูกจัดส่งพร้อมกับรูปแบบนี้.  ดังนั้น the exFAT เป็นหนึ่งใน the standard filesystems สำหรับ removable media เช่นเดียวกับ FAT. The exFAT filesystem ยอมให้ the file size เกิน the 4 GB limit ที่ FAT filesystem ยอมให้สูงถึงและบาง filesystem overhead, โดยเฉพาะ cluster allocation delay, ถูกลดเช่นกัน. คุณลักษณะเหล่านี้ช่วยให้สามารถบันทึกข้อมูลขนาดใหญ่โดยไม่ต้องแบ่งออกเป็นไฟล์บางไฟล์และปรับปรุงปริมาณงานเขียนไปยังไฟล์.
โปรดทราบว่า the exFAT filesystem เป็นสิทธิบัตรของ Microsoft Corporation. The exFAT feature ของ FatFs เป็นการใช้งานตาม US. Pat. App. Pub. No. 2009/0164440 A1. FatFs module สามารถสวิทช์ the exFAT on หรือ off โดย a configuration option, FF_FS_EXFAT. เมื่อเปิดการใช้งาน the exFAT สำหรับ the commercial products,  ใบอนุญาตจาก Microsoft จะถูกต้องการขึ้นอยู่กับปลายทางสุดท้ายของผลิตภัณฑ์.
ข้อสังเกต: การเปิดการใช้งาน exFAT จะละทิ้งความเข้ากันได้กับ C89 และมันต้องการ C99 เนื่องจากต้องใช้ประเภทจำนวนเต็ม 64 บิต.
Title: Re: FatFs Module Application Note
Post by: tha on May 10, 2022, 04:33:08 pm
64-bit LBA

LBA (Logical Block Addressing) เป็น an addressing method เพื่อระบุตำแหน่งของ data block, ที่เรียกว่า sector, บน the storage media. มันเป็น a simple linear address เริ่มต้นจาก 0 เป็น the first sector, 1 เป็น the second sector และต่อไป. The host system ไม่จำเป็นต้องพิจารณาว่าวิธีที่ the data block ถูกวางตำแหน่งและถูกจัดการอย่างไรใน the storage device. FatFs รองรับเฉพาะ LBA สำหรับ the media access. 32-bit LBA เป็น a common size ใน the most LBA scheme. มันสามารถแอดเดรสส์ได้มากถึง to 232 sectors, 2 TB ใน 512 bytes/sector. เมื่อ a storage device ที่ใหญ่กว่า 2 TB ถูกใช้, larger sector size หรือ 64-bit LBA จะถูกจำเป็นเพื่อแอดเดรสส์ the entire sectors ของ the storage device.
โดยค่าเริ่มต้น, FatFs ทำงานใน 32-bit LBA for media access. FatFs ยังสามารถสวิทช์มันไปยัง 64-bit LBA โดย a configuration option FF_LBA64. มันยังเปิดการใช้งาน GPT (GUID Partition Table) สำหรับ partiotion management บน the storage device ได้อีกด้วย. สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ GPT โปรดดูที่ f_mkfs และ f_fdisk function.
Title: Re: FatFs Module Application Note
Post by: tha on May 11, 2022, 06:27:44 am
Re-entrancy

The file operations ของ two tasks ไปยัง the different volumes แต่ละอย่างจะกลับเข้ามาใหม่เสมอโดยไม่คำนึงถึง the configurations ยกเว้นเมื่อ LFN ถูกเปิดการใช้งานด้วย static working buffer (FF_USE_LFN = 1). มันสามารถทำงานได้พร้อมกันโดยไม่มี mutual exclusion ใดๆ.
The file operations ของ two tasks ไปยัง the same volume จะไม่กลับเข้ามาใหม่โดยค่าเริ่มต้น. FatFs ยังสามารถถูกกำหนดค่าเพื่อทำให้มัน thread-safe โดย option FF_FS_REENTRANT. ในกรณีนี้, the OS dependent synchronization control functions อีกด้วย, ff_cre_syncobj/ff_del_syncobj/ff_req_grant/ff_rel_grant, จำเป็นต้องถูกเพิ่มไปยัง the project. มีบางตัวอย่างใน the ffsystem.c. เมื่อ a file function ถูกเรียกขณะที่ the volume กำลังถูกเข้าถึงโดยอีก task หนึ่ง, the file function to the volume จะถูกค้างไว้จนกระทั่ง task นั้นออกจาก the file function. ถ้า the wait time เกินกว่า a period ที่กำหนดโดย FF_TIMEOUT, the file function จะยกเลิกด้วย FR_TIMEOUT. The timeout feature อาจจะไม่ถูกรองรับบน the some RTOSs.
มีข้อยกเว้นบน the re-entrancy สำหรับ f_mount/f_mkfs function. These volume management functions ไม่กลับเข้ามาใหม่ไปยัง the same volume. เมื่อใช้ these functions, other tasks จำเป็นต้องหลีกเลี่ยงการเข้าถึง the volume.
หมายเหตุ: ส่วนนี้อธิบายเกี่ยวกับ the re-entrancy of the FatFs module เอง. The FF_FS_REENTRANT option เปิดการใช้งานเฉพาะการใช้อย่างพิเสษของแต่ละ filesystem objects และ FatFs does ไม่ได้ขัดขวางการกลับเข้าสู่ the storage device control functions. ดังนั้น the device control layer จำเป็นต้องเป็น thread-safe เสมออเมื่อ FatFs API ถูกเข้าสู่ใหม่สำหรับ different volumes. ตารางด้านขวาแสดงซึ่ง control function สามารถถูกกลับสู่เมื่อ FatFs API ถูกเข้าสู่ซ้ำบนบางเงื่อนไข.
(https://i.imgur.com/7z33d8f.png)
Title: Re: FatFs Module Application Note
Post by: tha on May 11, 2022, 08:54:11 am
Duplicated File Open

FatFs module ไม่รองรับ the read/write collision control ของการเปิดซ้ำไปยัง a file. The duplicated open ถูกยอมให้เฉพาะเมื่อแต่ละ open method ไปยัง a file เป็น read mode. The duplicated open ด้วยอย่างน้อยหนึ่ง write mode ไปยัง a file ถูกห้ามเสมอ, และ open file ต้องไม่ถูกเปลี่ยนชื่อหรือถูกลบด้วย. การละเมิดกฎเหล่านี้สามารถเป็นเหตุให้ data collaption.
The file lock control สามารถถูกเปิดการใช้งานโดย FF_FS_LOCK option. ค่าของ option กำหนดจำนวนของ open objects เพื่อจัดการพร้อมกัน. ในกรณีนี้, ถ้าการ opening, renaming or removing ใดๆที่ขัดต่อ the file shareing rule ที่อธิบายข้างบนถูกพยายาม, the file function จะถูกปฏิเสธด้วย FR_LOCKED. ถ้าจำนวนของ open objects, files and sub-directories, เท่ากันกับ FF_FS_LOCK, an extra f_open/f_opendir function จะล้มเหลวด้วย FR_TOO_MANY_OPEN_FILES.
Title: Re: FatFs Module Application Note
Post by: tha on May 11, 2022, 10:32:31 am
Performance Effective File Access

เพื่อ good read/write throughput บน the small embedded systems ที่มีขนาดที่จำกัดของ memory, application programmer ควรพิจารณาว่า process อะไรที่ถูกทำใน the FatFs module. The file data บน the volume จะถูกส่งถ่ายในลำดับต่อไปนี้โดย f_read function.
(https://i.imgur.com/fm0rzpE.png)
The file I/O buffer คือ a sector buffer เพื่อ read/write ส่วนหนึ่งของ data บน the sector. The sector buffer เป็นอย่างใดอย่างหนึ่ง file private sector buffer บนแต่ละ file object หรือ shared sector buffer ใน the filesystem object. The buffer configuration option FF_FS_TINY กำหนดว่า sector buffer ใดถูกใช้สำหรับ the file data transfer. เมื่อ tiny buffer configuration (1) ถูกเลือก, data memory consumption จะถูกลดลง FF_MAX_SS bytes แต่ละ file object. ในกรณีนี้, FatFs module ใช้เฉพาะ a sector buffer ใน the filesystem object สำหรับ file data transfer และ FAT/directory access. ข้อเสียของ the tiny buffer configuration คือ: the FAT data ที่แคชใน the sector buffer จะสูญเสียโดย file data transfer และมันต้องถูกโหลดซ้ำที่ทุกๆ cluster boundary. อย่างไรก็ตามมันจะเหมาะสำหรับ application ส่วนใหญ่จากมุมมองของ the decent performance และ low memory comsumption.
Figure 1 แสดงว่า a partial sector, sector unaligned part of the file, ถูกส่งถ่ายโดยทาง the file I/O buffer. ที่ long data transfer ที่แสดงใน Figure 2, ตรงกลางของ transfer data ที่ครอบคลุมอย่างน้อยหนึ่ง sector ถูกส่งถ่ายไปยัง the application buffer โดยตรง. Figure 3 แสดงว่ากรณีของ transfer data ทั้งหมดถูกทำให้เป็นแถวเดียวกันกับ the sector boundary. ในกรณีนี้, file I/O buffer ไม่ถูกใช้. บน the direct transfer, the maximum extent of sectors ถูกอ่านด้วย disk_read function ในแต่ละครั้งแต่ the multiple sector transfer จะถูกแบ่งที่ cluster boundary ถึงแม้ว่ามันจะต่อเนื่องกันก็ตาม.
ดังนั้น การใช้ความพยายามเพื่อ sector aligned read/write accesss จะกำจัด buffered data transfer และ the read/write performance จะถูกปรับปรุงให้ดีขึ้น. นอกจากผลนี้แล้ว, cached FAT data จะไม่ถูกล้างโดย file data transfer ที่ the tiny configuration, ดังนั้นมันสามารถบรรลุประสิทธิภาพเช่นเดียวกับ non-tiny configuration ที่มี small memory footprint.
Title: Re: FatFs Module Application Note
Post by: tha on May 11, 2022, 03:59:00 pm
Considerations on Flash Memory Media

เพื่อเพิ่มสูงสุด the write performance of flash memory media, อย่างเช่น SDC, CFC and U Disk, มันต้องถูกควบคุมโดยคำนึงถึงคุณลักษณะของมัน.

Using Mutiple-Sector Write

The write throughput of the flash memory media จะแย่ที่สุดที่ single sector write transaction. The write throughput เพิ่มขึ้นตามจำนวนของ sectors ต่อ a write transaction ดังแสดงใน Figure 6. ผลกระทบนี้ปรากฎมากขึ้นที่ความเร็วอินเทอร์เฟซที่เร็วขึ้นและ the performance ratio มักจะกลายมาเป็นมากกว่าสิบ. ผลลัพธ์นี้อธิบายอย่างชัดเจนว่า multiple block write (W:16K, 32 sectors) เร็วกว่า single block write (W:100, 1 sector), และการ์ดที่ใหญ่กว่ามักจะช้าในการเขียนบล็อกเดียว. จำนวนของ write transactions ยังส่งผลต่อ life time of the flash memory media ด้วย. เมื่อเปรียบเทียบที่จำนวนเดียวกันของ write data, the single sector write ใน Figure 6 ข้างบนใช้ flash memory media 16 เท่ามากกว่า multiple sector write ใน Figure 6 ข้างล่าง. Single sector write ค่อนข้างเจ็บปวดสำหรับ the flash memory media.
ดังนั้น the application program ควรเขียน the data ใน large block เท่าที่เป็นได้. The ideal write chunk size and alighment คือ size of sector, and size of cluster คือ the best. แน่นอนว่าทุก layers ระหว่าง the application และ the storage device ต้องมีการพิจารณาเกี่ยวกับ multiple sector write, อย่างไรก็ตามส่วนใหญ่ของ open-source memory card drivers จะขาดมัน. อย่าแบ่ง a multiple sector write request ลงใน single sector write transactions หรือ the write throughput ลดลง. โปรดทราบว่า FatFs module และ its sample disk drivers รองรับ multiple sector read/write operation.

(https://i.imgur.com/G7zrS6F.png)
Title: Re: FatFs Module Application Note
Post by: tha on May 12, 2022, 07:24:48 am
Forcing Memory Erase

เมื่อลบ a file ด้วย f_unlink function, the data clusters ที่ครอบครองโดย the file จะถูกทำเครื่องหมาย 'free' บน the FAT. แต่ the data sectors ที่บรรจุ the file data นั้นไม่ได้ถูกใช้กับกระบวนการใดๆ, ดังนั้นข้อมูลไฟล์ที่เหลือจะครอบครองส่วนหนึ่งของ the flash memory array เป็น 'live block'.  ถ้า the file data สามารถถูกลบบนการเอาออก the file, those data blocks จะถูกเปลี่ยนเป็น the free block pool. นี้อาจข้าม internal block erase operation ไปยัง the data block บน next write operation. ดังผลลัพท์ the write performance อาจจะถูกปรับปรุงให้ดีขึ้น. FatFs สามารถจัดการฟังชั่นนี้โดยการเซ็ต FF_USE_TRIM เป็น 1. โปรดทราบว่าเนื่องจากเอฟเฟกต์นี้มาจากความคาดหวังของ internal process of the storage device, มันจึงไม่ได้ผลเสมอไป. applications ส่วนใหญ่จะไม่ต้องการฟังชั่นนี้. นอกจากนี้ f_unlink function อาจใช้เวลาในการลบไฟล์ขนาดใหญ่.
Title: Re: FatFs Module Application Note
Post by: tha on May 12, 2022, 08:14:31 am
Critical Section

ถ้า a write operation ไปยัง the FAT volume ถูกอินเตอร์รัพท์เนื่องจาก an accidental failure, อย่างเช่น sudden blackout, wrong media removal และ unrecoverable disk error, the FAT structure on the volume สามารถถูกทำให้แตก. ภาพต่อไปนี้แสดง the critical section of the FatFs module.

(https://i.imgur.com/C7OPvve.png)

An interruption ใน the red section อาจทำให้เกิด a cross link; ด้วยเหตุนี้, the object ที่กำลังถูกเปลี่ยนอาจสูญหายได้. ถ้า an interruption ใน the yellow section ถูกทำให้เกิดขึ้น, มีอย่างน้อยหนึ่งรายการที่อาจเป็นได้ข้างล่าง.

  •  The file data ที่กำลังถูกเขียนใหม่ถูกยุบ.
  •  ไฟล์ที่กำลังถูกต่อท้ายจะคืนค่าสถานะเริ่มต้น
  •  ไฟล์ที่สร้างใหม่หายไป
  •  ไฟล์ที่สร้างใหม่หรือเขียนทับจะยังคงอยู่ แต่ไม่มีเนื้อหา
  •  ประสิทธิภาพของการใช้ดิสก์แย่ลงเนื่องจากคลัสเตอร์สูญหาย

แต่ละ case ไม่ส่งผลกระทบต่อ file ใดๆที่ไม่เปิดใน write mode. เพื่อให้ความเสี่ยงลดลงต่ำที่สุดของ data loss, the critical section สามารถถูกทำให้ลดลงต่ำที่สุดโดยการลดลงต่ำที่สุดเวลาที่ file ถูกเปิดใน write mode หรือการใช้ f_sync function ดังแสดงใน Figure 5.
Title: Re: FatFs Module Application Note
Post by: tha on May 12, 2022, 10:14:26 am
Various Usable Functions for FatFs Projects

เหล่านี้คือตัวอย่างการใช้เพิ่มเติมของ FatFs APIs. รายการใหม่จะถูกเพิ่มเมื่อ useful code example ถูกพบ.

1.  Open or Create File for Append (แทนที่ด้วย FA_OPEN_APPEND flag ที่เพิ่มที่ R0.12)
2.  Delete Non-empty Sub-directory (for R0.12 และใหม่กว่า)
3.  Create Contiguous File (superseded by f_expand function added at R0.12)
4.  Test if the File is Contiguous or Not
5.  Compatibility Checker for Storage Device Control Module
6.  Performance Checker for Storage Device Control Module
7.  FAT Volume Image Creator (Pre-creating built-in FAT volume)
8.  Virtual Drive Feature (refer to lpc176x/ in ffsample.zip)
9.  Embedded Unicode String Utilities (OEMxxx→Unicode, Unicode→OEMxxx, Unicode→Unicode)
Title: Re: FatFs Module Application Note
Post by: tha on May 12, 2022, 10:51:29 am
About FatFs License

FatFs กำลังได้รับพัฒนาเป็นโปรเจ็กต์ส่วนตัวของผู้เขียน, ChaN. มันเป็นอิสระจากโค้ดที่คนอื่นเขียนในรุ่นปัจจุบัน. code block ต่อไปนี้แสดงสำเนาของt he FatFs license document ที่ถูกรวมไว้ใน the source files.
(https://i.imgur.com/UB2Vcwq.png)
ดังนั้น FatFs license เป็นหนึ่งของ the BSD-style licenses แต่มีคุณลักษณะที่มีนัยสำคัญ. FatFs ถูกมุ่งหมายสำหรับ embedded systems เป็นหลัก. เพื่อที่จะขยายการใช้งานสำหรับผลิตภัณฑ์เชิงพาณิชย์, การแจกจ่ายซ้ำของ FatFs ใน binary form, อย่างเช่น embedded code, binary library และ any forms โดยไม่มี source code, ไม่จำเป็นต้องรวมเกี่ยวกับ FatFs ไว้ในเอกสารประกอบ. นี้เทียบเท่ากับ the 1-clause BSD license. แน่นอน FatFs เข้ากันได้กับส่วนใหญ่ของ open source software licenses รวมถึง GNU GPL. เมื่อคุณแจกจ่ายซ้ำ the FatFs source code ที่มีการเปลี่ยนแปลงใดๆหรือสร้าง a fork, the license ยังสามารถถูกเปลี่ยนเป็น GNU GPL, BSD-style license หรือ any open source software license ที่เข้ากันได้กับ FatFs license ได้ด้วย.