Firmware flashelés UART vonalon
2017. december 17. írta: eNeS

Firmware flashelés UART vonalon

Eleinte kicsit ódzkodtam a soros programozástól, de rájöttem, hogy ha nem akarok Felhőben élni, nem lehet elkerülni, így némi utánaolvasás után választottam egy USB-soros illesztőt és megrendeltem. (Ez a legelső wifis villanykapcsolóm után nem sokkal meg is érkezett, így ezen ki is próbálhattam)

Típus Áramerősség 3.3V-on Win driver
CH340G 25mA https://wiki.wemos.cc/
FT232RL 50mA http://www.usb-drivers.org/
PL-2303HX 100mA http://www.prolific.com.tw/
CP2102 100mA https://www.silabs.com/

 

Mivel a 25 és 50mA is elég karcsú, (az ESP modulok 50-80mA között is fogyaszthatnak, főleg bekapcsoláskor) a PL-2303 pedig megtalálható éppen e-bayen még elvétve, de már EOL (End-Of-Life, megszűnt támogatású) eszköz, így a CP2102 mellett döntöttem. Amikor megláttam, hogy 300Ft-ért vesztegetik, és még a négy rövid jumper kábel is jár hozzá (csak egy darab ilyen kábelért magyar elektronikai kisüzletben 90Ft-ot elkérnek, mármint darabjáért), mindjárt kettőt is rendeltem. (hátha elrontom...) Mivel ez a típus elegendő tápellátást biztosít, nem kell külön tápegységet beüzemelnünk az ESP egység programozásához, viszont mivel túlnyomó többségük 3.3V-os, az 5V csatlakozóját a programozónak javaslom messze kerülni!

cp2102.jpg

A Windows 7 és újabb (szándékosan nem írom, hogy "jobb") verzió ugyan feltehetőleg fel fogja ismerni ezeket, de ahhoz, hogy megfelelően működjön, le kell tölteni a gyári drivert, mert a Microsoft sok dologhoz ért, de többek között a driverek készítéséhez sem. Előfordulhat a Windows lefagyása is, ha nem megfelelő soros illesztődriver van telepítve, és kihúzzuk az USB-ből az eszközt. :) No comment.
A modern Linux kernelek élből ismerik ezeket, és megfelelően kezelik, így itt nincs szükség külön driver letöltésre. Legalábbis sem Ubuntun sem Arch Linuxon nem ütköztem problémákba, azonnal működött a D1 minibe beépített CH340G és a saját külső CP2102-m is.

Maga a program feltöltése nem annyira bonyolult eljárás, ám adott esetben a szükséges 4 csatlakozás (3V3, TX, TX, GND) megkeresése a programozni kívánt eszközön nem annyira egyszerű, típusonként eltérő, de az Interneten általában könnyű fellelni pár képet, ami segít az azonosításban. Javaslom egy USB AM-AF hosszabbító kábel beszerzését, így kicsit könnyebb megfelelő pozícióba állítani az egységet.

Elvi bekötés: (balra programozó, jobbra eszköz láb megnevezés)

  • 3V3 a VCC/3V3-ra
  • TX az RX-re
  • RX a TX-re
  • GND a GND-re
  • GND a GPIO-0-ra

Segédlet ESP8266-hoz:

soros1.jpg

Segédlet ESP8285-höz:

soros2.jpg

Fenti rajzokon a multiméterrel való tesztelés könnyítése érdekében a chipeken található PIN-ek neveit is feltüntettem.
FONTOS! A GPIO-0-t GND-re kell húzni a programozási módba lépéshez, ez általában nincs kivezetve a panelre, néha közvetlenül kell GND-re kötni átmenetileg. (kivéve ha egy másik alkatrésznél megtalálható a kivezetése, és esetleg könnyebben hozzáférhető, mert az ESP chipek lábtávolsága elég kicsi, nem könnyű beletrafálni)

Ez a gyakorlatban valahogy így néz ki:

img_20171216_101304_hdr.jpg

A vidám kék gyurmaszerű anyag a kedvenc BlueTack-em, ami fixen GPIO-0 -hoz fogja a soros programozó GND lábára jumper kábel segédletével odaerősített fekete kábelt. A soros programozó balra a CP2102, jobbra pedig a Sonoff Touch látható szétkapva. Az ESP8266 chip alatt a csatlakozók fentről lefelé: 3V3, RX, TX, GND, ezekre vannak jumper kábelekkel kötve a soros programozó megfelelő lábai. (fenti bekötés szerint) A soros programozó felé anya, a Touch felé apa csatlakozó van a jumper kábelen. SEMMILYEN KÖRÜLMÉNYEK KÖZÖTT NE KÖSSÜK 230V-RA A PROGRAMOZNI KÍVÁNT ESZKÖZT, amíg a gyengeáramú programozóval bizgetjük! Meg egyébként se kössük rá szétszedett állapotban, érintésvédelmileg nem helyes. Én szóltam.

Töltsük le a nodemcu-pyflasher alkalmazást a PC-re/laptopra: (ez Linux mellett Windowson is fut egyébként Pythont is kell a gépre telepíteni, ha nincs)
https://github.com/marcelstoer/nodemcu-pyflasher/releases
Senkit ne tévesszen meg a "NodeMCU" név, nem csak ilyen modult, hanem bármilyen ESP MCU-t képes flashelni, illetve bármilyen firmware-t fel tud tölteni.

Python függőségek telepítése:

sudo apt-get install python-wxgtk3.0 python-serial

Miután az előkészületeket ilyen módon elvégeztük, a már bekapcsolt, készenlétben álló PC-re/laptopra csatlakoztassuk a programozó USB végét. Ez a megfelelő driverelés után Windowsal is működhet, de mivel én nem vagyok a Microsoft vallás hívője, Linuxom van az itthoni gépeimen, így a továbbiakban csak erről tudok biztosat nyilatkozni.

1. Nyitunk egy konzolt, kiadjuk az alábbi parancsot, hogy lássuk a programozót felismerte-e a rendszer:

dmesg | tail

Erre az alábbi választ fogjuk kapni:

[ 951.066775] usb 2-1: new full-speed USB device number 2 using uhci_hcd
[ 951.358057] usbcore: registered new interface driver usbserial
[ 951.358179] usbcore: registered new interface driver usbserial_generic
[ 951.358299] usbserial: USB Serial support registered for generic
[ 951.374341] usbcore: registered new interface driver cp210x
[ 951.374477] usbserial: USB Serial support registered for cp210x
[ 951.374635] cp210x 2-1:1.0: cp210x converter detected
[ 951.379385] usb 2-1: cp210x converter now attached to ttyUSB0

Ebből látjuk, hogy "ttyUSB0" porton érhető el a programozó. (Windows alatt ezt a Vezérlőpult alatt mélyen elrejtett Eszközkezelőben kereshetjük elő a soros portok közé elrejtve, némi driverelés, esetleg újraindítás után, a tulajdonságoknál megtaláljuk milyen számú soros porton érhető el.)

2. A letöltött és kicsomagolt nodemcu-pyflasher mappájába lépve adjuk ki az alábbi parancsot, hogy ellenőrizzük sikeres volt-e a bekötés:

sudo python2 esptool.py --port /dev/ttyUSB0 flash_id

Ennek a kimenete valami ilyesmi lesz jó esetben:

esptool.py v2.0.1
Connecting....
Detecting chip type... ESP8266
Chip is ESP8266
Uploading stub...
Running stub...
Stub running...
Manufacturer: 51
Device: 4014
Detected flash size: 1MB
Hard resetting...

Ha a program indulásával gond van, akkor a python2 vagy a pyserial csomaggal lehet probléma. Ha a program elindul, de kommunikációs gond van, akkor lehet simán fordítva kötöttük be az RX/TX-et, vagy nem kötöttük GND-re a GPIO-0-t... ne búsuljunk, széthúz, megvizsgál, szükség esetén multiméterrel ki lehet csipogtatni jó helyre megy-e a soros programozó megfelelő lába és érintkezik-e. Eleinte nekem sem ment elsőre. ;) A tizedik után már könnyebb lesz.
Itt azt látjuk egyébként, hogy a várakozásnak megfelelően 1MB flash tárhelye van a Sonoff Touch-nak, ami rendben is van. A rajta levő chip típusa egyébként 8285 és nem 8266, de ez az esptoolnak gyakorlatilag mindegy, lehet nincs is a listájában más. Az USB-t ekkor ki kell húzni, majd visszadugni, hogy újrakezdődjön a flashelési folyamat, mivel az előző "Hard resetting" kiugratta a programozó módból a chipet. :)
Megfelelő gyakorlat után ez a 2. pont ki is hagyható akár.

3. Ugyanebben a mappában adjuk ki a következő parancsot:

sudo python2 nodemcu-pyflasher.py

Mire ez a "sudo" mánia? A soros porthoz hozzáféréshez emelt jogosultság kell, szóval ha nem root-al léptünk be, ez hasznos lehet. A python2 parancsot azért adom ki direkten, mert az Ubuntun pl a python3 az alapértelmezett parancs, ha azt írja be az ember, hogy "python", és ezt nem feltétlenül a legjobban támogatja a pyflasher úgy vettem észre. Egyébként a pyflasher egy nagyon baráti felülettel indul el, ha minden előfeltétel rendben teljesült, valami ilyennel:

pyflasher21.jpg

A Serial portnál barátságos legördülő listából lehet kiválasztani az első lépésben látott portot, alatta ki kell tallózni a firmware elérési útvonalát, megadni a sebességet. (ez általában 115200-al megfelelően működik, kivéve a régi ESP-01 chipeknél)

A legfontosabb paraméter a Flash mode, ami néha a modul hátuljára van írva, ha nincs, akkor 4MB-os ESP-knél általában "dio" szokott lenni, 1MB-os moduloknál, mint pl a Sonoff Touch "dout". Ha nem megfelelő módon állítjuk be, az eszköz nem fog elindulni! De nem kell megijedni, a soros programozót ismét rá lehet ereszteni, és újra meg lehet írni az Erase flash beállítás "yes"-re állításával.. ez utóbbi jó az elfelejtett wifi és admin jelszavak ellen is. :) A Flash NodeMCU gombra kattintás után már indul is a móka, ezzel a sebességgel kb 30 másodperc alatt végez, ha törölnie is kell az 7-8 másodperc előtte pluszban.

Ha sikerrel végződött az írás, előbb USB, majd programozó lehúz, GPIO-0 szabaddá tesz, eszköz összerak és mehet áram alá. Ha minden jól ment, már az új firmware fog vígan elindulni rajta.

Amennyiben nem sikerül flash módba tennünk az eszközt, van három speciális GPIO csatlakozó a 0, 2 és a 15, győződjünk meg ezek állapotáról, pl multiméterrel.

GPIO-15 GPIO-0 GPIO-2 Állapot
0 1 1 Normál bootolás SPI-ről
0 0 1 Programozási/Flashelő üzemmód (RX/TX-en)
1 bármi bármi Bootolás közvetlenül SD kártyáról

 

Logikai 0 0-0.8V
Nem definiált, lebeg 0.9-1.9V
Logikai 1 2-3.3V

 

A bejegyzés trackback címe:

http://bitekmindenhol.blog.hu/api/trackback/id/tr2213507779

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.