ESP8266 – naprawa uszkodzonej zawartości pamięci

Błąd chksum err
Informacja z błędem zwracana przez ESP8266 przy każdym starcie

Powstanie problemu

Jakiś czas temu podczas testów programu dla jednego z moich projektów przytrafiła mi się sytuacja, przez którą zmarnowałem wiele czasu i nerwów. NodeMCU, którego używałem do testów nie reagowało na żaden wgrany do niego program. Programowanie ESP8266 według Arduino przebiegało pomyślnie, lecz nawet najprostszy program Blink do migania wbudowaną w ESP diodą nie działał. W pewnym momencie miałem już rzucić w kąt swój moduł i zamówić kolejny uznając, że ten po prostu został uszkodzony. Problem powstał podczas wgrywania programu przez Wifi (OTA Over-the-Air), lecz nie mam mocnych dowodów iż użycie właśnie tej metody programowania było przyczyną problemu.

Jednak postanowiłem się jeszcze przyjrzeć informacją jakie można odczytać przy starcie ESP na porcie szeregowym ustawiając Baud rate na 74880. Wyglądały one następująco:

 ets Jan 8 2013,rst cause:1, boot mode:(3,6)
load 0x4010f000, len 1384, room 16
tail 8
chksum 0xef
csum 0xef
csum err
ets_main.c

Zacząłem więc przekopywać internet w poszukiwaniu odpowiedzi na pytanie, co jest przyczyną takiego stanu rzeczy. Okazuje się, że wszystkiemu winna jest pamięć mikrokontrolera, która uległa uszkodzeniu. Uszkodzenie musiało powstać poza obszarem, w którym zapisywany jest sketch gdyż nadpisywanie programu po raz kolejny i kolejny nie przynosiło rezultatu. Nawet zaznaczenie opcji Narzędzia -> Erase Flash ->All Flash Contents nic nie zmieniało.

Rozwiązanie – nodeMCUflasher

Nareszcie na jednym z zagranicznych for znalazłem rozwiązanie – nadpisanie całej pamięci poprzez nodeMCUflasher. Po pobraniu programu ze GitHuba producenta (link) należy go uruchomić, wybrać z rozwijalnej listy port COM, na którym znajduje się nasz ESP8266 i wcisnąć przycisk Flash (jeśli używanie „gołego” modułu np. ESP-12 przed podłączeniem do zasilania modułu należy zewrzeć GPIO0 do masy). Po trwającej chwilę operacji nasz moduł powinien uruchomić się. Na porcie COM i baud rate 9600 powinniśmy zobaczyć działanie nodeMCU.

NodeMCU firmware programmer
Wgrywanie oprogramowanie przez nodeMCUflasher
nodeMCU na porcie COM
Ożywiony nodeMCU V2

Mój moduł ożył! Teraz ponownie mogłem przejść do Arduino i wgrać swój program, który tym razem był już wykonywany przez ESP-12. Zakup kolejnej płytki mogłem jednak odłożyć 🙂

Inne metody

Powyższa metoda nie jest jedyną, jednak wydaje się najłatwiejsza. Można użyć również poniższej komendy aby wymazać całą pamięć mikrokontrolera.

python esptool.py -p com21 erase_flash

Zamiast zapisu com21 należy podać port, jaki jest w Waszym systemie. Jednak osobiście nie nie testowałem tego rozwiązania i mogę potwierdzić jego skuteczności.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *