Răsfoiți Sursa

update:优化lf擦除算法

Dozingfiretruck 4 luni în urmă
părinte
comite
78397cd0d0
1 a modificat fișierele cu 3 adăugiri și 6 ștergeri
  1. 3 6
      components/little_flash/src/little_flash.c

+ 3 - 6
components/little_flash/src/little_flash.c

@@ -448,8 +448,8 @@ lf_err_t little_flash_erase(const little_flash_t *lf, uint32_t addr, uint32_t le
         erase_off = addr % lf->chip_info.erase_size;
         erase_addr = addr / lf->chip_info.erase_size * lf->chip_info.erase_size;
     }
-    erase_len = len - erase_off;
-    while (erase_off || erase_len){
+    erase_len = len + erase_off;// 修正擦除长度,长度对齐擦除起始位置
+    while (erase_len){
         cmd_data[1] = erase_addr >> 16;
         cmd_data[2] = erase_addr >> 8;
         cmd_data[3] = erase_addr;
@@ -459,14 +459,11 @@ lf_err_t little_flash_erase(const little_flash_t *lf, uint32_t addr, uint32_t le
 
         if(little_flash_cheak_erase(lf)) goto error;
 
-        if (erase_len == 0){
-            break;
-        }
-
         erase_addr += (lf->chip_info.type==LF_DRIVER_NAND_FLASH)?lf->chip_info.erase_size/lf->chip_info.read_size:lf->chip_info.erase_size;
 
         if (erase_len<=lf->chip_info.erase_size){
             erase_len = 0;
+            break;
         }else{
             erase_len -= lf->chip_info.erase_size;
         }