Po shkruajmë një ngarkues OTA për ATmega128RFA1 (në përbërje të pajisjes Smart Response XE)

Po shkruajmë një ngarkues OTA për ATmega128RFA1 (në përbërje të pajisjes Smart Response XE)

Çdo gjĂ« filloi me blerjen nga autori nĂ« tregun e dytĂ« tĂ« njĂ« pajisjeje interesante — Smart Response XE (pĂ«rshkrimi i shkurtĂ«r). Ajo Ă«shtĂ« e destinuar pĂ«r shkolla: çdo nxĂ«nĂ«s nĂ« klasĂ« merr njĂ« pajisje, e ngjashme me njĂ« libĂ«r elektronik ose njĂ« pĂ«rkthyes tĂ« viteve '90, mĂ«suesi bĂ«n njĂ« pyetje, dhe nxĂ«nĂ«sit shkruajnĂ« pĂ«rgjigjet nĂ« tastierat e pajisjeve, qĂ« transmetohen pĂ«rmes njĂ« kanali radio (802.15.4) nĂ« marrĂ«sin e lidhur me kompjuterin e mĂ«suesit.

Mbështetje për këto pajisje u ndërpre disa vite më parë, dhe ajo që shkollat blenë për 100-200 dollarë për copë tani duket në eBay për 10 dollarë ose më pak. "Hardueri" atje është shumë i përshtatshëm për eksperimente geek:

  • tastiera me 60 çelĂ«sa
  • ekrani me njĂ« rezolucion 384×136, 2 bite pĂ«r piksel — nĂ« pĂ«rputhje me BK, CGA, por 4 nuk janĂ« ngjyra, por gradacione ndriçimi
  • mikrokontrolleri ATmega128RFA1 (128 kB memorie flash, 4 kB RAM, 16 kB ROM, transmiter-receptor standardi 802.15.4)
  • memoria e jashtme (nĂ« raport me mikrokontrollerin, dhe jo tĂ« gjithĂ« pajisjen) me 1 megabitet (128 kilobyte) me ndĂ«rfaqen SPI
  • ndarja pĂ«r 4 elemente AAA.

Nga emri i mikrokontrollerit është e qartë se ai i përket familjes AVR, dhe kështu, të bësh pajisjen të pajtueshme me Arduino është një detyrë më shumë se triviale...

Nga lajmi në Hackaday autori mësoi se këtë kishin bërë (në këtë lidhje gjithashtu tregohet se ku të lidhesh), duke fituar mundësinë për të lëshuar lojëra për Arduboy:

Luaj videon

Por autori është më shumë i interesuar për mundësinë e studimit se sa të luajë në pajisje:
  • memoria flash me ndĂ«rfaqe seri SPI
  • bootloaders pĂ«r AVR
  • standardin 802.15.4

Autori filloi me shkrimin bibliotekës (GPL v3), e cila lejon inicializimin e ekranit, shfaqjen e tekstit dhe drejtkëndëshave, si dhe aksesin në memorie flash me ndërfaqe SPI. Pastaj ai filloi të mendojë ide për përdorimin praktik të pajisjes: një terminal i përshtatshëm për VT-100, lojëra shumëpërdoruesi. Pasi modifikoi tre pajisje, ai vendosi "të mësojë" ato të marrin skenare "në ajër". Kjo do të ishte jo vetëm interesante, por edhe shumë e përshtatshme: hapja e çdo herë e korpusit është e vështirë, dhe nën kapakun e ndarjes së baterisë janë vetëm vrima që lejojnë lidhjen me mbushësin JTAG.

Po shkruajmë një ngarkues OTA për ATmega128RFA1 (në përbërje të pajisjes Smart Response XE)

Kjo mjafton pĂ«r tĂ« ngarkuar bootloader Arduino, por jo skenarin — porta seri nuk Ă«shtĂ« e dalĂ«, prandaj nuk mund tĂ« kalosh pa hapjen e korpusit. Po ashtu, linjat TX0 dhe RX0 tĂ« portĂ«s sĂ« parĂ« seriale janĂ« tĂ« kombinuara me linjat e matjes sĂ« tastierĂ«s, dmth. ato me tĂ« cilat bĂ«het matja e çelĂ«save funksionalĂ« nga tĂ« dy anĂ«t e ekranit. Por çfarĂ« mund tĂ« bĂ«j — autori shpiku kĂ«tĂ«:

Po shkruajmë një ngarkues OTA për ATmega128RFA1 (në përbërje të pajisjes Smart Response XE)

Ai i nxori linjat JTAG, dhe tani nuk është e nevojshme të hapet ndarja e baterisë. Dhe për të mundësuar ngarkimin e skenarëve, ai nxori në të njëjtin konektor edhe të dy portat seriale, gjithashtu duke shtuar një ndërrues, sepse kur janë vendosur bateritë, pajisja nuk mund të fiket fizikisht në ndryshe.

I desh të punonte për një kohë të gjatë me telin, thikën e zyrës dhe pistolën e ngjitësit. Në përgjithësi, ngarkimi i skenarëve "në ajër" është shumë më i rehatshëm, është e nevojshme të shpikim diçka urgjente.

Arduino IDE pĂ«r tĂ« ngarkuar skenarĂ«t pĂ«rdor programin avrdude. Ai komunikon me mikrokontrollerin pĂ«rmes protokollit STK500, i cili lejon transmetimin e skedarĂ«ve nĂ« tĂ« dy anĂ«t. Ai Ă«shtĂ« pak i papĂ«rshtatshĂ«m me kanalet ku kanĂ« mundĂ«si vonesa tĂ« ndryshueshme, deformim dhe humbje tĂ« tĂ« dhĂ«nave. NĂ«se nĂ« kanalin seri diçka shkakton zhurmĂ«, mund tĂ« tĂ« çmend nĂ« kĂ«rkimin e arsyes. NjĂ« herĂ« autori u mĂ«rzit pĂ«r gjysmĂ« ditĂ« derisa kuptoi se problemi ishte nĂ« njĂ« kabllo tĂ« keqe, si dhe nĂ« njĂ« konvertues tĂ« marrĂ«veshjes CP2102 tĂ« brishtĂ«. Edhe mikrokontrolleri me konvertuesin e marrĂ«veshjes tĂ« integruar, pĂ«r shembull, ATmega32u4, mund tĂ« sjellĂ« probleme tĂ« tilla. Çdo pĂ«rdorues i Arduino e ka vĂ«nĂ« re se gabimet gjatĂ« ngarkimit tĂ« skenarĂ«ve nuk janĂ« aq tĂ« rralla. NdonjĂ«herĂ« regjistrimi kalon normalisht, por gjatĂ« leximit tĂ« verifikimit zbulohet njĂ« gabim. Kjo nuk do tĂ« thotĂ« se gabimi ndodhi gjatĂ« regjistrimit — dĂ«shtimi ndodhi gjatĂ« leximit. Dhe tani imagjino qĂ« kur punoni "nĂ« ajĂ«r" ndodhin tĂ« njĂ«jtat gjĂ«ra, por shumĂ« mĂ« shpesh.

Pasi provova mĂ«nyra tĂ« ndryshme pĂ«r tĂ« tejkaluar kĂ«tĂ« problem, autori shpiku kĂ«tĂ«. Pajisja ka njĂ« memorie flash 128 kilobajt me ndĂ«rfaqe SPI — pranojmĂ« tĂ« dhĂ«nat pĂ«rmes kabllit (kujtojmĂ« se njĂ« pajisje me konektor anĂ«sor tashmĂ« e ka autori), pĂ«rdorim kĂ«tĂ« memorie si njĂ« tampon dhe dĂ«rgojmĂ« tĂ« dhĂ«nat me anĂ« tĂ« kanalit radio nĂ« njĂ« pajisje tjetĂ«r. Ky Ă«shtĂ« njĂ« pĂ«rshĂ«ndetje nga Cybiko.

Pas pastrimit të kodit për punën me kanalin radio, si dhe të fontit, bootloader-i u bë më i gjatë se 4 kilobajt. Prandaj, vlera HFUSE duhej të ndryshohej nga 0xDA në 0xD8. Tani bootloader-i mund të ketë një gjatësi deri në 8 kilobajt, dhe adresa fillestare është 0x1E000. Kjo pasqyrohet në Makefile, por duhet marrë parasysh edhe gjatë ngarkimit. bootloader-it me ndihmën e avrdude.

Transmiter-receptor i standardit 802.15.4 në ATmega128RFA1 fillimisht është ndërtuar për të punuar sipas protokolit ZigBee, i cili është mjaft kompleks, prandaj autori vendosi që thjesht të transferojë paketa. Kjo është realizuar harduerikisht në ATmega128RFA1, kështu që do të nevojitet pak kod. Gjithashtu, për thjeshtësi, autori vendosi të përdorë një kanal të fiksuar, pa lejuar zgjedhjen e tij as manualisht. Standardi 802.15.4 mbështet 16 kanale me numra nga 11 deri në 26. Ato janë mjaft të mbushura, disa gjithashtu përplasin kanalet WiFi (kanalet ZigBee janë të shënuara me të kuqe, ndërsa WiFi me të blu, të gjelbër dhe të verdhë).

Po shkruajmë një ngarkues OTA për ATmega128RFA1 (në përbërje të pajisjes Smart Response XE)

Doli se kanalet 15 dhe 26 janë më pak të ndjeshme ndaj ndërhyrjeve nga WiFi. Autori zgjodhi të dytin. Disclamer: përkthyesi nuk e di nëse është e lejuar të thjeshtohet kështu ZigBee. Ndoshta duhet të programohet pak më shumë për ta realizuar plotësisht?

Në një nga pajisjet duhet të realizohet një automat fundor që transferon të dhënat sipas protokollit STK500. Kryesisht, mesazhet e dërguara dhe të pranuara janë të vetë-mjaftueshme, por disa janë të lidhura me ato që kanë kaluar në kanal më parë. Përshkrimi i dialogut jepet këtu.

NjĂ« komponent i rĂ«ndĂ«sishĂ«m i kĂ«tij dialogu Ă«shtĂ« transferimi i paketeve tĂ« destinuara pĂ«r shkrimin nĂ« memories flash tĂ« pajisjes qĂ« merr. PĂ«r mikro-kontrollorĂ«t e zakonshĂ«m tĂ« familjes AVR, madhĂ«sia e faqes Ă«shtĂ« 128 bajta, por pĂ«r ATmega128RFA1 – 256. Po ashtu, pĂ«r memory-nĂ« flash qĂ« lidhet pĂ«rmes protokollit SPI, Ă«shtĂ« e njĂ«jtĂ«. Programi nĂ« pajisjen e parĂ«, gjatĂ« ngarkimit tĂ« sketched, nuk e dĂ«rgon atĂ« menjĂ«herĂ« nĂ« tĂ« dytĂ«n, por e ruan atĂ« nĂ« kĂ«tĂ« memory. Kur Arduino IDE kontrollon saktĂ«sisĂ« tĂ« shkrimit, ajo dĂ«rgon ato qĂ« janĂ« regjistruar atje. Tani, Ă«shtĂ« e nevojshme tĂ« dĂ«rgohen tĂ« dhĂ«nat e marra pĂ«rmes kanali radio nĂ« pajisjen e dytĂ«. NdĂ«rsa, kalimi nga marrja nĂ« dĂ«rgim dhe kĂ«ndvĂ«shtrimi ndodh mjaft shpesh. Protokolli STK500 Ă«shtĂ« indiferent ndaj vonesave, por nuk duron humbje tĂ« tĂ« dhĂ«nave (ĂšhtĂ« e çuditshme, por mĂ« sipĂ«r thuhet se vonesat nĂ« transferimin e tĂ« dhĂ«nave kanĂ« ndikim). Dhe humbjet gjatĂ« transferimit pa tela janĂ« tĂ« pashmangshme. NĂ« ATmega128RFA1 Ă«shtĂ« e integruar njĂ« implementim harduerik i kĂ«rkesave tĂ« pĂ«rsĂ«ritura nĂ« rast tĂ« dyshim pĂ«r saktĂ«sinĂ« e transferimit, por autori vendosi ta realizojĂ« tĂ« njĂ«jtĂ«n gjĂ« nĂ« mĂ«nyrĂ« programore. Ai zhvilloi njĂ« protokoll, ku nĂ« njĂ« drejtim kalojnĂ« shumĂ« mĂ« tepĂ«r tĂ« dhĂ«na se sa nĂ« anĂ«n tjetĂ«r.

Ai nuk Ă«shtĂ« perfekt, por gjithçka punon. Faqja 256-bajtĂ« ndahet nĂ« katĂ«r segmente, secili prej tĂ« cilĂ«ve dĂ«rgohet pĂ«rmes kanali radio si njĂ« paketĂ«. Paketa pĂ«rmban deri nĂ« 125 bajta tĂ« dhĂ«na plus njĂ« bajt pĂ«r gjatĂ«si dhe dy pĂ«r CRC. KĂ«shtu, fragmente prej 64 bajtash sĂ« bashku me numrat e faqeve dhe segmenteve (nga 0 nĂ« 3) vendosen aty. NĂ« pajisjen e pranuese parashikohet njĂ« ndryshore qĂ« lejon tĂ« ndjekĂ« sa segmente janĂ« pranuar, dhe kur tĂ« katĂ«r mbĂ«rrijnĂ«, dĂ«rgohet njĂ« konfirmim nĂ« pajisjen dĂ«rguese se e gjithĂ« faqja Ă«shtĂ« pranuar. NĂ«se nuk ka konfirmim (CRC nuk pĂ«rputhet) – dĂ«rgohet e gjithĂ« faqja pĂ«rsĂ«ri. ShpejtĂ«sia nĂ« kĂ«tĂ« rast del madje mĂ« e madhe se transferimi pĂ«rmes kabllit. Shihni:

Luaj videon

Por gjithsesi, duhet parashikuar një mënyrë të përshtatshme për të lidhur kabllon në pajisje për ngarkimin e sketched dhe përmes saj. Për shembull, të vendoset brenda një konvertuesi interfejse të tillë si CP2102, si në foto, dhe të ngjitet në bord në një mënyrë që të mbajë forcën gjatë lidhjes dhe shkëputjes së kabllit Micro USB.

Po shkruajmë një ngarkues OTA për ATmega128RFA1 (në përbërje të pajisjes Smart Response XE)

Gjithashtu, pĂ«rmban njĂ« stabilizues 3.3-voltesh (dhe si mund tĂ« pĂ«rdoret nĂ« njĂ« pajisje me furnizim 6-voltesh – pĂ«rveç nĂ«se ka njĂ« stabilizues tĂ« tillĂ«, dhe mund tĂ« shtohet dy dioda pĂ«r tĂ« zgjedhur automatikisht nga cili prej tyre pajisja do tĂ« furnizohet). Nga bordi i konvertuesit tĂ« interfejsit duhet tĂ« hiqen tĂ« tre dritat LED, pĂ«rndryshe ato do tĂ« ngarkonin pĂ«r ekstra bateritĂ« gjatĂ« punĂ«s prej tyre, dhe gjithashtu do tĂ« pengonin pyetjen e tastierĂ«s dhe punĂ«n me memories flash me ndĂ«rfaqen SPI.

Arritja e qëllimit u duk edhe më interesante se sa arritja e tij (dhe nuk ka nevojë për atë anekdotën për autobus). Autori mësoi shumë gjëra të reja për bootloader-at për AVR, memories flash me ndërfaqen SPI, protokollin STK500 dhe standardin 802.15.4.

Të gjithë kodi tjetër përveç bibliotekës së përshkruar më sipër është këtu, dhe ai gjithashtu është nën GPL v3. Twitter-i i autorit është këtu.

Burimi: habr.com

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster