ESP8266 - wgrywam firmware.

Podobno nie da się uszkodzić czy zablokować ("zrobić cegły" - brick) podczas wgrywania nieodpowiedniego firmware-u.
Jeśli oprogramowanie układowe (fajna nazwa na firmware) jest nieodpowiednie to objawia się w następujący sposób: pojawią się komunikaty takie jak rf_cal [0]! = 0x05, 0xFF lub nieskończone pętle restartu i / lub szybko migające diody LED modułu. Wystarczy teraz powtórzyć wgrywanie z poprawnym firmware-m (źródło).
Z tego co znalazłem na stronie nodemcu.readthedocs.io to przed flashowaniem (wgrywanie nowego firmware-u) pamięć powinna być wcześniej skasowana poleceniem (linuks):

~$ esptool --port <serial-port-of-ESP8266> erase_flash

lub z "konsoli Pythona"

esptool.py --port <serial-port-of-ESP8266> erase_flash

Wydaje się to logiczne ponieważ poszczególne pliki są wgrywane w ściśle określone miejsca (adresy).

Sprawdzenie pojemności pamięci flash

~$ esptool --port /dev/ttyUSB0 flash_id
esptool.py v2.1
Connecting....
Detecting chip type... ESP8266
Chip is ESP8266
Enabling default SPI flash mode...
Manufacturer: 20
Device: 4016
Detected flash size: 4MB
Hard resetting...

Producent pamięci ma kod 0x20. Więcej informacji znajdziesz w internecie, np. pod tym linkiem https://github.com/projectara/flashrom/blob/master/flashchips.h. Jak wynika z opisu producentem jest AMD a jest to:

...
#define AMD_AM29F010B 0x20 /* Same as Am29F010A */
...

Jeśli nie masz płytki typu LoLin tylko "goły moduł ESP8266" to przed rozpoczęciem flashowania oprogramowania musisz przytrzymać przycisk FLASH i nacisnąć raz przycisk RST.
Jeśli używasz oprogramowania do flashowania od NodeMCU https://github.com/nodemcu/nodemcu-flasher lub od Espressif (FLASH_DOWNLOAD_TOOLS) to oprogramowanie pokładowe zostanie automatycznie zaktualizowane i nie trzeba naciskać żadnego przycisku.

Nie ukrywam, że miałem kłopot z wgraniem - uczę się. Nie będę opisywał całej walki, bo to nudne i nawet nie potrafię odtworzyć jej przebiegu.
Generalnie po zabawach w środowisku Arduino IDE straciłem możliwość używania komend AT. Chciałem je przywrócić i dla tego musiałem wgrać odpowiedni firmware. Nie udawało mi się to w Linuksie więc przeszedłem na Windows 10 i uzywałem sugerowanych przez liczne strony narzędzi, takich jak ESPlorer, nodemcu-flasher-master i FLASH_DOWNLOAD_TOOLS_V3.6.4. Tym ostatnim udało ni się przywrócić stan fabryczny (prawie). Piszę prawie bo okazuje się że dokonałem downgrade :D.

Skąd wziąść firmware do ESP8266?

Za informacją z internetu pobrałem od producenta ESP8266, czyli - https://github.com/espressif/ESP8266_NONOS_SDK. Pobrałem całego ZIP-a.

Czym wgrać firmware do ESP8266?

Po wielu próbach wgrałem oprogramowaniem sugerowanym przez producenta - FLASH_DOWNLOAD_TOOLS_V3.6.4, które pobrałem tutaj - https://www.espressif.com/sites/default/files/tools/flash_download_tools_v3.6.4_0.rar


Gdzie wgrać poszczególne pliki - pod jakie adresy pamięci flash?

Ja trafiłem przypadkowo na informację w dokumentacji producenta, którą znajdziesz na jego stronie - pod tym adresem - https://www.espressif.com/sites/default/files/documentation/4b-esp8266_at_command_examples_en.pdf. Polecam ogólnie ich dokumentacje - zawierają przykłady i ciekawe informacje napisane łatwym angielski. Nie wiem, czy to zbieg okoliczności, czy konieczność, ale ja musiałem wgrać pliki w takiej kolejności jak w tabelce :-D.


Upgrade, czy downgrade?

Jak wcześniej wspomniałem moje wgrywanie firmware-u okazało się obniżeniem wersji :D. Ale co tam, przećwiczyłem przynajmniej praktycznie.
Aktualnie mam tak:

AT+GMR
AT version:1.6.0.0(Feb  3 2018 12:00:06)
SDK version:2.2.0(f28eaf2)
compile time:Feb  6 2018 14:36:23
Bin version(Wroom 02):1.6.0
OK

AT+RST
 ets Jan  8 2013,rst cause:2, boot mode:(3,7)

load 0x40100000, len 2592, room 16 
tail 0
chksum 0xf3
load 0x3ffe8000, len 764, room 8 
tail 4
chksum 0x92
load 0x3ffe82fc, len 676, room 4 
tail 0
chksum 0x22
csum 0x22

2nd boot version : 1.7(5d6f877)
SPI Speed : 40MHz
SPI Mode : QIO
SPI Flash Size & Map: 8Mbit(512KB+512KB)
jump to run user1 @ 1000

<0x8c><0xe2><0x03><0xec><0x13><0x83>g<0xe4><0xdb>s<0x83><0xf2>'|<0xec><0x0c><0x84>l<0xc7>xsd<0x1c>#<0x93><0x1b><0x02><0x04><0x9f><<0x03>{<0xdb><0x03>$<0x9c>'<0xe0><0x04><0x83>n<0xe3><break>

d$`<0x03><0x8c><0xe3>s<0x92>l<0x84>l<0x1b><0x84><0x0c><0x04><0xe4>l`<0x03><0x84><0xe3>{<0x93>d<0xec>l<0x1b><0x8c><0x04><0x04><0x0c>d`<0x02><0x8c><0xe3>r<0xdb>l<0x0c><0x8f><0xdf><break>

<0x84><0x04><0x0c>dl <0x03>sd<0x8f><0xc3>sl<0x8c><0x9e><0xe3><0x8c>c<0x04><0x8c><0x84>c<0x1c>|<0x04><0x0c>c<0x9c><0x1c><0xe0>d<0x9c><0xe0><0x1c>cl#<0xe4><0xf2>'<0xe7><0x80><0x13>ng<0xe3><0x10><0x03><0x0c><0x03><0x8c><0xd8><0xe3><0x0c><0x02><0x04><0x8c><0xc7><0xc4><0x0c>d<0x04><0x0c>d<0xec><0x84><0xe4>l<0x8e><0x1f><0x83><0x8c>$`<0x03><0x80><0x03>g<0xfc><break>

<0x8c><0xdf><0xe3><0x8c>b<0x04>ll<0xe4><0x8c><0x8e><0x12><0x0c>b<0x0c><0x03><0x03><0x8c><0x9e><0xe3><0x84>c<0x04>l<0x04><0xc4>c<0x1c>sdrl

ready

a miałem tak:

AT+GMR
AT version:1.6.0.0(Feb  3 2018 12:00:06)
SDK version:2.2.1(f42c330)
compile time:Feb 12 2018 16:31:26
Bin version(Wroom 02):1.6.1

AT+RST
 ets Jan  8 2013,rst cause:2, boot mode:(3,7)

load 0x40100000, len 2592, room 16 
tail 0
chksum 0xf3
load 0x3ffe8000, len 764, room 8 
tail 4
chksum 0x92
load 0x3ffe82fc, len 676, room 4 
tail 0
chksum 0x22
csum 0x22

2nd boot version : 1.7(5d6f877)
SPI Speed : 40MHz
SPI Mode : QIO
SPI Flash Size & Map: 8Mbit(512KB+512KB)
jump to run user1 @ 1000

<0x8c><0xe2><0x03><0xec><0x13><0x83>g<0xe4><0xdb>s<0x83><0xfb>'|<0xec><0x0c><0x84>l<0xc7>xsd<0x1c>#<0x93><0x1b><0x03><0x04><0x9f><<0x03>{<0xdb><0x03>$<0x9c>'<0xe0><0x04><0x83>n<0xe3><break>

d$`<0x03><0x8c><0xe3>s<0x92>l<0x84>l<0x1b><0x84><0x0c><0x04><0xe4>l`<0x03><0x84><0xe3>{<0x93>d<0xec>l<0x1b><0x8c><0x04><0x04><0x0c>d`<0x02><0xc4><0xe3>r<0x9b>l<0x0c><0x8f><0xdf><break>

<0x84><0x04><0x0c>dl`<0x03>sd<0x8e><0xc3>sl<0x8c><0x9e><0xe3><0x8c>c<0x04><0x8c><0x84>c<0x1c>|d<0x0c>c<0x9c><0x87><0x1c><0x0e>{<0xec><0x04>l#<0xe4><0xf2>'<0xe7><0x80><0x13>ng<0xe3><0x10><0x03><0x0c><0x03><0x8c><0xd8><0xe3><0x0c><0x02>d<0x8c><0x0c><0x84><0x0c>d<0x04><0x0c>dl<0xc7><0x1f><0x8c>l<0x8e><0x1f><0x9b><0xec><0x8f><0x07>d<0x80><0x03>g<0xfc><break>

<0x8c><0xdf><0xe3><0x8c>b<0x04>ll<0xe4><0x8c><0x8e><0x12><0x0c>b<0x0c><0x03><0x03><0x8c><0x9e><0xe3><0x84>c<0x04>l<0x04><0xc4>c<0x1c>sdrl

ready


Podsumowanie

Jest trochę zabawy ze zrozumieniem niektórych zagadnień. Różnica pomiędzy mikrokontrolerami programowanymi "za pomocą rejestrów" (np. AVR-ki) a takim ESP-kiem, który ma swój system - SOC - jest spora... i fajnie. Tak na koniec na tym etapie to jest trochę pokręcone - ale wiedzę mam jeszcze małą.
Coś mi tu jeszcze nie gra z pojemnością pamięci flash - muszę to ogarnąć, bo konfiguracji ustawiłem FLASH SIZE na 8Mbit, czyli 1MB (512kB + 512kB), a esptool --port /dev/ttyUSB0 flash_id pokazuje uparcie 4MB, czyli 32Mbit. Nie ogarniam tego jeszcze, albo coś mylę.

Inne linki

http://www.jarzebski.pl/arduino/arduino-i-klony/nodemcu-v2-esp8266-lua.html

Postscriptum

Właśnie znalazłem link do firmware-ów AT, którego wcześniej nie widziałem - https://www.espressif.com/en/support/download/at. To poprawka V1.6.1 zostaje na jutro :D, choć na pierwszy rzut oka to mi wygląda na ten sam...

Komentarze

  1. Witam.

    Zostawiam podsumowania mojej "walki" z aktualizacją oprogramowania AT i SDK w płytkach V3 i V2 ModeMcu.

    Zbiorę wszystko w punkty, żeby było przejrzyście i w miarę zrozumiale, więc tak.
    1) Należy zacząć od sprawdzenia jaka wersja AT i SDK znajduje się w posiadanym układzie ESP8288 użyć do tego dowolnego monitora portu szeregowego i komend AT+RST i AT+GMR

    Po wpisaniu komendy AT+GMR powinniśmy otrzymać wersję AT i SDK jak poniżej:

    AT version:1.3.0.0(Jul 14 2016 18:54:01)
    SDK version:2.0.0(5a875ba)
    v1.0.0.3
    Mar 13 2018 09:37:06

    Komendą AT+RST sprawdzamy wersję boot i parametry pamięci. Otrzymujemy ekran jak poniżej:
    2nd boot version : 1.6
    SPI Speed : 40MHz
    SPI Mode : QIO
    SPI Flash Size & Map: 32Mbit(512KB+512KB)
    jump to run user1 @ 1000

    2) Używałem narzędzia flash_download_tool i ESP8266 FLASHER, polecam ten pierwszy.

    3) Uruchamiamy flash_download_tool w trybie develp. W konfiguracji ustawiamy parametry zgodne ztym co otrzymaliśmy wcześniej w moim przypadku SPI Speed:40MHz, SPI Mode: QIO, Flash Size 32Mbit.

    4) Ściągnąć ze strony producenta oprogramowanie, które nas interesuje. Otworzyć i zapoznać się z plikem REDME w katalogu bin\at

    5) Dodać po kolei w nowych liniach pliki boot, user1.1024, esp, blank

    6) Do dodanych plików po prawej w oknach dodać adresy zgodnie z plikem README. Dla pamięci od 1MB w górę należy sugerować się akapitem Flash size 8Mbit: 512kB+512kB

    6) Odznaczyć wszystkie checkboxy po lewej stronie.

    7) Podłączyć płytkę wybrać port COM i baud na 115200

    8) Wybrać klawisz ERASE poczekać cierpliwie do skasowania pamięci i komunikatu FINISH

    9) Wcisnąć i przytrzymać klawisz RESET na płytce. Trzymając klawisz RESET wcisnąć klawisz FLASH i przytrzymać.

    10) Odpuścić klawisz RESET.

    11) W programie wybrać przycisk START.

    12) W momencie, gdy na zielonym polu jest opis SYNC odpuścić klawisz FLASH. Następnie cierpliwie czekać do momentu zakończenia aktualizacji w ukazania się komunikatu FINISH.

    13) Jeżeli wszystko przebiegło pomyślnie sprawdzić jeszcze raz komendami AT+RST i AT+GMR czy udało się zaktualizować oprogramowanie. U mnie po aktualizacji:

    AT version:1.7.4.0(May 11 2020 19:13:04)
    SDK version:3.0.4(9532ceb)
    compile time:May 27 2020 10:12:17
    Bin version(Wroom 02):1.7.4

    2nd boot version : 1.7(5d6f877)
    SPI Speed : 40MHz
    SPI Mode : QIO
    SPI Flash Size & Map: 32Mbit(512KB+512KB)
    jump to run user1 @ 1000

    Pozdrawiam.

    OdpowiedzUsuń

Prześlij komentarz