Ni skribas OTA-ŝargilon por ATmega128RFA1 (kiel parto de la aparato Smart Response XE)

Ni skribas OTA-ŝargilon por ATmega128RFA1 (kiel parto de la aparato Smart Response XE)

Ĉio komenciĝis kun la aŭtoro aĉetanta interesan aparaton sur la malĉefa merkato - Smart Response XE (Mallonga priskribo). Ĝi estas destinita al lernejoj: ĉiu lernanto en la klaso ricevas aparaton similan al elektronika kajero aŭ tradukisto el la naŭdekaj jaroj, la instruisto faras demandon, kaj la lernantoj tajpas la respondojn sur la klavaroj de la aparatoj, kiujn oni ricevas pere de radiokanalo (802.15.4) al ricevilo konektita al la komputilo de la instruisto.

Ĉi tiuj aparatoj estis ĉesigitaj antaŭ pluraj jaroj, kaj kiaj lernejoj aĉetis po $100-$200 ĉiu nun aperas sur eBay por $10 aŭ malpli. La aparataro tie estas tre taŭga por geekaj eksperimentoj:

  • 60 klava klavaro
  • ekrano kun rezolucio de 384×136, 2 bitoj per pikselo - simila al BC, CGA, sed 4 ne koloroj, sed gradoj de brilo
  • mikroregilo ATmega128RFA1 (128 kB fulmmemoro, 4 kB ROM, 16 kB RAM, 802.15.4 radioricevilo)
  • ekstera (rilate al la mikroregilo, ne la tuta aparato) 1 megabit (128 kilobajto) fulmmemoro kun SPI-interfaco
  • kupeo por 4 AAA-elementoj.

El la nomo de la mikroregilo estas klare, ke ĝi apartenas al la familio AVR, kio signifas, ke fari la aparaton kongrua kun Arduino estas pli ol bagatela tasko...

De la novaĵoj plu Hackday la aŭtoro eksciis, kio ĝi estas jam faris (la sama ligo diras al vi kion konekti kie), havante la ŝancon ruli ludojn por Arduboy:


Sed la aŭtoro pli interesiĝas pri la ŝanco ne ludi sur la aparato, sed studi:

  • fulmmemoro kun seria SPI-interfaco
  • ekŝargiloj por AVR
  • normo 802.15.4

La aŭtoro komencis skribante bibliotekoj (GPL v3), kiu ebligas al vi pravalorigi la ekranon, eligi tekston kaj rektangulojn, kaj aliri SPI-memoron. Tiam li komencis elpensi ideojn por praktika uzo de la aparato: poŝterminalo kongrua kun VT-100, plurludantaj ludoj. Rekonstruinte tri aparatojn, li decidis "instrui" ilin ricevi skizojn "super la aero." Kio estus ne nur interesa, sed ankaŭ tre oportuna: la aparato-kazo estas malfacile malfermebla ĉiufoje, kaj sub la kuirilaro kupeo estas nur truoj, kiuj permesas vin konekti JTAG-programiston al la tabulo.

Ni skribas OTA-ŝargilon por ATmega128RFA1 (kiel parto de la aparato Smart Response XE)

Ĉi tio sufiĉas por alŝuti la Arduino-ŝargilon, sed ne la skizon - la seria haveno ne estas konektita tie, do vi ankoraŭ ne povas fari sen malfermi la kazon. Ankaŭ, la TX0 kaj RX0-linioj de la unua seria haveno estas kombinitaj kun la balotlinioj de la klavara matrico, nome tiuj kiuj sondas la funkcioklavojn sur la flankoj de la ekrano. Sed kion vi povas fari - la aŭtoro konstruis ĉi tion:

Ni skribas OTA-ŝargilon por ATmega128RFA1 (kiel parto de la aparato Smart Response XE)

Li alportis la JTAG-liniojn tien, kaj nun ne necesas malfermi la kuirilaron. Kaj por ke skizoj estu alŝutitaj, mi konektis ambaŭ seriajn havenojn al la sama konektilo, aldonante ankaŭ ŝaltilon, ĉar kun la kuirilaroj instalitaj, estas fizike neeble malŝalti la aparaton alimaniere.

Necesis sufiĉe da tempo por labori kun lutfero, utila tranĉilo kaj glupafilo. Ĝenerale, alŝuti skizojn "super la aero" estas multe pli oportuna; ni urĝe bezonas elpensi ion por tio.

Arduino IDE uzas la programon por alŝuti skizojn avrdude. Ĝi interagas kun la mikroregilo uzante la protokolon STK500, kiu permesas translokigi dosierojn ambaŭdirekte. Ĝi estas malbone kongrua kun kanaloj kie variaj prokrastoj, distordo kaj datumperdo eblas. Se io malfiksas aŭ susuras en la seria kanalo, vi povas freneziĝi serĉante la kaŭzon. Iam la aŭtoro suferis duontagon ĝis li rimarkis, ke la problemo estas malbona kablo, kaj ankaŭ kaprica interfaco-konvertilo CP2102. Eĉ mikroregilo kun enkonstruita interfaca konvertilo, ekzemple, ATmega32u4, foje povas agi tiel. Ĉiu Arduino-uzanto rimarkis, ke eraroj dum alŝutado de skizoj ne estas tiel maloftaj. Kelkfoje la registrado iras bone, sed dum testolegado oni detektas eraron. Tio ne signifas, ke estis eraro dum la skribo - estis malsukceso dum la legado. Nun imagu, ke kiam oni laboras "super la aero" okazos la sama afero, sed multe pli ofte.

Post provi malsamajn manierojn venki ĉi tiun problemon, la aŭtoro elpensis la jenon. La aparato havas 128 KB-memoron kun SPI-interfaco - ni ricevas datumojn per la dratoj (memoru, ke la aŭtoro jam havas unu aparaton kun konektilo flanke), uzu ĉi tiun memoron kiel bufron kaj sendu la datumojn per la radio. kanalo al alia aparato. Saluton de Cybiko.

Post skribado de la kodo por labori kun la radiokanalo, same kiel la tiparo, la ŝargilo fariĝis pli longa ol 4 kilobajtoj. Tial, la HFUSE-valoro devis esti ŝanĝita de 0xDA al 0xD8. Nun la ekŝargilo povas esti ĝis 8 kilobajtoj longa, kaj la komenca adreso nun estas 0x1E000. Ĉi tio estas reflektita en la Makefile, sed ankaŭ devus esti konsiderata dum plenigado startŝargilo via avrdude.

La 802.15.4 radioricevilo en la ATmega128RFA1 estas origine dizajnita por funkcii uzante la protokolon Zigbee, kio estas sufiĉe komplika, do la aŭtoro decidis anstataŭe nur elsendi pakaĵetojn. Ĉi tio estas efektivigita en aparataro en la ATmega128RFA1, do necesas malmulte da kodo. Ankaŭ, por simpleco, la aŭtoro decidis uzi fiksan kanalon, ne permesante al vi elekti ĝin eĉ permane. La normo 802.15.4 subtenas 16 kanalojn kun nombroj de 11 ĝis 26. Ili estas sufiĉe plenplenaj, kelkaj ankaŭ interkovras WiFi-kanalojn (ruĝaj estas ZigBee-kanaloj, blua, verda kaj flava estas WiFi).

Ni skribas OTA-ŝargilon por ATmega128RFA1 (kiel parto de la aparato Smart Response XE)

Montriĝis, ke kanaloj 15 kaj 26 estas malplej susceptibles al interfero de WiFi.La aŭtoro elektis la duan el ili. Malgarantio: la tradukisto ne scias ĉu estas permesite simpligi ZigBee tiel. Eble ni devus fari iom pli da programado kaj efektivigi ĝin tute?

Sur la unua aparato, necesas efektivigi finhavan ŝtatmaŝinon, kiu transdonas datumojn per la protokolo STK500. Plejparte, la mesaĝoj elsenditaj kaj ricevitaj estas memsufiĉaj, sed kelkaj estas ligitaj al tiuj, kiuj trapasis la kanalon pli frue. Priskribo de la dialogo estas donita tie.

Grava komponento de ĉi tiu dialogo estas la dissendo de pakaĵetoj intencitaj por esti skribitaj al la fulmmemoro de la cela aparato. Por simplaj mikroregiloj de la familio AVR, la paĝa grandeco estas 128 bajtoj, sed por la ATmega128RFA1 ĝi estas 256. Kaj por la fulmmemoro, kiu estas konektita per la SPI-protokolo, estas la sama. La programo en la unua aparato, kiam oni alŝutas skizon, ne tuj transdonas ĝin al la dua, sed skribas ĝin al ĉi tiu memoro. Kiam la Arduino IDE kontrolas la ĝustecon de la eniro, ĝi estas sendita tion, kio estis skribita tie. Nun ni devas transdoni la ricevitajn datumojn per radiokanalo al la dua aparato. Samtempe, ŝanĝi de ricevado al elsendo kaj reen okazas sufiĉe ofte. La protokolo STK500 estas indiferenta pri prokrastoj, sed ne toleras perdon de datumoj (strange, sed oni diris supre, ke prokrastoj ankaŭ influas transdonon de datumoj). Kaj perdoj dum sendrata dissendo estas neeviteblaj. La ATmega128RFA1 havas enkonstruitan aparataron efektivigon de ripetaj petoj kiam estas duboj pri la ĝusteco de la translokigo, sed la aŭtoro decidis efektivigi la samon en programaro mem. Li evoluigis protokolon en kiu multe pli da datumoj fluas unudirekte ol la alian.

Ĝi ne estas perfekta, sed ĝi funkcias. La 256-bajta paĝo estas dividita en kvar segmentojn, ĉiu el kiuj estas elsendita super la aero kiel pako. Pakaĵeto povas teni ĝis 125 bajtojn da datenoj plus unu bajton por longo kaj du bajtojn por CRC. Do fragmentoj 64 bajtojn longaj kune kun paĝaj kaj segmentaj nombroj (de 0 ĝis 3) estas metitaj tie. La ricevanta aparato havas variablon, kiu permesas al ĝi spuri kiom da segmentoj estis ricevitaj, kaj kiam ĉiuj kvar alvenas, la senda aparato ricevas konfirmon, ke la tuta paĝo estis ricevita. Neniu konfirmo (CRC ne kongruis) - resendu la tutan paĝon. La rapido estas eĉ pli granda ol kiam oni transdonas per kablo. Vidu:


Sed ĝenerale, necesus provizi oportunan manieron konekti la kablon al la aparatoj por alŝuti skizojn kaj per ĝi. Ekzemple, metu ene de tia interfaca konvertilo sur la CP2102, kiel en la foto, kaj gluu ĝin al la tabulo por ke ĝi povu elteni la forton kiam li konektas kaj malkonektas la Mikro-USB-kablon.

Ni skribas OTA-ŝargilon por ATmega128RFA1 (kiel parto de la aparato Smart Response XE)

Ĝi ankaŭ havas 3,3-voltan stabiligilon (kaj kiel uzi ĝin en aparato kun 6-volta nutrado - se ĝi nur havas la saman stabiligilon, kaj vi povas aldoni du diodojn por aŭtomate elekti kiu el ili ŝaltos la aparaton) . Ĉiuj tri LED-oj devas esti malluditaj de la interfaca konvertilo-tabulo, alie ili aldone ŝarĝos la bateriojn kiam ili funkcias, kaj ankaŭ malhelpos klavaran balotadon kaj funkcios kun fulmmemoro kun SPI-interfaco.

Persekuti celon montriĝis eĉ pli interesa ol atingi ĝin (kaj ne bezonas tiun ŝercon pri la buso). La aŭtoro lernis multon pri AVR-ŝargiloj, SPI-flash-memoro, la protokolo STK500 kaj la normo 802.15.4.

Ĉiu alia kodo krom la biblioteko supre priskribita estas − tie, kaj ĝi estas ankaŭ sub GPL v3. Tvitero de la aŭtoro - tie.

fonto: www.habr.com

Aldoni komenton