Við erum að skrifa OTA ræsiforrit fyrir ATmega128RFA1 (sem hluti af Smart Response XE tækinu)

Við erum að skrifa OTA ræsiforrit fyrir ATmega128RFA1 (sem hluti af Smart Response XE tækinu)

Þetta byrjaði allt með því að höfundur keypti áhugavert tæki á eftirmarkaði - Smart Response XE (Stutt lýsing). Það er ætlað skólum: hver nemandi í bekknum fær tæki sem líkist rafrænni minnisbók eða þýðanda frá 802.15.4. áratugnum, kennarinn spyr spurningar og nemendur skrifa svörin á lyklaborð tækjanna sem berast í gegnum a. útvarpsrás (XNUMX) við móttakara sem er tengdur við tölvu kennarans.

Þessum tækjum var hætt fyrir nokkrum árum og það sem skólar keyptu fyrir $100-$200 hver er nú að skjóta upp kollinum á eBay fyrir $10 eða minna. Vélbúnaðurinn þar er mjög hentugur fyrir nördatilraunir:

  • 60 lykla lyklaborð
  • skjár með upplausn 384×136, 2 bitar á pixla - svipað og BC, CGA, en 4 ekki litir, heldur birtustig
  • örstýring ATmega128RFA1 (128 kB flassminni, 4 kB ROM, 16 kB vinnsluminni, 802.15.4 senditæki)
  • ytra (í tengslum við örstýringuna, ekki allt tækið) 1 megabit (128 kílóbæti) flassminni með SPI tengi
  • hólf fyrir 4 AAA þætti.

Af nafni örstýringarinnar er ljóst að hann tilheyrir AVR fjölskyldunni, sem þýðir að gera tækið Arduino-samhæft er meira en léttvægt verkefni...

Frá fréttum Hackday höfundur komst að því hvað það er hafa þegar gert (sami hlekkur segir þér hvað þú átt að tengja hvar), með tækifæri til að keyra leiki fyrir Arduboy:


En höfundur hefur meiri áhuga á tækifærinu til að spila ekki á tækinu heldur læra:

  • flassminni með serial SPI tengi
  • ræsihleðslutæki fyrir AVR
  • staðall 802.15.4

Höfundur byrjaði á því að skrifa bókasöfn (GPL v3), sem gerir þér kleift að frumstilla skjáinn, gefa út texta og ferhyrninga og fá aðgang að SPI flassminni. Svo fór hann að koma með hugmyndir að hagnýtri notkun tækisins: VT-100-samhæfða vasaútstöð, fjölspilunarleiki. Eftir að hafa endurbyggt þrjú tæki ákvað hann að „kenna“ þeim að taka á móti skissum „í loftinu“. Það sem væri ekki aðeins áhugavert heldur líka mjög þægilegt: erfitt er að opna tækið í hvert skipti og undir rafhlöðuhólfinu eru aðeins göt sem gera þér kleift að tengja JTAG forritara við borðið.

Við erum að skrifa OTA ræsiforrit fyrir ATmega128RFA1 (sem hluti af Smart Response XE tækinu)

Þetta er nóg til að hlaða upp Arduino ræsiforritinu, en ekki skissuna - raðtengi er ekki tengt þar, svo þú getur samt ekki gert án þess að opna hulstrið. Einnig eru TX0 og RX0 línur fyrsta raðtengisins sameinaðar skoðanalínur lyklaborðsfylkisins, þ.e. þær sem skoða aðgerðartakkana á hliðum skjásins. En hvað geturðu gert - höfundurinn byggði þetta:

Við erum að skrifa OTA ræsiforrit fyrir ATmega128RFA1 (sem hluti af Smart Response XE tækinu)

Hann kom með JTAG línurnar þangað og nú er óþarfi að opna rafhlöðuhólfið. Og til þess að hægt væri að hlaða upp skissum tengdi ég bæði raðtengin við sama tengið og bætti líka við rofa því með rafhlöðurnar uppsettar er líkamlega ómögulegt að slökkva á tækinu á annan hátt.

Það tók töluverðan tíma að vinna með lóðajárn, nytjahníf og límbyssu. Almennt séð er miklu þægilegra að hlaða upp skissum „í loftinu“; við þurfum brýn að finna upp eitthvað fyrir þetta.

Arduino IDE notar forritið til að hlaða upp skissum avrdude. Það hefur samskipti við örstýringuna með því að nota siðareglur STK500, sem gerir þér kleift að flytja skrár í báðar áttir. Það er illa samhæft við rásir þar sem breytilegar tafir, röskun og gagnatap eru möguleg. Ef eitthvað losnar eða ryssar í raðrásinni geturðu farið brjálaður að leita að orsökinni. Einu sinni þjáðist höfundurinn í hálfan dag þar til hann áttaði sig á því að vandamálið var slæmur kapall, sem og duttlungafullur CP2102 tengibreytir. Jafnvel örstýringur með innbyggðum viðmótsbreytir, til dæmis ATmega32u4, getur stundum virkað svona. Sérhver Arduino notandi hefur tekið eftir því að villur við að hlaða upp skissum eru ekki svo sjaldgæfar. Stundum gengur upptakan vel en við próflestur kemur í ljós villa. Þetta þýðir ekki að það hafi verið villa við ritun - það var bilun við lestur. Ímyndaðu þér nú að þegar unnið er „í loftinu“ muni það sama gerast, en miklu oftar.

Eftir að hafa reynt mismunandi leiðir til að vinna bug á þessu vandamáli, komst höfundur að eftirfarandi. Tækið er með 128 KB flassminni með SPI viðmóti - við tökum á móti gögnum um vír (munið að höfundur er nú þegar með eitt tæki með tengi á hliðinni), notum þetta minni sem biðminni og sendum gögnin í gegnum útvarpið rás í annað tæki. Halló frá Cybiko.

Eftir að hafa skrifað kóðann til að vinna með útvarpsrásinni, sem og leturgerðina, varð hleðslutækið lengri en 4 kílóbæti. Þess vegna þurfti að breyta HFUSE gildinu úr 0xDA í 0xD8. Nú getur ræsiforritið verið allt að 8 kílóbæti að lengd og upphafsslóðin er nú 0x1E000. Þetta endurspeglast í Makefile, en ætti einnig að taka tillit til þess þegar fyllt er út bootloader í gegnum avrdude.

802.15.4 senditækið í ATmega128RFA1 er upphaflega hannað til að starfa með samskiptareglum ZigBee, sem er frekar flókið, svo höfundur ákvað að senda bara pakka í staðinn. Þetta er útfært í vélbúnaði í ATmega128RFA1, svo lítill kóða þarf. Einnig, til einföldunar, ákvað höfundur að nota fasta rás, sem leyfði þér ekki að velja hana handvirkt. 802.15.4 staðallinn styður 16 rásir með tölum frá 11 til 26. Þær eru frekar fjölmennar, sumar skarast einnig WiFi rásir (rauð eru ZigBee rásir, blár, grænn og gulur eru WiFi).

Við erum að skrifa OTA ræsiforrit fyrir ATmega128RFA1 (sem hluti af Smart Response XE tækinu)

Í ljós kom að rásir 15 og 26 eru minnst viðkvæmar fyrir truflunum frá WiFi. Höfundur valdi aðra þeirra. Fyrirvari: þýðandinn veit ekki hvort leyfilegt sé að einfalda ZigBee með þessum hætti. Kannski ættum við að gera aðeins meiri forritun og innleiða hana alveg?

Á fyrsta tækinu er nauðsynlegt að útfæra endanlegt ástand vél sem sendir gögn í gegnum STK500 samskiptareglur. Að mestu leyti eru skilaboðin sem send eru og móttekin sjálfbær, en sum eru bundin þeim sem fóru um rásina fyrr. Lýsing á samræðunni er gefin hér.

Mikilvægur þáttur í þessari umræðu er sending pakka sem ætlað er að skrifa í leifturminni áfangatækisins. Fyrir einfalda örstýringar af AVR fjölskyldunni er blaðsíðustærðin 128 bæti, en fyrir ATmega128RFA1 er hún 256. Og fyrir flassminnið sem er tengt í gegnum SPI samskiptareglur er það það sama. Forritið í fyrra tækinu, þegar skissu er hlaðið upp, flytur það ekki strax yfir í það síðara, heldur skrifar það í þetta minni. Þegar Arduino IDE athugar réttmæti færslunnar er sent það sem þar var skrifað. Nú þurfum við að senda móttekin gögn í gegnum útvarpsrás í annað tækið. Á sama tíma er skipt frá móttöku yfir í sendingu og til baka nokkuð oft. STK500 samskiptareglan er sama um tafir, en þolir ekki gagnatap (skrýtið, en það var sagt hér að ofan að tafir hafi líka áhrif á gagnaflutning). Og tap við þráðlausa sendingu er óhjákvæmilegt. ATmega128RFA1 er með innbyggða vélbúnaðarútfærslu á endurteknum beiðnum þegar efasemdir eru um réttmæti flutningsins, en höfundur ákvað að innleiða það sama í hugbúnaði sjálfur. Hann þróaði siðareglur þar sem mun meiri gögn flæða á einn veg en hina.

Það er ekki fullkomið, en það virkar. 256-bæta síðunni er skipt í fjóra hluta sem hver um sig er sendur í loftinu sem pakki. Pakki getur geymt allt að 125 bæti af gögnum auk eitt bæti fyrir lengd og tvö bæti fyrir CRC. Þannig að brot sem eru 64 bæti löng ásamt blaðsíðu- og hlutanúmerum (frá 0 til 3) eru sett þar. Móttökutækið er með breytu sem gerir því kleift að fylgjast með hversu margir hlutir hafa borist og þegar allir fjórir koma fær sendandi tækið staðfestingu á því að öll síðan hafi verið móttekin. Engin staðfesting (CRC passaði ekki) - sendu alla síðuna aftur. Hraðinn er jafnvel meiri en þegar sent er í gegnum kapal. Sjá:


En almennt væri nauðsynlegt að bjóða upp á þægilega leið til að tengja snúruna við tækin til að hlaða upp skissum og í gegnum hana. Til dæmis, settu inn í slíkan tengibreyti á CP2102, eins og á myndinni, og límdu hann á borðið þannig að hann þoli kraftinn þegar þú tengir og aftengir Micro USB snúruna.

Við erum að skrifa OTA ræsiforrit fyrir ATmega128RFA1 (sem hluti af Smart Response XE tækinu)

Hann er líka með 3,3 volta sveiflujöfnun (og hvernig á að nota hann í tæki með 6 volta aflgjafa - ef hann er bara með sama sveiflujöfnun og þú getur bætt við tveimur díóðum til að velja sjálfkrafa hver þeirra mun knýja tækið) . Allar þrjár ljósdídurnar verða að vera ólóðaðar frá viðmótsbreytiborðinu, annars hlaða þær rafhlöðurnar til viðbótar þegar þær eru notaðar, og trufla einnig lyklaborðsmælingu og vinna með flassminni með SPI tengi.

Að sækjast eftir markmiði reyndist jafnvel áhugaverðara en að ná því (og þarf ekki grínið um strætó). Höfundur lærði mikið um AVR ræsibúnað, SPI flassminni, STK500 samskiptareglur og 802.15.4 staðalinn.

Allur annar kóði til viðbótar við bókasafnið sem lýst er hér að ofan er - hér, og það er líka undir GPL v3. Twitter höfundar - hér.

Heimild: www.habr.com

Bæta við athugasemd