Mir schreiwen en OTA Bootloader fir ATmega128RFA1 (als Deel vum Smart Response XE Apparat)

Mir schreiwen en OTA Bootloader fir ATmega128RFA1 (als Deel vum Smart Response XE Apparat)

Et huet alles ugefaang mam Auteur en interessanten Apparat um Secondaire Maart ze kafen - Smart Response XE (kuerz Beschreiwung). Et ass fir d'Schoul geduecht: all Schüler an der Klass kritt en Apparat ähnlech wéi en elektroneschen Notizbuch oder en Iwwersetzer aus den 802.15.4er Joeren, den Enseignant stellt eng Fro, an d'Schüler tippen d'Äntwerten op d'Tastatur vun den Apparater, déi iwwer eng Radiokanal (XNUMX) un engem Empfänger verbonne mam PC vum Enseignant.

Dës Geräter goufen virun e puer Joer gestoppt, a wat Schoule fir $ 100- $ 200 all kaaft hunn, erschéngen elo op eBay fir $ 10 oder manner. D'Hardware do ass ganz gëeegent fir geeky Experimenter:

  • 60 Schlëssel Keyboard
  • Display mat enger Resolutioun vun 384 × 136, 2 Bits pro Pixel - ähnlech wéi BC, CGA, awer 4 net Faarwen, awer Hellegkeetsgradatiounen
  • Mikrokontroller ATmega128RFA1 (128 kB Flash Memory, 4 kB ROM, 16 kB RAM, 802.15.4 Transceiver)
  • extern (a Relatioun mam Mikrokontroller, net de ganzen Apparat) 1 megabit (128 kilobyte) Flash Memory mat SPI Interface
  • Fach fir 4 AAA Elementer.

Vum Numm vum Mikrokontroller ass et kloer datt et zu der AVR Famill gehéiert, wat heescht datt den Apparat Arduino-kompatibel ass eng méi wéi trivial Aufgab ...

Vun den Neiegkeeten un Hackday den Auteur huet erausfonnt wat et ass scho gemaach hunn (dee selwechte Link seet Iech wat fir ze konnektéieren wou), d'Méiglechkeet ze hunn Spiller fir Arduboy ze lafen:


Mä den Auteur ass méi interesséiert d'Méiglechkeet net um Apparat ze spillen, mä ze studéieren:

  • Flash Erënnerung mat Serien SPI Interface
  • Bootloader fir AVR
  • Standard 802.15.4

Den Auteur huet ugefaang mam Schreiwen Bibliothéiken (GPL v3), wat Iech erlaabt den Affichage ze initialiséieren, Text a Rechtecker auszeginn, an Zougang zu SPI Flash Memory. Dunn huet hien ugefaang mat Iddien ze kommen fir d'praktesch Notzung vum Apparat: e VT-100-kompatibel Pocketterminal, Multiplayer Spiller. Nodeems hien dräi Apparater nei opgebaut huet, huet hien decidéiert se "léieren" Skizzen "iwwer d'Loft" ze kréien. Wat wier net nëmmen interessant, awer och ganz praktesch: den Apparat Fall ass schwéier all Kéier opzemaachen, an ënner der Batterie Fach Cover sinn nëmmen Lächer, datt Dir engem JTAG Programméierer op de Bord ze verbannen erlaabt.

Mir schreiwen en OTA Bootloader fir ATmega128RFA1 (als Deel vum Smart Response XE Apparat)

Dëst ass genuch fir den Arduino Bootloader eropzelueden, awer net d'Skizz - de Serienhafen ass net do ugeschloss, sou datt Dir nach ëmmer net maache kënnt ouni de Fall opzemaachen. Och d'TX0 an RX0 Linnen vum éischte Serien Hafen sinn kombinéiert mat de Pollinglinnen vun der Tastaturmatrix, nämlech déi, déi d'Funktiounsschlësselen op de Säiten vum Display pollen. Awer wat kënnt Dir maachen - den Auteur huet dëst gebaut:

Mir schreiwen en OTA Bootloader fir ATmega128RFA1 (als Deel vum Smart Response XE Apparat)

Hien huet d'JTAG Linnen dohinner bruecht, an elo ass et net néideg d'Batterieraum opzemaachen. A fir datt Skizzen eropgeluede kënne ginn, hunn ech béid Serienhäfen op deeselwechte Connector verbonnen, och e Schalter bäigefüügt, well mat de Batterien installéiert ass et kierperlech onméiglech den Apparat op eng aner Manéier auszeschalten.

Et huet zimmlech Zäit gedauert fir mat engem Lötstéck, engem Utilitymesser an enger Pechpistoul ze schaffen. Allgemeng ass d'Eroplueden vun Skizzen "iwwer d'Loft" vill méi bequem, mir mussen dréngend eppes dofir erfannen.

Arduino IDE benotzt de Programm fir Skizzen eropzelueden avrdude. Et interagéiert mam Mikrokontroller mam Protokoll STK500, wat Iech erlaabt Dateien a béid Richtungen ze transferéieren. Et ass schlecht kompatibel mat Kanäl wou variabel Verspéidungen, Verzerrung an Dateverloscht méiglech sinn. Wann eppes lass ass oder am Serien Kanal raschelt, kënnt Dir verréckt ginn op der Sich no der Ursaach. Eemol huet den Auteur en hallwen Dag gelidden, bis hie gemierkt huet datt de Problem e schlechte Kabel war, souwéi e kapricious CP2102 Interface Converter. Och e Mikrokontroller mat engem agebaute Interface-Konverter, zum Beispill ATmega32u4, kann heiansdo esou handelen. All Arduino Benotzer huet gemierkt datt Feeler beim Eroplueden vun Skizzen net sou rar sinn. Heiansdo geet d'Opnahm gutt, awer während engem Testliese gëtt e Feeler festgestallt. Dëst bedeit net datt et e Feeler beim Schreiwen gouf - et gouf e Feeler beim Liesen. Stellt Iech elo vir datt wann Dir "iwwer d'Loft" schafft, wäert datselwecht geschéien, awer vill méi dacks.

Nodeems Dir verschidde Weeër probéiert huet fir dëse Problem ze iwwerwannen, ass den Auteur mat de folgende komm. Den Apparat huet en 128 KB Flash Memory mat engem SPI Interface - mir kréien Daten iwwer d'Drähten (erënnert datt den Auteur schonn en Apparat mat engem Connector op der Säit huet), benotzt dës Erënnerung als Puffer, a schécken d'Donnéeën iwwer de Radio Kanal op en aneren Apparat. Moien vum Cybiko.

Nodeem de Code geschriwwen huet fir mam Radiokanal ze schaffen, wéi och d'Schrëft, gouf de Loader méi wéi 4 Kilobytes. Dofir muss den HFUSE-Wäert vun 0xDA op 0xD8 geännert ginn. Elo kann de Bootloader bis zu 8 kilobytes laang sinn, an d'Startadress ass elo 0x1E000. Dëst spigelt sech am Makefile, awer sollt och berücksichtegt ginn beim Ausfëllen bootloader iwwer avrdude.

Den 802.15.4 Transceiver am ATmega128RFA1 ass ursprénglech entwéckelt fir mam Protokoll ze bedreiwen Zigbee, wat zimmlech komplizéiert ass, sou datt den Auteur decidéiert huet just Päck ze vermëttelen. Dëst ass an der Hardware an der ATmega128RFA1 implementéiert, sou datt wéineg Code erfuerderlech ass. Och, fir Simplicitéit, huet den Auteur decidéiert e fixe Kanal ze benotzen, net erlaabt Iech et och manuell ze wielen. Den 802.15.4 Standard ënnerstëtzt 16 Kanäl mat Zuelen vun 11 bis 26. Si sinn zimlech voll, e puer iwwerlappen och WiFi Kanäl (rout sinn ZigBee Kanäl, blo, gréng a giel sinn WiFi).

Mir schreiwen en OTA Bootloader fir ATmega128RFA1 (als Deel vum Smart Response XE Apparat)

Et huet sech erausgestallt, datt d'Kanäl 15 an 26 am mannsten ufälleg sinn fir Stéierunge vu WiFi, den Auteur huet déi zweet gewielt. Verzichterklärung: den Iwwersetzer weess net ob et erlaabt ass ZigBee esou ze vereinfachen. Vläicht sollte mir e bësse méi programméieren a komplett ëmsetzen?

Um éischten Apparat ass et néideg eng endlech Staatsmaschinn ëmzesetzen déi Daten iwwer de STK500 Protokoll iwwerdréit. Fir de gréissten Deel sinn d'Messagen iwwerdroen a kritt selbstänneg, awer e puer sinn un déi gebonnen, déi virdru duerch de Kanal passéiert sinn. Beschreiwung vum Dialog gëtt uginn hei.

E wichtege Bestanddeel vun dësem Dialog ass d'Iwwerdroung vu Pakete geduecht fir an d'Flash Memory vum Destinatiounsapparat geschriwwe ze ginn. Fir einfache Mikrokontroller vun der AVR-Famill ass d'Säitgréisst 128 Bytes, awer fir den ATmega128RFA1 ass et 256. A fir de Flash-Speicher, deen iwwer de SPI-Protokoll verbonne gëtt, ass et d'selwecht. De Programm am éischten Apparat, wann Dir eng Skizz eropluet, transferéiert se net direkt op den zweeten, awer schreift se an dës Erënnerung. Wann d'Arduino IDE d'Korrektheet vun der Entrée kontrolléiert, gëtt et geschéckt wat do geschriwwe gouf. Elo musse mir déi erhalen Daten iwwer Radiokanal op den zweeten Apparat iwwerdroen. Zur selwechter Zäit ass de Wiessel vum Empfang op Iwwerdroung an zréck zimmlech dacks geschitt. De STK500 Protokoll ass indifferent zu Verspéidungen, awer toleréiert net Datenverloscht (komesch, awer et gouf uewen gesot datt Verspéidungen och den Datentransfer beaflossen). A Verloschter während der drahtloser Iwwerdroung sinn inévitabel. Den ATmega128RFA1 huet eng agebaute Hardware-Implementatioun vu widderholl Ufroen wann et Zweifel iwwer d'Richtegkeet vum Transfert gëtt, awer den Auteur huet decidéiert datselwecht an der Software selwer ëmzesetzen. Hien huet e Protokoll entwéckelt an deem vill méi Daten op eng Manéier fléissen wéi déi aner.

Et ass net perfekt, awer et funktionnéiert. D'256-Byte Säit ass a véier Segmenter opgedeelt, déi all iwwer d'Loft als Paket iwwerdroen ginn. E Paket kann bis zu 125 Bytes vun Daten plus ee Byte fir Längt an zwee Bytes fir CRC halen. Also Fragmenter 64 Bytes laang zesumme mat Säit- a Segmentnummeren (vun 0 bis 3) ginn do plazéiert. Den Empfangsapparat huet eng Variabel déi et erlaabt ze verfolgen wéivill Segmenter kritt goufen, a wann all véier ukommen, kritt de Sender Apparat Bestätegung datt déi ganz Säit kritt gouf. Keng Bestätegung (CRC huet net gepasst) - schéckt déi ganz Säit nei. D'Geschwindegkeet ass nach méi grouss wéi beim Iwwerdroung iwwer Kabel. Kuckt:


Awer am Allgemengen wier et néideg fir e praktesche Wee ze bidden fir de Kabel mat den Apparater ze verbannen fir Skizzen eropzelueden an duerch et. Zum Beispill, Plaz bannen esou engem Interface Converter op der CP2102, wéi an der Foto, a gekollt et op de Bord sou datt et d'Kraaft widderstoen kann wann de Mikro USB Kabel Verbindung an trennt.

Mir schreiwen en OTA Bootloader fir ATmega128RFA1 (als Deel vum Smart Response XE Apparat)

Et huet och en 3,3-Volt Stabilisator (a wéi et an engem Apparat mat enger 6-Volt Energieversuergung benotzt gëtt - wann et nëmmen dee selwechte Stabilisator huet, an Dir kënnt zwee Dioden addéieren fir automatesch ze wielen, wéi eng vun hinnen den Apparat dréit) . All dräi LEDs musse vun der Interface Converter Verwaltungsrot unsoldered ginn, soss wäerten se zousätzlech Batterie opbauen wann se operéieren, an och mat Keyboard Pollen Amëschung an Aarbecht mat Flash Erënnerung mat engem SPI Interface.

E Goal verfollegen huet sech nach méi interessant gewisen wéi et z'erreechen (a brauch dee Witz iwwer de Bus net). Den Auteur huet vill iwwer AVR Bootloader, SPI Flash Memory, de STK500 Protokoll an den 802.15.4 Standard geléiert.

All anere Code zousätzlech zu der uewe beschriwwen Bibliothéik ass - hei, an et ass och ënner GPL v3. Auteur's Twitter - hei.

Source: will.com

Setzt e Commentaire