Em ji bo ATmega128RFA1 bootloaderek OTA dinivîsin (wekî beşek ji cîhaza Smart Response XE)

Em ji bo ATmega128RFA1 bootloaderek OTA dinivîsin (wekî beşek ji cîhaza Smart Response XE)

Hemî bi kirîna nivîskarê amûrek balkêş li ser bazara duyemîn dest pê kir - Smart Response XE (şiroveya kurt). Ew ji bo dibistanan e: her xwendekarek di polê de amûrek mîna defterek elektronîkî an wergerek salên nodî werdigire, mamoste pirsek dipirse û xwendekar bersivan li ser klavyeyên cîhazan dinivîsin, ku bi riya alavekê têne wergirtin. kanala radyoyê (802.15.4) ji bo wergirê ku bi PC-ya mamoste ve girêdayî ye.

Van amûran çend sal berê hatin sekinandin, û dibistanên ku her yek bi $100-$200 kirîn niha li ser eBay bi $10 an kêmtir derdikeve. Hardware li wir ji bo ceribandinên geeky pir maqûl e:

  • Klavyeya 60
  • dîmendera bi çareseriya 384×136, 2 bit per pixel - dişibihe BC, CGA, lê 4 ne reng, lê dereceyên ronahiyê
  • mîkrokontroller ATmega128RFA1 (128 kB bîra flash, 4 kB ROM, 16 kB RAM, 802.15.4 transceiver)
  • derve (li gorî mîkrokontrolerê, ne bi tevahî cîhazê) 1 megabit (128 kilobyte) bîra flash bi navgîniya SPI
  • beşa ji bo 4 hêmanên AAA.

Ji navê mîkrokontroller diyar e ku ew ji malbata AVR-ê ye, ku tê vê wateyê ku çêkirina amûrê bi Arduino-hevhatî karekî pirtir e…

Ji nûçeyê li ser Hackday nivîskar dît ku ew çi ye berê kirine (eynî girêdan ji we re vedibêje ka hûn bi ku ve girêdidin), xwedî derfeta ku hûn lîstikan ji bo Arduboy bimeşînin:


Lê nivîskar bêtir bi fersendê re eleqedar e ku ne li ser cîhazê bilîze, lê bixwîne:

  • bîra flash bi serial SPI interface
  • bootloaders ji bo AVR
  • standard 802.15.4

Nivîskar bi nivîsandinê dest pê kir pirtûkxane (GPL v3), ku dihêle hûn dîmenderê dest pê bikin, nivîs û çargoşe derxînin, û bigihîjin bîra flash SPI. Dûv re wî dest bi ramanên ji bo karanîna pratîkî ya cîhazê kir: termînalek pocketê ya lihevhatî ya VT-100, lîstikên piralî. Piştî ku sê cîhaz ji nû ve ava kirin, wî biryar da ku wan "hîn bike" ku "li hewayê" nexşeyan bistînin. Tiştê ku dê ne tenê balkêş be, lê di heman demê de pir rehet jî be: kêşeya cîhazê her carê vekirina dijwar e, û di binê kapê beşa batterê de tenê qulik hene ku dihêle hûn bernamesazek ​​JTAG bi panelê ve girêdin.

Em ji bo ATmega128RFA1 bootloaderek OTA dinivîsin (wekî beşek ji cîhaza Smart Response XE)

Ev bes e ji bo barkirina bootloader Arduino, lê ne xêzik - porta serial li wir ne girêdayî ye, ji ber vê yekê hûn hîn jî nikarin bêyî vekirina dozê bikin. Di heman demê de, xetên TX0 û RX0 yên porta serial a yekem bi xêzên dengdanê yên matrixa klavyeyê re, ango yên ku bişkokên fonksiyonê yên li aliyên dîmenderê dipirsin, têne hev kirin. Lê hûn dikarin çi bikin - nivîskar ev ava kir:

Em ji bo ATmega128RFA1 bootloaderek OTA dinivîsin (wekî beşek ji cîhaza Smart Response XE)

Wî xetên JTAG anîn wir, û naha ne hewce ye ku cîhê pîlê vekin. Û ji bo ku kêşan bêne barkirin, min her du portên serial bi heman girêdanê ve girêda, di heman demê de veguhezek jî lê zêde kir, ji ber ku bi bataryayên sazkirî re, ji hêla fîzîkî ve ne gengaz e ku amûrê bi rengek din were qut kirin.

Demek dem girt ku meriv bi hesinek lêdanê, kêrek bikêr û çekek benîşt bixebite. Bi gelemperî, barkirina skişan "li ser hewayê" pir hêsantir e ku em bi lezgînî ji bo vê yekê îcad bikin.

Arduino IDE bernameyê ji bo barkirina kêşan bikar tîne avrdude. Ew bi mîkrokontrolerê re bi protokolê re têkilî dike STK500, ku dihêle hûn pelan di her du aliyan de veguhezînin. Ew bi kanalên ku derengmayînên guhêrbar, xerakirin û windabûna daneyê mimkun e re kêm hevaheng e. Ger tiştek di kanala rêzefîlmê de winda bibe an bişewite, hûn dikarin dîn bibin ku li sedemê bigerin. Carekê nivîskar nîv roj êş kişand heya ku wî fêm kir ku pirsgirêk kabloyek xirab e, û her weha veguhezkarek navbeynkariya CP2102-a kaprisî ye. Tewra mîkrokontrolkerek bi veguherînerek navbeynkar a çêkirî, mînakî, ATmega32u4, carinan dikare bi vî rengî tevbigere. Her bikarhênerek Arduino ferq kiriye ku xeletiyên dema barkirina kêşan ne ew qas kêm in. Carinan tomar baş derbas dibe, lê di dema ceribandinek xwendinê de xeletiyek tê dîtin. Ev nayê wê wateyê ku di dema nivîsandinê de xeletiyek hebû - di dema xwendinê de têkçûnek hebû. Naha bifikirin ku dema ku "li hewayê" bixebitin dê heman tişt bibe, lê pir caran pirtir.

Piştî ceribandina awayên cûda yên ji bo derbaskirina vê pirsgirêkê, nivîskar bi jêrîn derket. Amûrê bi navgînek SPI-yê 128 KB bîranînek flashê heye - em daneyan li ser têlan werdigirin (ji bîr mekin ku nivîskar berê xwedan yek amûrek bi girêdanek li kêlekê ye), vê bîranînê wekî tampon bikar bînin, û daneyan bi radyoyê re bişînin. kanalek ji bo amûrek din. Silav ji Cybiko.

Piştî nivîsandina koda xebata bi kanala radyoyê û her weha fontê, barker ji 4 kilobyte dirêjtir bû. Ji ber vê yekê, pêdivî bû ku nirxa HFUSE ji 0xDA berbi 0xD8 were guheztin. Niha bootloader dikare heta 8 kilobytes dirêj be, û navnîşana destpêkê niha 0x1E000 e. Ev di Makefile de tê xuyang kirin, lê divê dema dagirtin jî were hesibandin bootloader bi rêya avrdude.

Transceiver 802.15.4 di ATmega128RFA1 de bi eslê xwe ji bo xebitandina protokolê hatî çêkirin. Zigbee, ku pir tevlihev e, ji ber vê yekê nivîskar biryar da ku li şûna wê tenê pakêtan veguhezîne. Ev di hardware di ATmega128RFA1 de tête bicîh kirin, ji ber vê yekê kodek piçûk hewce ye. Di heman demê de, ji bo sadebûnê, nivîskar biryar da ku kanalek sabît bikar bîne, nehêle hûn wê jî bi destan hilbijêrin. Standarda 802.15.4 piştgirî dide 16 kanalên bi hejmarên ji 11 heta 26. Ew pir qerebalix in, hin jî kanalên WiFi li hev dikin (sor kanalên ZigBee, şîn, kesk û zer WiFi ne).

Em ji bo ATmega128RFA1 bootloaderek OTA dinivîsin (wekî beşek ji cîhaza Smart Response XE)

Derket holê ku kanalên 15 û 26 herî kêm ji destwerdana WiFi re têkildar in Nivîskar ji wan duyemîn hilbijart. Daxuyanî: werger nizane ka destûr heye ku ZigBee bi vî rengî hêsan bike. Dibe ku em hinekî bêtir bernamekirinê bikin û bi tevahî bicîh bikin?

Di cîhaza yekem de, pêdivî ye ku meriv makîneyek dewleta bêdawî bicîh bike ku daneyan bi protokola STK500 veguhezîne. Bi piranî, peyamên hatine veguheztin û wergirtin bixwe têra xwe ne, lê hin bi yên ku berê di kanalê re derbas bûne ve girêdayî ne. Danasîna diyalogê tê dayîn vir.

Parçeyek girîng a vê diyalogê veguheztina pakêtan e ku ji bo bîranîna flash a cîhaza armancê têne nivîsandin. Ji bo mîkrokontrolerên hêsan ên malbata AVR, mezinahiya rûpelê 128 byte ye, lê ji bo ATmega128RFA1 ew 256 e. Û ji bo bîranîna flash ya ku bi protokola SPI ve girêdayî ye, ew heman e. Bernameya di cîhaza yekem de, dema ku xêzek bar dike, tavilê naguhezîne ya duyemîn, lê li vê bîranînê dinivîse. Dema ku Arduino IDE rastbûna têketinê kontrol dike, tiştê ku li wir hatî nivîsandin tê şandin. Naha pêdivî ye ku em daneyên wergirtî bi kanala radyoyê veguhezînin cîhaza duyemîn. Di heman demê de, guheztina ji wergirtinê ber bi veguheztinê û vegerandinê pir caran pêk tê. Protokola STK500 ji derengbûnê re xemsar e, lê windabûna daneyê tehemûl nake (ecêb, lê li jor hate gotin ku dereng bandorê li veguheztina daneyê jî dike). Û windahiyên di dema veguheztina wireless de neçar in. ATmega128RFA1 xwedan pêkanînek nermalava hundurîn a daxwazên dubare hene dema ku di derheqê rastbûna veguheztinê de guman hene, lê nivîskar biryar da ku heman tiştî di nermalavê de bi xwe de bicîh bike. Wî protokolek pêşxist ku tê de gelek bêtir dane yek rê ji ya din diherike.

Ew ne bêkêmasî ye, lê ew dixebite. Rûpelê 256-byte li çar beşan tê dabeş kirin, ku her yek ji wan li ser hewayê wekî pakêtek tê şandin. Paketek dikare heya 125 bayt daneyan û yek bayt ji bo dirêjiyê û du bayt jî ji bo CRC bigire. Ji ber vê yekê perçeyên 64 byte dirêj digel hejmarên rûpel û beşan (ji 0 heta 3) li wir têne danîn. Amûra wergir xwedan guhêrbarek e ku dihêle ew bişopîne ka çend beş hatine wergirtin, û dema ku her çar gihîştin, cîhaza dişîne erêkirinê distîne ku tevahiya rûpel hatiye wergirtin. Na pejirandin (CRC hev nagire) - tevahiya rûpelê ji nû ve bişîne. Leza ji dema ku bi kabloyê veguhezîne hîn mezintir e. Dîtin:


Lê bi gelemperî, pêdivî ye ku meriv rêyek hêsan peyda bike da ku kabloyê bi cîhazên ji bo barkirina xêz û bi navgîniya wê ve girêbide. Mînakî, wekî di wêneyê de, li hundurê veguhezkarek navbeynkar a wusa li ser CP2102-ê bixin, û wê bi panelê ve girêdin da ku ew di dema girêdan û qutkirina kabloya Micro USB de li ber hêzê bisekinin.

Em ji bo ATmega128RFA1 bootloaderek OTA dinivîsin (wekî beşek ji cîhaza Smart Response XE)

Di heman demê de stabîlîzkerek 3,3-volt jî heye (û meriv wê çawa di amûrek bi dabînkirina hêzê ya 6-volt de bikar tîne - heke tenê heman stabîlîzker hebe, û hûn dikarin du diodan lê zêde bikin da ku bixweber hilbijêrin ka kîjan ji wan dê cîhazê hêzdar bike) . Pêdivî ye ku her sê LED ji panela veguherînerê navbeynkar neyên zeliqandin, wekî din ew ê dema ku li ser wan dixebitin bataryayên din jî bar bikin, û di heman demê de dengdana klavyeyê jî tevlihev bikin û bi navgîniya SPI re bi bîranîna flash-ê re bixebitin.

Peydakirina armancekê ji bi destxistina wê hê balkêştir derket (û ne hewceyî wê henekê li ser otobusê ye). Nivîskar di derbarê bootloaders AVR, bîra flash SPI, protokola STK500 û standarda 802.15.4 de gelek tişt fêr bû.

Hemî kodên din ji bilî pirtûkxaneya ku li jor hatî destnîşan kirin - e vir, û ew jî di bin GPL v3 de ye. Twitter-a Nivîskar - vir.

Source: www.habr.com

Add a comment