Sve je počelo tako što je autor kupio zanimljiv uređaj na sekundarnom tržištu - Smart Response XE (
Ti su uređaji ukinuti prije nekoliko godina, a ono što su škole kupovale po cijeni od 100 do 200 USD sada se pojavljuje na eBayu za 10 USD ili manje. Tamošnji hardver vrlo je prikladan za štreberske eksperimente:
- Tipkovnica sa 60 tipki
- zaslon rezolucije 384×136, 2 bita po pikselu - slično BC, CGA, ali 4 ne boje, već gradacije svjetline
- mikrokontroler ATmega128RFA1 (128 kB flash memorije, 4 kB ROM, 16 kB RAM, 802.15.4 primopredajnik)
- vanjska (u odnosu na mikrokontroler, ne cijeli uređaj) 1 megabit (128 kilobajta) flash memorija sa SPI sučeljem
- pretinac za 4 AAA elementa.
Iz naziva mikrokontrolera jasno je da pripada AVR obitelji, što znači da je učiniti uređaj kompatibilnim s Arduinom više nego trivijalan zadatak...
Od vijesti nadalje
Ali autora više zanima mogućnost ne igranja na uređaju, već proučavanja:
- flash memorija sa serijskim SPI sučeljem
- bootloaderi za AVR
- standard 802.15.4
Autor je započeo pisanjem
Ovo je dovoljno za učitavanje Arduino bootloadera, ali ne i skice - serijski port nije tamo spojen, tako da i dalje ne možete bez otvaranja kućišta. Također, linije TX0 i RX0 prvog serijskog priključka kombinirane su s linijama za prozivanje matrice tipkovnice, naime one koje prozivaju funkcijske tipke na stranama zaslona. Ali što možete - autor je napravio ovo:
Tamo je donio JTAG linije i sada nema potrebe otvarati odjeljak za baterije. A da bi se skice mogle uploadati, spojio sam oba serijska porta na isti konektor, dodavši i prekidač, jer sa postavljenim baterijama fizički je nemoguće isključiti uređaj na bilo koji drugi način.
Trebalo je dosta vremena za rad s lemilom, pomoćnim nožem i pištoljem za ljepilo. Općenito, prijenos skica "bežično" mnogo je praktičniji; hitno moramo izmisliti nešto za to.
Arduino IDE koristi program za učitavanje skica
Nakon što je pokušao na različite načine prevladati ovaj problem, autor je došao do sljedećeg. Uređaj ima flash memoriju od 128 KB sa SPI sučeljem - podatke primamo putem žica (sjetite se da autor već ima jedan uređaj s konektorom sa strane), koristimo ovu memoriju kao međuspremnik i šaljemo podatke putem radija. kanala na drugi uređaj. Pozdrav iz Cybiko.
Nakon pisanja koda za rad s radio kanalom, kao i fontom, loader je postao duži od 4 kilobajta. Stoga je vrijednost HFUSE morala biti promijenjena s 0xDA na 0xD8. Sada bootloader može biti dug do 8 kilobajta, a početna adresa je sada 0x1E000. To se odražava u Makefileu, ali također treba uzeti u obzir prilikom ispunjavanja
802.15.4 primopredajnik u ATmega128RFA1 izvorno je dizajniran za rad pomoću protokola
Pokazalo se da su kanali 15 i 26 najmanje osjetljivi na smetnje WiFi-a, a autor je odabrao drugi od njih. Disclaimer: prevoditelj ne zna je li dopušteno pojednostaviti ZigBee na ovaj način. Možda bismo trebali malo više programirati i implementirati ga u potpunosti?
Na prvom uređaju potrebno je implementirati konačni automat koji prenosi podatke putem STK500 protokola. Većinom su poruke koje se odašilju i primaju same sebi dovoljne, no neke su vezane uz one koje su ranije prošle kanalom. Daje se opis dijaloga
Važna komponenta ovog dijaloga je prijenos paketa namijenjenih upisivanju u flash memoriju odredišnog uređaja. Za jednostavne mikrokontrolere obitelji AVR, veličina stranice je 128 bajtova, ali za ATmega128RFA1 je 256. I za flash memoriju koja je povezana preko SPI protokola, ista je. Program u prvom uređaju, prilikom učitavanja skice, ne prenosi je odmah na drugi, već je zapisuje u ovu memoriju. Kada Arduino IDE provjeri ispravnost unosa, šalje ono što je tamo napisano. Sada trebamo prenijeti primljene podatke putem radio kanala na drugi uređaj. U isto vrijeme, prebacivanje s primanja na odašiljanje i natrag događa se prilično često. Protokol STK500 je ravnodušan prema kašnjenjima, ali ne tolerira gubitak podataka (čudno, ali gore je rečeno da kašnjenja također utječu na prijenos podataka). A gubici tijekom bežičnog prijenosa su neizbježni. ATmega128RFA1 ima ugrađenu hardversku implementaciju ponovljenih zahtjeva kada postoje sumnje u ispravnost prijenosa, no autor je odlučio sam implementirati isto softverski. Razvio je protokol u kojem puno više podataka teče u jednom smjeru nego u drugom.
Nije savršeno, ali djeluje. Stranica od 256 bajta podijeljena je u četiri segmenta, od kojih se svaki prenosi putem zraka kao paket. Paket može sadržavati do 125 bajtova podataka plus jedan bajt za duljinu i dva bajta za CRC. Dakle, fragmenti dugi 64 bajta zajedno s brojevima stranica i segmenata (od 0 do 3) smješteni su tamo. Uređaj koji prima ima varijablu koja mu omogućuje praćenje koliko je segmenata primljeno, a kada sva četiri stignu, uređaj koji šalje prima potvrdu da je cijela stranica primljena. Nema potvrde (CRC se ne podudara) - ponovno pošalji cijelu stranicu. Brzina je još veća nego kod prijenosa putem kabela. Vidjeti:
Ali općenito, bilo bi potrebno osigurati prikladan način povezivanja kabela s uređajima za učitavanje skica i kroz njega. Na primjer, stavite unutar takvog pretvarača sučelja na CP2102, kao na fotografiji, i zalijepite ga na ploču tako da može izdržati silu pri spajanju i odspajanju Micro USB kabela.
Ima i stabilizator od 3,3 volta (i kako ga koristiti u uređaju sa napajanjem od 6 volti - samo da ima isti stabilizator, a možete dodati dvije diode da automatski odaberete koja će od njih napajati uređaj) . Sve tri LED diode moraju biti odlemljene od ploče pretvarača sučelja, inače će dodatno opteretiti baterije kada rade na njima, a također će ometati prozivanje tipkovnice i rad s flash memorijom sa SPI sučeljem.
Težnja za ciljem pokazala se još zanimljivijom od njegovog ostvarenja (i ne treba onaj vic o autobusu). Autor je naučio puno o AVR bootloaderima, SPI flash memoriji, STK500 protokolu i 802.15.4 standardu.
Sav drugi kod uz gore opisanu biblioteku je −
Izvor: www.habr.com