Tuttu hà cuminciatu cù l'autore cumprà un dispositivu interessante nantu à u mercatu secundariu - Smart Response XE (
Sti dispusitivi sò stati discontinuati parechji anni fà, è ciò chì e scole anu acquistatu per $ 100- $ 200 ognunu hè avà apparsu in eBay per $ 10 o menu. U hardware hè assai adattatu per esperimenti geek:
- Tastiera à 60 tasti
- display cù una risoluzione di 384 × 136, 2 bits per pixel - simile à BC, CGA, ma 4 micca culori, ma gradazioni di luminosità
- microcontroller ATmega128RFA1 (128 kB memoria flash, 4 kB ROM, 16 kB RAM, ricetrasmettitore 802.15.4)
- esterna (in relazione à u microcontroller, micca u dispusitivu tutale) 1 megabit (128 kilobyte) memoria flash cù interfaccia SPI
- compartimentu per 4 elementi AAA.
Da u nome di u microcontroller hè chjaru chì appartene à a famiglia AVR, chì significa chì rende u dispusitivu Arduino-compatibile hè un compitu più chè triviale...
Da a nutizia in avanti
Ma l'autore hè più interessatu à l'uppurtunità di ghjucà micca nantu à u dispusitivu, ma di studià:
- memoria flash cù interfaccia seriale SPI
- bootloaders per AVR
- standard 802.15.4
L'autore principia per scrive
Questu hè abbastanza per carricà l'Arduino bootloader, ma micca u sketch - u portu seriale ùn hè micca cunnessu quì, cusì ùn pudete micca fà senza apre u casu. Inoltre, e linee TX0 è RX0 di u primu portu seriale sò cumminati cù e linee di polling di a matrice di u teclatu, vale à dì quelli chì sondanu i tasti di funzione à i lati di a visualizazione. Ma chì pudete fà - l'autore hà custruitu questu:
Hà purtatu e linee JTAG quì, è avà ùn ci hè bisognu di apre u compartment di a bateria. È cusì chì i sketches ponu esse caricati, aghju cunnessu i dui porti seriali à u stessu connettore, aghjunghjendu ancu un switch, perchè cù e batterie installate, hè fisicamente impussibile di disattivà u dispusitivu in ogni altru modu.
Pigliò un pocu di tempu per travaglià cù un ferru di saldatura, un cuteddu utilitariu è una pistola di cola. In generale, uploading sketchs "over the air" hè assai più convenientu; avemu urgentemente bisognu di inventà qualcosa per questu.
Arduino IDE usa u prugramma per carica i sketches
Dopu avè pruvatu diverse manere di superà stu prublema, l'autore hè ghjuntu cù i seguenti. U dispusitivu hà una memoria flash 128-kilobyte cù una interfaccia SPI - ricevemu dati nantu à i fili (ricurdate chì l'autore hà digià un dispositivu cù un connettore à u latu), utilizate sta memoria cum'è un buffer, è mandà e dati nantu à u canale radio à un altru dispusitivu. Salutami da Cybiko.
Dopu avè scrittu u codice per travaglià cù u canali radio, è ancu u font, u caricatore hè diventatu più longu di 4 kilobytes. Dunque, u valore HFUSE hà da esse cambiatu da 0xDA à 0xD8. Avà u bootloader pò esse finu à 8 kilobytes longu, è l'indirizzu di partenza hè avà 0x1E000. Questu hè riflessu in u Makefile, ma deve ancu esse cunsideratu quandu si riempie
U transceiver 802.15.4 in l'ATmega128RFA1 hè originariamente pensatu per travaglià cù u protokollu
Hè risultatu chì i canali 15 è 26 sò menu suscettibili à l'interferenza da WiFi. L'autore hà sceltu u sicondu di elli. Disclaimer: u traduttore ùn sapi micca s'ellu hè permessu di simplificà ZigBee in questu modu. Forsi duvemu fà un pocu più di prugrammazione è implementà cumpletamente?
Nantu à u primu dispusitivu, hè necessariu implementà una macchina à stati finiti chì trasmette dati via u protocolu STK500. Per a maiò parte, i missaghji trasmessi è ricivuti sò autosufficienti, ma alcuni sò ligati à quelli chì anu passatu per u canali prima. A descrizzione di u dialogu hè datu
Un cumpunente impurtante di stu dialogu hè a trasmissione di pacchetti destinati à esse scrittu à a memoria flash di u dispusitivu di destinazione. Per i microcontrollers simplici di a famiglia AVR, a dimensione di a pagina hè 128 bytes, ma per l'ATmega128RFA1 hè 256. È per a memoria flash chì hè cunnessu via u protocolu SPI, hè u listessu. U prugramma in u primu dispositivu, quandu si carica un sketch, ùn u trasfiriu micca immediatamente à u sicondu, ma u scrive in questa memoria. Quandu l'Arduino IDE verifica a correttezza di l'entrata, hè mandatu ciò chì era scrittu quì. Avà avemu bisognu di trasmette i dati ricevuti via u canali radiu à u sicondu dispositivu. À u listessu tempu, u cambiamentu da a ricivuta à a trasmissione è u ritornu hè abbastanza spessu. U protokollu STK500 hè indifferenti à i ritardi, ma ùn tollerà micca a perdita di dati (stranu, ma hè statu dettu sopra chì i ritardi affettanu ancu u trasferimentu di dati). E perdite durante a trasmissione wireless sò inevitabbili. L'ATmega128RFA1 hà una implementazione hardware integrata di richieste ripetute quandu ci sò dubbiti nantu à a correttezza di u trasferimentu, ma l'autore hà decisu di implementà u stessu in u software stessu. Hà sviluppatu un protokollu in quale flussi assai più dati in una manera di l'altru.
Ùn hè micca perfettu, ma funziona. A pagina di 256 byte hè divisa in quattru segmenti, ognunu di i quali hè trasmessu in l'aria cum'è un pacchettu. Un pacchettu pò cuntene finu à 125 byte di dati più un byte per a lunghezza è dui byte per CRC. Allora i frammenti di 64 bytes longu cù i numeri di pagina è di segmentu (da 0 à 3) sò posti quì. U dispusitivu di ricivutu hà una variàbile chì permette di seguità quanti segmenti sò stati ricivuti, è quandu tutti i quattru ghjunghjenu, u dispositivu di mandatu riceve cunferma chì a pagina sana hè stata ricevuta. Nisuna cunferma (CRC ùn currisponde micca) - rinviate tutta a pagina. A vitezza hè ancu più grande di quandu trasmette via cable. Vede:
Ma in generale, saria bisognu di furnisce una manera còmuda di cunnette u cable à i dispositi per uploading sketchs è attraversu. Per esempiu, mette in un tali cunvertitore di l'interfaccia nantu à u CP2102, cum'è in a foto, è cola à u bordu in modu chì pò sustene a forza quandu cunnette è disconnecting u cable Micro USB.
Havi ancu un stabilizzatore di 3,3 volti (è cumu aduprà in un dispositivu cù una fonte di energia di 6 volti - s'ellu hà solu u listessu stabilizzatore, è pudete aghjunghje dui diodi per selezziunà automaticamente quale di elli alimenterà u dispusitivu) . Tutti i trè LED devenu esse dissoldati da a scheda di cunvertitore di l'interfaccia, altrimente carcàranu in più e batterie quandu operanu nantu à elli, è ancu interferiscenu cù u votu di u teclatu è travaglià cù memoria flash cù una interfaccia SPI.
Perseguite un scopu hè diventatu ancu più interessante di ottene (è ùn avete micca bisognu di quellu scherzu annantu à l'autobus). L'autore hà amparatu assai nantu à i bootloaders AVR, a memoria flash SPI, u protocolu STK500 è u standard 802.15.4.
Tutti l'altri codice in più di a biblioteca descritta sopra hè -
Source: www.habr.com