Píšeme OTA načítač pro ATmega128RFA1 (součást zařízení Smart Response XE)

Píšeme OTA načítač pro ATmega128RFA1 (součást zařízení Smart Response XE)

Všechno začalo, když autor koupil na druhotném trhu zajímavé zařízení — Smart Response XE (stručný popis). Je určeno pro školy: každý žák ve třídě dostane zařízení podobné elektronické zápisní knížce nebo překladači z devadesátých let, učitel položí otázku a žáci na klávesnicích zařízení zadávají odpovědi, které se přenášejí rádiovým kanálem (802.15.4) do přijímače připojeného k učitelskému PC.

Podpora těchto zařízení byla ukončena před několika lety a to, co školy kupovaly za 100-200 dolarů za kus, se nyní objevuje na eBay za 10 dolarů nebo méně. „Hardware“ je tam velmi vhodný pro geekovské experimenty:

  • klávesnice s 60 klávesami
  • displej s rozlišením 384×136, 2 bity na pixel — podobně jako BK, CGA, ale 4 ne barvy, nýbrž odstíny jasu
  • mikrokontrolér ATmega128RFA1 (128 kB flash paměti, 4 kB EEPROM, 16 kB RAM, přijímač a vysílač standardu 802.15.4)
  • externí (ve vztahu k mikrokontroléru, nikoli celému zařízení) flash paměť o velikosti 1 megabit (128 kilobajtů) s SPI rozhraním
  • prostor pro 4 AAA baterie.

Z názvu mikrokontroléru je jasné, že patří do rodiny AVR, a proto je úkol učinit zařízení kompatibilním s Arduino více než triviální…

Z novinky na Hackaday se autor dozvěděl, že to už udělali (v tomto odkazu je popis, kam co připojit), přičemž získali možnost spouštět hry pro Arduboy:

Přehrát video

Ale autora více zajímá možnost zařízení nehrát, ale zkoumat:
  • flash paměť se sériovým SPI rozhraním
  • bootloadery pro AVR
  • standard 802.15.4

Autor začal psaním knihovny (GPL v3), které umožňuje inicializaci displeje, zobrazování textu a obdélníků, a také přístup k flash paměti s SPI rozhraním. Poté začal vymýšlet nápady pro praktické využití zařízení: kapesní terminál kompatibilní s VT-100, multiplayerové hry. Po úpravě tří zařízení se rozhodl „naučit“ je získávat sketche „vzduchem“. Což by bylo nejen zajímavé, ale také velmi pohodlné: otevření krytu zařízení je těžké a pod víčkem bateriového prostoru jsou jen otvory, které umožňují připojení k desce pomocí JTAG programátoru.

Píšeme OTA načítač pro ATmega128RFA1 (součást zařízení Smart Response XE)

To upload the Arduino bootloader is sufficient, but not the sketch — the serial port is not brought out, and you will still need to open the case. Also, the TX0 and RX0 lines of the first serial port are combined with the lines for polling the keyboard matrix, namely — those used for polling the function keys on the sides of the display. But what can you do — the author has made this:

Píšeme OTA načítač pro ATmega128RFA1 (součást zařízení Smart Response XE)

He brought out the JTAG lines, so now there is no need to open the battery compartment. In order to upload sketches as well, he brought out both serial ports to this same connector, also adding a switch, because when the batteries are installed, the device cannot be physically turned off in any other way.

It took quite a long time to work with a soldering iron, utility knife, and glue gun. In general, uploading sketches 'over the air' is significantly more convenient, something needs to be urgently invented for this.

The Arduino IDE uses a program to upload sketches avrdude. It interacts with the microcontroller via the protocol STK500, allowing files to be transmitted in both directions. It is poorly compatible with channels where variable delays, distortion, and data loss are possible. If something is loose or rustling in the serial channel, you can go crazy looking for the cause. Once, the author struggled for half a day, only to understand that the problem was with a bad cable, as well as the capricious CP2102 interface converter. Even a microcontroller with a built-in interface converter, such as the ATmega32u4, can occasionally behave this way. Every Arduino user has noticed that errors when uploading sketches are not that rare. Sometimes the writing goes well, but upon verifying the reading, an error is discovered. This does not mean that the error occurred during writing — the failure was during reading. Now imagine that when working 'over the air', the same thing will happen, but much more often.

After trying various methods to overcome this problem, the author came up with the following. The device has 128 KB of flash memory with an SPI interface — receive data via wires (let's remember that there is already a device with a side connector with the author), use this memory as a buffer, and send data to another device over the radio channel. A little hello from Cybiko.

Po napsání kódu pro práci s rádiovým kanálem a také písmenem se načítač stal delší než 4 kilobajty. Proto bylo nutné změnit hodnotu HFUSE z 0xDA na 0xD8. Nyní může být načítač dlouhý až 8 kilobajtů a počáteční adresa se rovná 0x1E000. To je uvedeno v Makefile, ale mělo by to být zohledněno i při nahrávání. načítač pomocí avrdude.

Přijímač a vysílač standardu 802.15.4 v ATmega128RFA1 byl původně navržen pro práci podle protokolu ZigBee, který je poměrně složitý, takže autor se rozhodl místo toho jednoduše přenášet pakety. To je v ATmega128RFA1 realizováno hardwarově, takže kódu bude potřeba málo. Také pro zjednodušení se autor rozhodl použít pevný kanál, aniž by dovolil jeho výběr i ručně. Standard 802.15.4 podporuje 16 kanálů s čísly od 11 do 26. Ty jsou docela přeplněné, některé také překrývají kanály WiFi (červeně jsou označeny kanály ZigBee, modře, zeleně a žlutě – WiFi).

Píšeme OTA načítač pro ATmega128RFA1 (součást zařízení Smart Response XE)

Ukázalo se, že nejméně citlivé na rušení od WiFi jsou kanály 15 a 26. Druhý z nich autor vybral. Disklaimer: překladatel neví, zda je povoleno takto zjednodušovat ZigBee. Možná by stálo za to ještě trochu naprogramovat a implementovat jej kompletně?

Na prvním z zařízení je třeba realizovat konečný automat, který přenáší data podle protokolu STK500. Většina přenášených a přijímaných zpráv je samostatná, ale některé jsou vázány na zprávy, které již dříve prošly kanálem. Popis dialogu je uveden. zde.

Důležitou součástí tohoto dialogu je přenos paketů určených pro zápis do flash paměti cílového zařízení. U jednoduchých mikrokontrolérů rodiny AVR je velikost stránky 128 bajtů, ale u ATmega128RFA1 je to 256. U té flash paměti, která se připojuje prostřednictvím protokolu SPI, je to stejné. Program v prvním zařízení při nahrávání sketche neposílá ihned do druhého, ale zapisuje ho do této paměti. Když Arduino IDE kontroluje správnost zápisu, je mu odesláno to, co se tam zapsalo. Nyní je třeba přenést získaná data přes rádiový kanál do druhého zařízení. Přepínání mezi příjmem a vysíláním probíhá poměrně často. Protokol STK500 je lhostejný k zpožděním, ale netoleruje ztrátu dat (zajímavé, vždyť bylo výše řečeno, že zpoždění při přenosu dat se také projevují). Ztráty při bezdrátovém přenosu jsou však nevyhnutelné. V ATmega128RFA1 je integrována hardwarová realizace opakovaných dotazů při pochybnostech o správnosti přenosu, ale autor se rozhodl to realizovat také softwarově sám. Vyvinul protokol, při kterém prochází mnohem více dat v jednom směru než v druhém.

Není dokonalý, ale všechno funguje. 256-bajtová stránka se rozděluje na čtyři segmenty, z nichž každý je přenesen přes rádiový kanál ve formě paketu. Paket obsahuje až 125 bajtů dat plus jeden bajt - délka a dva - CRC. Takže útržky o délce 64 bajtů spolu s čísly stránek a segmentů (0 až 3) tam jsou zahrnuty. V přijímacím zařízení je předpokládána proměnná, která umožňuje sledovat, kolik segmentů bylo přijato, a když přijdou všechny čtyři, na vysílající zařízení jde potvrzení, že celá stránka byla přijata. Není potvrzení (CRC se neshoduje) - odešleme celou stránku znovu. Rychlost přitom vychází dokonce vyšší než při přenosu kabelem. Podívejte se:

Přehrát video

Ale přece by bylo potřeba předpokládat pohodlný způsob připojení kabelu k zařízení pro nahrávání sketche i tímto způsobem. Například umístit dovnitř takový převodník rozhraní na CP2102, jako na fotografii, a přilepit ho k desce tak, aby odolával síle při připojení a odpojení kabelu Micro USB.

Píšeme OTA načítač pro ATmega128RFA1 (součást zařízení Smart Response XE)

Také obsahuje 3,3-voltový stabilizátor (a jak ho použít v zařízení s 6-voltovým napájením – pokud tam je stejný stabilizátor, je možné přidat dvě diody, aby se automaticky vybralo, z kterého bude zařízení napájeno). Je třeba vyjmout všechny tři LED diody z desky převodníku, jinak budou dodatečně zatěžovat baterie při jejich použití a také bránit dotazování klávesnice a práci s flash pamětí prostřednictvím rozhraní SPI.

Usilování o cíl se ukázalo být dokonce zajímavější než jeho dosažení (a není potřeba ten vtip o autobusu). Autor se dozvěděl spoustu nového o bootloadech pro AVR, flash pamětech s rozhraním SPI, protokolu STK500 a standardu 802.15.4.

Veškerý zbývající kód jako doplněk k výše popsané knihovně – zde, a ten je také pod licencí GPL v3. Autorův Twitter – zde.

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster