Rydym yn ysgrifennu cychwynnydd OTA ar gyfer ATmega128RFA1 (fel rhan o'r ddyfais Smart Response XE)

Rydym yn ysgrifennu cychwynnydd OTA ar gyfer ATmega128RFA1 (fel rhan o'r ddyfais Smart Response XE)

Dechreuodd y cyfan gyda'r awdur yn prynu dyfais ddiddorol ar y farchnad eilaidd - Smart Response XE (disgrifiad byr). Fe'i bwriedir ar gyfer ysgolion: mae pob myfyriwr yn y dosbarth yn derbyn dyfais debyg i lyfr nodiadau electronig neu gyfieithydd o'r nawdegau, mae'r athro yn gofyn cwestiwn, ac mae'r myfyrwyr yn teipio'r atebion ar fysellfyrddau'r dyfeisiau, a dderbynnir trwy a sianel radio (802.15.4) i dderbynnydd sy'n gysylltiedig â PC yr athro.

Daeth y dyfeisiau hyn i ben sawl blwyddyn yn ôl, ac mae'r hyn a brynodd ysgolion am $100-$200 yr un bellach yn ymddangos ar eBay am $10 neu lai. Mae'r caledwedd yno yn addas iawn ar gyfer arbrofion geeky:

  • Bysellfwrdd 60 allwedd
  • arddangos gyda chydraniad o 384 × 136, 2 did y picsel - tebyg i BC, CGA, ond 4 nid lliw, ond graddiadau disgleirdeb
  • microreolydd ATmega128RFA1 (cof fflach 128 kB, 4 kB ROM, 16 kB RAM, transceiver 802.15.4)
  • allanol (mewn perthynas â'r microreolydd, nid y ddyfais gyfan) cof fflach 1 megabit (128 kilobyte) gyda rhyngwyneb SPI
  • adran ar gyfer 4 elfen AAA.

O enw'r microreolydd mae'n amlwg ei fod yn perthyn i'r teulu AVR, sy'n golygu bod gwneud y ddyfais yn gydnaws â Arduino yn dasg fwy na dibwys ...

O'r newyddion ymlaen Hackaday cafodd yr awdwr wybod beth ydyw wedi gwneud yn barod (mae'r un ddolen yn dweud wrthych beth i gysylltu ble), cael y cyfle i redeg gemau ar gyfer Arduboy:


Ond mae gan yr awdur fwy o ddiddordeb yn y cyfle i beidio â chwarae ar y ddyfais, ond i astudio:

  • cof fflach gyda rhyngwyneb SPI cyfresol
  • cychwynwyr ar gyfer AVR
  • safon 802.15.4

Dechreuodd yr awdur trwy ysgrifennu llyfrgelloedd (GPL v3), sy'n eich galluogi i gychwyn yr arddangosfa, testun allbwn a phetryalau, a chyrchu cof fflach SPI. Yna dechreuodd feddwl am syniadau ar gyfer defnydd ymarferol o'r ddyfais: terfynell boced gydnaws VT-100, gemau aml-chwaraewr. Ar ôl ailadeiladu tair dyfais, penderfynodd eu “dysgu” i dderbyn brasluniau “dros yr awyr.” Yr hyn a fyddai nid yn unig yn ddiddorol, ond hefyd yn gyfleus iawn: mae'r achos dyfais yn anodd ei agor bob tro, ac o dan y clawr adran batri dim ond tyllau sy'n eich galluogi i gysylltu rhaglennydd JTAG â'r bwrdd.

Rydym yn ysgrifennu cychwynnydd OTA ar gyfer ATmega128RFA1 (fel rhan o'r ddyfais Smart Response XE)

Mae hyn yn ddigon i uwchlwytho'r cychwynnydd Arduino, ond nid y braslun - nid yw'r porthladd cyfresol wedi'i gysylltu yno, felly ni allwch wneud heb agor yr achos o hyd. Hefyd, mae llinellau TX0 a RX0 y porthladd cyfresol cyntaf yn cael eu cyfuno â llinellau pleidleisio'r matrics bysellfwrdd, sef y rhai sy'n pleidleisio'r allweddi swyddogaeth ar ochrau'r arddangosfa. Ond beth allwch chi ei wneud - adeiladodd yr awdur hwn:

Rydym yn ysgrifennu cychwynnydd OTA ar gyfer ATmega128RFA1 (fel rhan o'r ddyfais Smart Response XE)

Daeth â'r llinellau JTAG yno, a nawr nid oes angen agor y compartment batri. Ac fel y gellid uwchlwytho brasluniau, cysylltais y ddau borth cyfresol â'r un cysylltydd, gan ychwanegu switsh hefyd, oherwydd gyda'r batris wedi'u gosod, mae'n gorfforol amhosibl diffodd y ddyfais mewn unrhyw ffordd arall.

Cymerodd dipyn o amser i weithio gyda haearn sodro, cyllell ddefnyddioldeb a gwn glud. Yn gyffredinol, mae uwchlwytho brasluniau “dros yr awyr” yn llawer mwy cyfleus; mae angen i ni ddyfeisio rhywbeth ar frys ar gyfer hyn.

Mae Arduino IDE yn defnyddio'r rhaglen i uwchlwytho brasluniau avrdude. Mae'n rhyngweithio â'r microreolydd gan ddefnyddio'r protocol STK500, sy'n eich galluogi i drosglwyddo ffeiliau i'r ddau gyfeiriad. Mae'n gydnaws yn wael â sianeli lle mae oedi amrywiol, ystumio a cholli data yn bosibl. Os daw rhywbeth yn rhydd neu'n siffrwd yn y sianel gyfresol, gallwch chi fynd yn wallgof i chwilio am yr achos. Unwaith y dioddefodd yr awdur am hanner diwrnod nes iddo sylweddoli mai cebl drwg oedd y broblem, yn ogystal â thrawsnewidydd rhyngwyneb CP2102 fympwyol. Gall hyd yn oed microreolydd gyda thrawsnewidydd rhyngwyneb adeiledig, er enghraifft, ATmega32u4, weithiau weithredu fel hyn. Mae pob defnyddiwr Arduino wedi sylwi nad yw gwallau wrth uwchlwytho brasluniau mor brin. Weithiau mae'r recordiad yn mynd yn dda, ond yn ystod darlleniad prawf canfyddir gwall. Nid yw hyn yn golygu bod gwall wrth ysgrifennu - bu methiant yn ystod darllen. Nawr dychmygwch wrth weithio “dros yr awyr” bydd yr un peth yn digwydd, ond yn llawer amlach.

Ar ôl rhoi cynnig ar wahanol ffyrdd o oresgyn y broblem hon, lluniodd yr awdur y canlynol. Mae gan y ddyfais gof fflach 128 KB gyda rhyngwyneb SPI - rydym yn derbyn data dros y gwifrau (cofiwch fod gan yr awdur eisoes un ddyfais gyda chysylltydd ar yr ochr), defnyddiwch y cof hwn fel byffer, ac anfonwch y data dros y radio sianel i ddyfais arall. Helo o Cybiko.

Ar ôl ysgrifennu'r cod i weithio gyda'r sianel radio, yn ogystal â'r ffont, daeth y llwythwr yn hirach na 4 kilobytes. Felly, roedd yn rhaid newid gwerth HFUSE o 0xDA i 0xD8. Nawr gall y cychwynnwr fod hyd at 8 kilobytes o hyd, a'r cyfeiriad cychwyn bellach yw 0x1E000. Adlewyrchir hyn yn y Makefile, ond dylid ei ystyried hefyd wrth lenwi cychwynnydd trwy avrdude.

Mae'r trosglwyddydd 802.15.4 yn yr ATmega128RFA1 wedi'i gynllunio'n wreiddiol i weithredu gan ddefnyddio'r protocol ZigBee, sy'n eithaf cymhleth, felly penderfynodd yr awdur drosglwyddo pecynnau yn lle hynny. Gweithredir hyn mewn caledwedd yn yr ATmega128RFA1, felly ychydig o god sydd ei angen. Hefyd, er mwyn symlrwydd, penderfynodd yr awdur ddefnyddio sianel sefydlog, heb ganiatáu i chi ei ddewis â llaw hyd yn oed. Mae'r safon 802.15.4 yn cefnogi 16 sianel gyda niferoedd o 11 i 26. Maent yn eithaf gorlawn, mae rhai hefyd yn gorgyffwrdd â sianeli WiFi (mae coch yn sianeli ZigBee, mae glas, gwyrdd a melyn yn WiFi).

Rydym yn ysgrifennu cychwynnydd OTA ar gyfer ATmega128RFA1 (fel rhan o'r ddyfais Smart Response XE)

Daeth i'r amlwg mai sianeli 15 a 26 sydd leiaf agored i ymyrraeth gan WiFi. Dewisodd yr awdur yr ail ohonynt. Ymwadiad: nid yw'r cyfieithydd yn gwybod a yw'n cael symleiddio ZigBee fel hyn. Efallai y dylem wneud ychydig mwy o raglennu a'i weithredu'n llwyr?

Ar y ddyfais gyntaf, mae angen gweithredu peiriant cyflwr cyfyngedig sy'n trosglwyddo data trwy'r protocol STK500. Ar y cyfan, mae'r negeseuon a drosglwyddir ac a dderbynnir yn hunangynhaliol, ond mae rhai yn gysylltiedig â'r rhai a aeth trwy'r sianel yn gynharach. Rhoddir disgrifiad o'r ddeialog yma.

Elfen bwysig o'r ddeialog hon yw trosglwyddo pecynnau y bwriedir eu hysgrifennu i gof fflach y ddyfais cyrchfan. Ar gyfer microreolwyr syml y teulu AVR, maint y dudalen yw 128 bytes, ond ar gyfer yr ATmega128RFA1 mae'n 256. Ac ar gyfer y cof fflach sy'n gysylltiedig trwy'r protocol SPI, mae yr un peth. Nid yw'r rhaglen yn y ddyfais gyntaf, wrth uwchlwytho braslun, yn ei drosglwyddo ar unwaith i'r ail, ond yn ei ysgrifennu i'r cof hwn. Pan fydd yr Arduino IDE yn gwirio cywirdeb y cofnod, anfonir yr hyn a ysgrifennwyd yno. Nawr mae angen i ni drosglwyddo'r data a dderbyniwyd trwy sianel radio i'r ail ddyfais. Ar yr un pryd, mae newid o dderbyn i drosglwyddo ac yn ôl yn digwydd yn eithaf aml. Mae'r protocol STK500 yn ddifater i oedi, ond nid yw'n goddef colli data (rhyfedd, ond dywedwyd uchod bod oedi hefyd yn effeithio ar drosglwyddo data). Ac mae colledion yn ystod trosglwyddiad diwifr yn anochel. Mae gan yr ATmega128RFA1 weithrediad caledwedd adeiledig o geisiadau dro ar ôl tro pan fo amheuon ynghylch cywirdeb y trosglwyddiad, ond penderfynodd yr awdur weithredu'r un peth mewn meddalwedd ei hun. Datblygodd brotocol lle mae llawer mwy o ddata yn llifo un ffordd na'r llall.

Nid yw'n berffaith, ond mae'n gweithio. Mae'r dudalen 256-beit wedi'i rhannu'n bedwar segment, pob un ohonynt yn cael ei drawsyrru dros yr awyr fel pecyn. Gall pecyn ddal hyd at 125 beit o ddata ynghyd ag un beit am hyd a dau beit ar gyfer CRC. Felly mae darnau 64 beit o hyd ynghyd â rhifau tudalennau a segmentau (o 0 i 3) yn cael eu gosod yno. Mae gan y ddyfais sy'n derbyn newidyn sy'n ei alluogi i olrhain faint o segmentau sydd wedi'u derbyn, a phan fydd y pedwar yn cyrraedd, mae'r ddyfais anfon yn derbyn cadarnhad bod y dudalen gyfan wedi'i derbyn. Dim cadarnhad (nid oedd CRC yn cyfateb) - ail-anfonwch y dudalen gyfan. Mae'r cyflymder hyd yn oed yn fwy nag wrth drosglwyddo trwy gebl. Gweler:


Ond yn gyffredinol, byddai angen darparu ffordd gyfleus i gysylltu'r cebl â'r dyfeisiau ar gyfer uwchlwytho brasluniau a thrwyddo. Er enghraifft, rhowch y tu mewn i drawsnewidydd rhyngwyneb o'r fath ar y CP2102, fel yn y llun, a'i gludo i'r bwrdd fel y gall wrthsefyll y grym wrth gysylltu a datgysylltu'r cebl Micro USB.

Rydym yn ysgrifennu cychwynnydd OTA ar gyfer ATmega128RFA1 (fel rhan o'r ddyfais Smart Response XE)

Mae ganddo hefyd sefydlogydd 3,3-folt (a sut i'w ddefnyddio mewn dyfais gyda chyflenwad pŵer 6-folt - os mai dim ond yr un sefydlogydd sydd ganddo, a gallwch chi ychwanegu dau ddeuod i ddewis yn awtomatig pa un ohonyn nhw fydd yn pweru'r ddyfais) . Rhaid i'r tri LED fod heb eu sodro o'r bwrdd trawsnewidydd rhyngwyneb, fel arall byddant hefyd yn llwytho'r batris wrth weithredu arnynt, a hefyd yn ymyrryd â phleidleisio bysellfwrdd a gweithio gyda chof fflach gyda rhyngwyneb SPI.

Roedd ceisio nod hyd yn oed yn fwy diddorol na'i chyflawni (a does dim angen y jôc yna am y bws). Dysgodd yr awdur lawer am lwythwyr cychwyn AVR, cof fflach SPI, protocol STK500 a safon 802.15.4.

Pob cod arall yn ychwanegol at y llyfrgell a ddisgrifir uchod yw − yma, ac mae hefyd o dan GPL v3. Trydar yr Awdur - yma.

Ffynhonnell: hab.com

Ychwanegu sylw