It begon allegear mei de auteur dy't in nijsgjirrich apparaat kocht op 'e sekundêre merk - Smart Response XE (
Dizze apparaten waarden ferskate jierren lyn stopset, en wat skoallen kocht foar $ 100- $ 200 elk is no op eBay foar $ 10 of minder. De hardware dêr is tige geskikt foar geeky eksperiminten:
- 60 toetseboerd
- werjaan mei in resolúsje fan 384 × 136, 2 bits per piksel - fergelykber mei BC, CGA, mar 4 gjin kleuren, mar gradaasjes fan helderheid
- mikrocontroller ATmega128RFA1 (128 kB flash ûnthâld, 4 kB ROM, 16 kB RAM, 802.15.4 transceiver)
- eksterne (yn relaasje ta de mikrocontroller, net it hiele apparaat) 1 megabit (128 kilobyte) flash ûnthâld mei SPI ynterface
- compartment foar 4 AAA eleminten.
Ut 'e namme fan' e mikrocontroller is it dúdlik dat it heart ta de AVR-famylje, wat betsjut dat it Arduino-kompatibele apparaat in mear dan triviale taak is ...
Fan it nijs ôf
Mar de skriuwer is mear ynteressearre yn 'e kâns om net te spyljen op it apparaat, mar om te studearjen:
- flash ûnthâld mei serial SPI ynterface
- bootloaders foar AVR
- standert 802.15.4
De skriuwer begûn mei skriuwen
Dit is genôch om de Arduino-bootloader te uploaden, mar net de skets - de seriële poarte is dêr net ferbûn, dus jo kinne noch net dwaan sûnder de saak te iepenjen. Ek wurde de TX0- en RX0-rigels fan 'e earste seriële poarte kombineare mei de pollinglinen fan' e toetseboerdmatrix, nammentlik dejingen dy't de funksje-toetsen oan 'e kanten fan it display ûndersocht. Mar wat kinne jo dwaan - de auteur boude dit:
Hy brocht de JTAG-linen dêr, en no is it net nedich om it batterijfak te iepenjen. En om sketsen te uploaden, haw ik beide seriële poarten ferbûn oan deselde ferbining, ek in skeakel tafoege, want mei de batterijen ynstalleare is it fysyk ûnmooglik om it apparaat op in oare manier út te setten.
It duorre nochal wat tiid om te wurkjen mei in soldeerbout, in nutsmes en in lympistool. Yn 't algemien is it uploaden fan sketsen "oer de loft" folle handiger, dêr moatte wy driuwend wat foar útfine.
Arduino IDE brûkt it programma om sketsen te uploaden
Nei it besykjen fan ferskate manieren om dit probleem te oerwinnen, kaam de skriuwer mei it folgjende. It apparaat hat in 128 KB flash-ûnthâld mei in SPI-ynterface - wy ûntfange gegevens oer de triedden (ûnthâld dat de skriuwer al ien apparaat hat mei in ferbining oan 'e kant), brûke dit ûnthâld as buffer, en stjoere de gegevens oer de radio kanaal nei in oar apparaat. Hallo fan Cybiko.
Nei it skriuwen fan de koade om te wurkjen mei it radiokanaal, lykas it lettertype, waard de loader langer as 4 kilobytes. Dêrom moast de HFUSE-wearde feroare wurde fan 0xDA nei 0xD8. No kin de bootloader oant 8 kilobytes lang wêze, en it startadres is no 0x1E000. Dit wurdt wjerspegele yn 'e Makefile, mar moat ek rekken holden wurde by it ynfoljen
De 802.15.4-transceiver yn 'e ATmega128RFA1 is oarspronklik ûntworpen om te operearjen mei it protokol
It die bliken dat de kanalen 15 en 26 it minst gefoelich binne foar ynterferinsje fan WiFi. De skriuwer keas de twadde dêrfan. Disclaimer: de oersetter wit net oft it tastien is om ZigBee op dizze manier te ferienfâldigjen. Miskien moatte wy wat mear programmearje en folslein útfiere?
Op it earste apparaat is it nedich om in finite-state-masine te ymplementearjen dy't gegevens ferstjoert fia it STK500-protokol. Foar it grutste part binne de berjochten dy't ferstjoerd en ûntfongen binne selsfoarsjennend, mar guon binne bûn oan dyjingen dy't earder troch it kanaal giene. Beskriuwing fan de dialooch wurdt jûn
In wichtige komponint fan dizze dialooch is de oerdracht fan pakketten dy't bedoeld binne om te skriuwen nei it flashûnthâld fan it bestimmingsapparaat. Foar ienfâldige mikrocontrollers fan 'e AVR-famylje is de sidegrutte 128 bytes, mar foar de ATmega128RFA1 is it 256. En foar it flashûnthâld dat ferbûn is fia it SPI-protokol, is it itselde. It programma yn it earste apparaat, by it opladen fan in skets, draacht it net fuortendaliks oer nei it twadde, mar skriuwt it nei dit ûnthâld. As de Arduino IDE de krektens fan 'e yngong kontrolearret, wurdt it stjoerd wat dêr skreaun is. No moatte wy de ûntfongen gegevens fia radiokanaal oerjaan nei it twadde apparaat. Tagelyk komt it oerskeakeljen fan ûntfangen nei ferstjoeren en werom frij faak foar. It STK500-protokol is ûnferskillich foar fertragingen, mar tolerearret gjin gegevensferlies (frjemd, mar it waard hjirboppe sein dat fertragingen ek gegevensferfier beynfloedzje). En ferliezen by draadloze oerdracht binne ûnûntkomber. De ATmega128RFA1 hat in ynboude hardware-ymplemintaasje fan werhelle oanfragen as der twifels binne oer de krektens fan 'e oerdracht, mar de auteur besleat itselde yn software sels te ymplementearjen. Hy ûntwikkele in protokol wêryn folle mear gegevens de iene kant streamt as de oare.
It is net perfekt, mar it wurket. De 256-byte side is ferdield yn fjouwer segminten, dy't elk oer de loft wurde oerbrocht as in pakket. In pakket kin maksimaal 125 bytes oan gegevens hâlde plus ien byte foar lingte en twa bytes foar CRC. Sa wurde der fragminten fan 64 bytes lang tegearre mei side- en segmintnûmers (fan 0 oant 3) pleatst. It ûntfangende apparaat hat in fariabele dy't it mooglik makket om te folgjen hoefolle segminten binne ûntfongen, en as alle fjouwer oankomme, krijt it stjoerende apparaat befêstiging dat de hiele side is ûntfongen. Gjin befêstiging (CRC kaam net oerien) - ferstjoere de hiele side opnij. De snelheid is noch grutter as by it útstjoeren fia kabel. Sjen:
Mar yn 't algemien soe it nedich wêze om in handige manier te leverjen om de kabel te ferbinen mei de apparaten foar it uploaden fan sketsen en dêrtroch. Bygelyks, pleatse binnen sa'n ynterface converter op 'e CP2102, lykas op' e foto, en lijm it oan 'e boerd, sadat it kin ferneare de krêft by it ferbinen en losmeitsje de Micro USB kabel.
It hat ek in 3,3-volt stabilisator (en hoe't jo it brûke yn in apparaat mei in 6-volt voeding - as it allinich deselde stabilisator hat, en jo kinne twa diodes tafoegje om automatysk te selektearjen hokker fan har it apparaat sil oanmeitsje) . Alle trije LED's moatte wurde unsoldered út de ynterface converter board, oars se sille boppedat lade de batterijen as se operearje, en ek bemuoie mei toetseboerd polling en wurkje mei flash ûnthâld mei in SPI ynterface.
It neistribjen fan in doel wie noch nijsgjirriger dan it berikken (en net nedich dat grapke oer de bus). De skriuwer learde in protte oer AVR-bootloaders, SPI-flash-ûnthâld, it STK500-protokol en de 802.15.4-standert.
Alle oare koade neist de hjirboppe beskreaune bibleteek is -
Boarne: www.habr.com