]> git.tnoah.ca Git - lora-radio.git/commitdiff
Fixed nRF52 soft-brick on device EEPROM wipe
authorMark Qvist <mark@unsigned.io>
Wed, 15 Jan 2025 11:42:24 +0000 (12:42 +0100)
committerMark Qvist <mark@unsigned.io>
Wed, 15 Jan 2025 11:42:24 +0000 (12:42 +0100)
Utilities.h

index dafbde77616bfb8b6c293d9c817438354383dc2f..76056687258ffd4cea6cf43177c04a32729236e1 100644 (file)
@@ -1285,35 +1285,32 @@ void promisc_disable() {
 }
 
 #if !HAS_EEPROM && MCU_VARIANT == MCU_NRF52
-    bool eeprom_begin() {
-        InternalFS.begin();
-
-        file.open(EEPROM_FILE, FILE_O_READ);
-
-        // if file doesn't exist
-        if (!file) {
-            if (file.open(EEPROM_FILE, FILE_O_WRITE)) {
-                // initialise the file with empty content
-                uint8_t empty_content[EEPROM_SIZE] = {0};
-                file.write(empty_content, EEPROM_SIZE);
-                return true;
-            } else {
-                return false;
-            }
-        } else {
-            file.close();
-            file.open(EEPROM_FILE, FILE_O_WRITE);
-            return true;
-        }
+  bool eeprom_begin() {
+    InternalFS.begin();
+    
+    file.open(EEPROM_FILE, FILE_O_READ);
+    if (!file) {
+      if (file.open(EEPROM_FILE, FILE_O_WRITE)) {
+       for (uint32_t mapped_addr = 0; mapped_addr < EEPROM_SIZE; mapped_addr++) { file.seek(mapped_addr); file.write(0xFF); }
+        eeprom_flush();
+        return true;
+      } else {
+        return false;
+      }
+    } else {
+      file.close();
+      file.open(EEPROM_FILE, FILE_O_WRITE);
+      return true;
     }
+  }
 
-    uint8_t eeprom_read(uint32_t mapped_addr) {
-        uint8_t byte;
-        void* byte_ptr = &byte;
-        file.seek(mapped_addr);
-        file.read(byte_ptr, 1);
-        return byte;
-    }
+  uint8_t eeprom_read(uint32_t mapped_addr) {
+      uint8_t byte;
+      void* byte_ptr = &byte;
+      file.seek(mapped_addr);
+      file.read(byte_ptr, 1);
+      return byte;
+  }
 #endif
 
 bool eeprom_info_locked() {
@@ -1423,9 +1420,13 @@ void eeprom_write(uint8_t addr, uint8_t byte) {
 }
 
 void eeprom_erase() {
-       for (int addr = 0; addr < EEPROM_RESERVED; addr++) {
-               eeprom_update(eeprom_addr(addr), 0xFF);
-       }
+       #if !HAS_EEPROM && MCU_VARIANT == MCU_NRF52
+               InternalFS.format();
+       #else
+               for (int addr = 0; addr < EEPROM_RESERVED; addr++) {
+                       eeprom_update(eeprom_addr(addr), 0xFF);
+               }
+       #endif
        hard_reset();
 }