Procházet zdrojové kódy

Use safe flash options.

HuangRui před 9 roky
rodič
revize
3c6ebea059
3 změnil soubory, kde provedl 52 přidání a 17 odebrání
  1. 26 16
      app/platform/flash_api.c
  2. 22 0
      app/platform/flash_api.h
  3. 4 1
      app/user/user_main.c

+ 26 - 16
app/platform/flash_api.c

@@ -71,10 +71,10 @@ bool flash_set_size(uint8_t size)
     // Reboot required!!!
     // If you don't know what you're doing, your nodemcu may turn into stone ...
     uint8_t data[SPI_FLASH_SEC_SIZE] ICACHE_STORE_ATTR;
-    SPIRead(0, data, sizeof(data));
+    spi_flash_read(0, (uint32 *)data, sizeof(data));
     SPIFlashInfo *p_spi_flash_info = (SPIFlashInfo *)(data);
     p_spi_flash_info->size = size;
-    SPIEraseSector(0);
+    spi_flash_erase_sector(0);
     spi_flash_write(0, (uint32 *)data, sizeof(data));
     //p_spi_flash_info = flash_get_info();
     //p_spi_flash_info->size = size;
@@ -175,13 +175,13 @@ uint32_t flash_get_speed(void)
 bool flash_init_data_written(void)
 {
     // FLASH SEC - 4
-    // Dangerous, here are dinosaur infested!!!!!
-    // Reboot required!!!
-    // It will init system data to default!
     uint32_t data[2] ICACHE_STORE_ATTR;
-    SPIRead((flash_get_sec_num() - 4) * SPI_FLASH_SEC_SIZE, data, sizeof(data));
-    if(data[0] == 0xFFFFFFFF && data[1] == 0xFFFFFFFF) {
-        return false;
+    if (SPI_FLASH_RESULT_OK == spi_flash_read((flash_get_sec_num() - 4) * SPI_FLASH_SEC_SIZE, (uint32 *)data, sizeof(data)))
+    {
+        if (data[0] == 0xFFFFFFFF && data[1] == 0xFFFFFFFF)
+        {
+            return false;
+        }
     }
     return true;
 }
@@ -192,10 +192,15 @@ bool flash_init_data_default(void)
     // Dangerous, here are dinosaur infested!!!!!
     // Reboot required!!!
     // It will init system data to default!
-
-    SPIEraseSector((flash_get_sec_num() - 4));
-    spi_flash_write((flash_get_sec_num() - 4) * SPI_FLASH_SEC_SIZE, (uint32 *)flash_init_data, 128);
-    return true;
+    bool result = false;
+    if (SPI_FLASH_RESULT_OK == spi_flash_erase_sector((flash_get_sec_num() - 4)))
+    {
+        if (SPI_FLASH_RESULT_OK == spi_flash_write((flash_get_sec_num() - 4) * SPI_FLASH_SEC_SIZE, (uint32 *)flash_init_data, 128))
+        {
+            result = true;
+        }
+    }
+    return result;
 }
 
 bool flash_init_data_blank(void)
@@ -204,14 +209,19 @@ bool flash_init_data_blank(void)
     // Dangerous, here are dinosaur infested!!!!!
     // Reboot required!!!
     // It will init system config to blank!
-    SPIEraseSector((flash_get_sec_num() - 2));
-    SPIEraseSector((flash_get_sec_num() - 1));
-    return true;
+    bool result = false;
+    if ((SPI_FLASH_RESULT_OK == spi_flash_erase_sector((flash_get_sec_num() - 2))) &&
+            (SPI_FLASH_RESULT_OK == spi_flash_erase_sector((flash_get_sec_num() - 1))))
+    {
+        result = true;
+    }
+
+    return result ;
 }
 
 bool flash_self_destruct(void)
 {
-    // Erase your flash. Good bye!
+    // Dangerous, Erase your flash. Good bye!
     SPIEraseChip();
     return true;
 }

+ 22 - 0
app/platform/flash_api.h

@@ -5,6 +5,28 @@
 #include "cpu_esp8266.h"
 #define FLASH_MAP_START_ADDRESS (INTERNAL_FLASH_START_ADDRESS)
 
+/******************************************************************************
+ * ROM Function definition
+ * Note: It is unsafe to use ROM function, but it may efficient.
+ * SPIEraseSector
+ * unknown SPIEraseSector(uint16 sec);
+ * The 1st parameter is flash sector number.
+
+ * SPIRead (Unsafe)
+ * unknown SPIRead(uint32_t src_addr, uint32_t *des_addr, uint32_t size);
+ * The 1st parameter is source addresses.
+ * The 2nd parameter is destination addresses.
+ * The 3rd parameter is size.
+ * Note: Sometimes it have no effect, may be need a delay or other option(lock or unlock, etc.) with known reason.
+
+ * SPIWrite (Unsafe)
+ * unknown SPIWrite(uint32_t des_addr, uint32_t *src_addr, uint32_t size);
+ * The 1st parameter is destination addresses.
+ * The 2nd parameter is source addresses.
+ * The 3rd parameter is size.
+ * Note: Sometimes it have no effect, may be need a delay or other option(lock or unlock, etc.) with known reason.
+*******************************************************************************/
+
 typedef struct
 {
     uint8_t unknown0;

+ 4 - 1
app/user/user_main.c

@@ -83,9 +83,12 @@ void user_init(void)
         return;
     }
     
-    if(!flash_init_data_written()){
+    if( !flash_init_data_written() ){
         NODE_ERR("Restore init data.\n");
+		// Flash init data at FLASHSIZE - 0x04000 Byte.
         flash_init_data_default();
+		// Flash blank data at FLASHSIZE - 0x02000 Byte.
+        flash_init_data_blank(); 
     }
 
 #if defined( BUILD_WOFS )