Kirjutame OTA-laadijat ATmega128RFA1 jaoks (Smart Response XE seadme koosseisus)

Kirjutame OTA-laadijat ATmega128RFA1 jaoks (Smart Response XE seadme koosseisus)

KĂ”ik algas autori huvitava seadme — Smart Response XE (ostmisest kasutatud turult.lĂŒhikirjeldus). Seade on mĂ”eldud koolidele: iga Ă”pilane klassis saab seadme, mis meenutab 90ndate elektroonilist pĂ€evikut vĂ”i tĂ”lketööd, Ă”petaja esitab kĂŒsimuse ja Ă”pilased sisestavad vastuseid seadme klaviatuuridele, mis saadetakse raadiosageduse kaudu (802.15.4) vastuvĂ”tjale, mis on ĂŒhendatud Ă”petaja arvutiga.

Nende seadmete toe lĂ”petamine toimus juba mitu aastat tagasi, ja see, mis koolides maksis 100-200 dollarit tĂŒkki, ilmub nĂŒĂŒd eBay'sse 10 dollari ja vĂ€hemaga. "Riistvara" sobib aga vĂ€ga hĂ€sti geegikogemuste tegemiseks:

  • 60 klahviga klaviatuur
  • ekraan, mille eraldusvĂ”ime on 384×136, 2 bitti pikseli kohta — sarnane BKC-le, CGA-le, kuid 4 mitte vĂ€rvi, vaid heledusastet
  • mikrokontroller ATmega128RFA1 (128 kB vĂ€lkmĂ€lu, 4 kB ROM, 16 kB RAM, 802.15.4 standardi saatja-vastuvĂ”tja)
  • vĂ€line (mikrokontrollerist sĂ”ltumatu) 1 megabitti (128 kilobaiti) SPI liidese kaudu mĂ€lukaart
  • sektsioon 4 AAA patareile.

Mikrokontrolleri nime pĂ”hjal on selge, et see kuulub AVR perekonda, seega on seadme Arduino ĂŒhilduvaks tegemine rohkem kui triviaalne


Uudistest lehelt Hackaday autor sai teada, et see on juba tehtud (sama lingi kaudu on kirjeldatud, kuhu ĂŒhendada), saades vĂ”imaluse mĂ€ngida Arduboy mĂ€nge:

MĂ€ngi videot

Aga autorile huvitab rohkem seadme kasutamine mitte mÀngimiseks, vaid uurimiseks:
  • jĂ€rjestikuse liidese kaudu vĂ€lkmĂ€lu SPI
  • AVRi laadijad
  • 802.15.4 standard

Autor alustas koodi kirjutamisega teeki (GPL v3), mis vĂ”imaldab algatada ekraani, kuvada teksti ja ristkĂŒlikke ning pÀÀseda juurde SPI liidese kaudu vĂ€lkmĂ€lule. Siis hakkas ta vĂ€lja mĂ”tlema seadme praktilise kasutamise ideid: taskul teine VT-100 ĂŒhilduv terminal, mitme mĂ€ngijaga mĂ€ngud. PĂ€rast kolme seadme ĂŒmberkorraldamist otsustas ta "Ă”petada" neid saama skeeme "Ă”hu kaudu". See oleks mitte ainult huvitav, vaid ka vĂ€ga mugav: seadme korpust on alati raske avada, ja patareide sektsiooni all on vaid augud, mis vĂ”imaldavad ĂŒhendada JTAG programmitöötlejaga.

Kirjutame OTA-laadijat ATmega128RFA1 jaoks (Smart Response XE seadme koosseisus)

Seda on piisav Arduino bootloaderi laadimiseks, kuid mitte skeemi jaoks - seeriaport ei ole sinna vĂ€lja viidud, seega ilma korpuse avamata ei saa hakkama. Samuti on TX0 ja RX0 esimese seeriaporti jooned ĂŒhendatud klaviatuuri matriisi skaneerimise joontega, nimelt nendega, mille kaudu toimub funktsionaalsete klahvide skaneerimine ekraani mĂ”lemal kĂŒljel. Kuid mis teha - autor ehitas just selle:

Kirjutame OTA-laadijat ATmega128RFA1 jaoks (Smart Response XE seadme koosseisus)

Sinna on ta vĂ€lja viinud JTAG jooned, ning nĂŒĂŒd ei ole patareide pesa avamine enam vajalik. Samuti on skeemide laadimise vĂ”imaldamiseks vĂ€lja viidud ka mĂ”lemad seeriaportid, lisades sissekopteri, kuna paigaldatud patareide puhul seadet muul viisil fĂŒĂŒsiliselt vĂ€lja lĂŒlitada ei Ă”nnestu.

Pidi pĂ€ris kaua töötama jootmisraua, kÀÀrid ja kuumglue relvaga. ÜhesĂ”naga, skeemide „Ôhku” laadimine on tunduvalt mugavam, tuleks sellele kiirelt midagi vĂ€lja mĂ”elda.

Arduino IDE skeemide laadimise jaoks kasutab programmi avrdude. See suhtleb mikrokontrolleriga protokolli kaudu STK500, mis vĂ”imaldab edastada faile mĂ”lemas suunas. See ei sobi hĂ€sti kanalitega, kus on vĂ”imalikke muutuvaid viivitusi, moonutusi ja andmete kadumist. Kui seeria kanalis midagi laguneb vĂ”i kriuksub, vĂ”ib tasuda hulluks minna pĂ”hjuse otsimisel. Üks kord piinas autor ennast pool pĂ€eva, kuni leidis, et sĂŒĂŒ oli viletsas kaablis, samuti kapriisse CP2102 liidese muundajas. Isegi mikrokontroller sisseehitatud liidese muundajaga, nĂ€iteks ATmega32u4, vĂ”ib mĂ”nikord nii „lollitada”. Iga Arduino kasutaja on mĂ€rganud, et skeemide laadimisel esineb vigu, mis ei ole sugugi haruldased. MĂ”nikord kulgeb salvestamine normaalselt, kuid kontrollimisel leitakse viga. See ei tĂ€henda, et viga oleks olnud salvestamisel - tĂ”rge oli lugemisel. Ja nĂŒĂŒd kujutage ette, et „Ôhu“ kasutamisel juhtub sama, kuid palju sagedamini.

Proovides erinevaid viise selle probleemi ĂŒletamiseks, tuli autor vĂ€lja selle ideega. Seadmel on 128-kilobaitine vĂ€lkmĂ€lu SPI liidesega - vĂ”tame andmed juhtmete kaudu (meenutame, et ĂŒks seade autoril juba on kĂŒljel oleva pesaga), kasutame seda mĂ€lu puhvrina ja saadame andmed raadiosignaali kaudu teise seadmesse. Selline tervitus Cybikolt.

PĂ€rast koodi kirjutamist raadioside jaoks ja fonti, laadija pikkus suurenes ĂŒle 4 kilobaiti. SeetĂ”ttu tuli HFUSE vÀÀrtus muuta 0xDA-lt 0xD8-ks. NĂŒĂŒd vĂ”ib laadija olla kuni 8 kilobaiti pikk, ja algne aadress on 0x1E000. See on kajastatud Makefile'is, kuid peab olema arvesse vĂ”etud ka ĂŒleslaadimisel. laadijat avrdude abil.

802.15.4 standardiga raadiosaatja ATmega128RFA1 oli algselt mĂ”eldud töötama protokolli kaudu ZigBee, mis on ĂŒsna keeruline, seetĂ”ttu otsustas autor selle asemel lihtsalt pakette edastada. ATmega128RFA1-s on see riistvara tasemel ellu viidud, nii et kood vajab vĂ€he. Samuti otsustas autor lihtsuse huvides kasutada fikseeritud kanalit, jĂ€ttes isegi manuaalse valiku tegemise vĂ€lja. 802.15.4 standard toetab 16 kanalit numbritega 11 kuni 26. Need on ĂŒsna tĂ€is, mĂ”ni kattub ka WiFi kanalitega (ZigBee kanalid on esiletĂ”stetud punaselt, WiFi kanalid siniselt, roheliselt ja kollaselt).

Kirjutame OTA-laadijat ATmega128RFA1 jaoks (Smart Response XE seadme koosseisus)

Selgus, et WiFi hÀirete suhtes on kÔige vÀhem vastuvÔtlikud kanalid 15 ja 26. Teise neist valis autor. VÀljavÔte: tÔlkija ei tea, kas ZigBee lihtsustamine on lubatud. VÔib-olla tuleks veel veidi programmeerida ja see tÀielikult ellu viia?

Esimeses seadmes tuleb ellu viia lÔpukaart, mis edastab andmeid STK500 protokolli kaudu. Suurem osa edastatavatest ja vastuvÔetud sÔnumitest on iseseisvad, kuid mÔned on seotud varem kanali kaudu lÀbinud sÔnumitega. Dialooge kirjeldatakse. siin.

Oluline osa sellest dialoogist on paketivahetus, mis on mĂ”eldud sihtseadme mĂ€lusse salvestamiseks. Lihtsate AVR seeria mikrokontrollerite lehekĂŒlje suurus on 128 baiti, kuid ATmega128RFA1 puhul 256 baiti. Ja SPI-protokolli kaudu ĂŒhendatud vĂ€lkmĂ€lu puhul on see sama. Esimese seadme programm ei edasta sketĆĄi kohe teise seadmesse, vaid kirjutab selle sellesse mĂ€llu. Kui Arduino IDE kontrollib kirjutamise Ă”igsust, saadetakse sellele teave, mis sinna salvestati. NĂŒĂŒd tuleb saadud andmed edastada raadiokanali kaudu teise seadmesse. Seejuures toimub vastuvĂ”tult saatmisele ja vastupidi ĂŒleminek ĂŒsna sageli. STK500 protokoll ei ole viivituste suhtes tundlik, kuid mitte kunagi ei talu andmete kaotust (veider, et eespool öeldakse, et andmete edastamise viivitused mĂ”jutavad ka). Kuid kaotused juhtmeta edastamisel on vĂ€ltimatud. ATmega128RFA1 sisaldab riistvara teostust korduspĂ€ringute jaoks, kui edastamine on kaheldav, kuid autor otsustas selle ise programmiliselt rakendada. Ta töötas vĂ€lja protokolli, mille kĂ€igus edastatakse ĂŒhes suunas palju rohkem andmeid kui teises.

See ei ole ideaalne, kuid kĂ”ik töötab. 256-baitline lehekĂŒlg jaguneb neljaks segmendiks, millest igaĂŒht edastatakse raadiokanali kaudu paketina. Paketis on kuni 125 baiti andmeid pluss ĂŒks bait — pikkus ja kaks — CRC. Seega paigutatakse sinna 64-baitilised fragmendid koos lehekĂŒlje ja segmentide numbritega (0 kuni 3). VastuvĂ”tvas seadmes on olemas muutuja, mis vĂ”imaldab jĂ€lgida, kui palju segmente on vastu vĂ”etud, ja kui kĂ”ik neli saabuvad, saadetakse saatmise seadmesse kinnitamine, et kogu lehekĂŒlg on vastu vĂ”etud. Kui kinnitust ei tule (CRC ei ĂŒhti) — saadame kogu lehekĂŒlje uuesti. Sel juhul on edastuskiirus isegi suurem kui kaabli kaudu. Vaata:

MĂ€ngi videot

Kuid tegelikult tuleks ette nĂ€ha mugav viis seadmete ĂŒhendamiseks kaabli kaudu, et sketĆĄe sinna laadida. NĂ€iteks paigaldada selline CP2102 liidese muundur nagu pildil ja kleepida see plaadile nii, et see taluks ĂŒhendamise ja lahti ĂŒhendamise jĂ”udu Micro USB kaabli puhul.

Kirjutame OTA-laadijat ATmega128RFA1 jaoks (Smart Response XE seadme koosseisus)

Samuti on seal 3,3-voldine stabilisaator (ja kuidas seda kasutada 6-voldise toite allika seadmes — kui seal on sama stabilisaator, saab lisada kaks dioodi, et automaatselt valida, millisest toiteallikast seade töötab). Liidese muunduri plaadilt tuleb eemaldada kĂ”ik kolm LEDi, vastasel juhul koormavad need tĂ€iendavalt patareisid, kui seade töötab nende toiteallikast, ning segavad klaviatuuri kĂŒsimist ja SPI liidese vĂ€lkmĂ€lu tööd.

EesmÀrgi tagaajamine osutus isegi huvitavamaks kui selle saavutamine (ja ei, Àra too vÀlja seda anekdooti bussist). Autor Ôppis palju uut AVR-i kaloaderite, SPI liidese vÀlkmÀlu, STK500 protokolli ja 802.15.4 standardi kohta.

Kogu ĂŒlejÀÀnud kood koos eelpool kirjeldatud raamatukoguga — siin, ja see on samuti GPL v3 all. Autori Twitter — siin.

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster