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).
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.
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
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_idesptool.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.rarGdzie 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ę.
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
Witam.
OdpowiedzUsuń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.