Nou ap ekri yon bootloader OTA pou ATmega128RFA1 (kòm yon pati nan aparèy Smart Response XE)

Nou ap ekri yon bootloader OTA pou ATmega128RFA1 (kòm yon pati nan aparèy Smart Response XE)

Tout bagay te kòmanse ak otè a te achte yon aparèy enteresan sou mache segondè a - Smart Response XE (kout deskripsyon). Li fèt pou lekòl yo: chak elèv nan klas la resevwa yon aparèy ki sanble ak yon kaye elektwonik oswa yon tradiktè ki soti nan ane 802.15.4 yo, pwofesè a poze yon kesyon, epi elèv yo tape repons yo sou klavye aparèy yo, yo resevwa yo atravè yon chanèl radyo (XNUMX) nan yon reseptè ki konekte ak òdinatè pwofesè a.

Aparèy sa yo te sispann plizyè ane de sa, e sa lekòl yo te achte pou $100-$200 chak kounye a parèt sou eBay pou $10 oswa mwens. Materyèl la trè apwopriye pou eksperyans geek:

  • 60 klavye kle
  • ekspozisyon ak yon rezolisyon 384 × 136, 2 Bits pou chak pixel - menm jan ak BC, CGA, men 4 pa koulè, men gradyasyon nan klète
  • mikrokontroleur ATmega128RFA1 (128 kB memwa flash, 4 kB ROM, 16 kB RAM, 802.15.4 transceiver)
  • ekstèn (an relasyon ak mikrokontwolè a, pa tout aparèy la) 1 megabit (128 kilobyte) memwa flash ak koòdone SPI
  • lòj pou 4 eleman AAA.

Soti nan non an nan mikrokontwolè a li klè ke li fè pati fanmi an AVR, ki vle di fè aparèy la Arduino-konpatib se yon travay plis pase trivial ...

Soti nan nouvèl la Hackaday otè a te jwenn sa li ye te deja fè (menm lyen an di ou kisa pou konekte kote), gen opòtinite pou kouri jwèt pou Arduboy:


Men, otè a pi enterese nan opòtinite pou pa jwe sou aparèy la, men etidye:

  • memwa flash ak koòdone seri SPI
  • bootloaders pou AVR
  • estanda 802.15.4

Otè a te kòmanse ekri bibliyotèk yo (GPL v3), ki pèmèt ou inisyalize ekspozisyon an, tèks pwodiksyon ak rektang, ak aksè nan memwa flash SPI. Lè sa a, li te kòmanse vini ak lide pou itilizasyon pratik nan aparèy la: yon tèminal pòch VT-100-konpatib, jwèt multijoueurs. Lè l te rebati twa aparèy, li te deside “anseye” yo pou yo resevwa desen “anlè lè a”. Ki sa ki ta dwe pa sèlman enteresan, men tou, trè pratik: ka aparèy la difisil pou louvri chak fwa, ak anba kouvèti a lòj batri gen sèlman twou ki pèmèt ou konekte yon pwogramè JTAG nan tablo a.

Nou ap ekri yon bootloader OTA pou ATmega128RFA1 (kòm yon pati nan aparèy Smart Response XE)

Sa a se ase yo Upload Arduino bootloader la, men se pa trase a - pò seri a pa konekte la, kidonk ou toujou pa ka fè san yo pa louvri ka a. Epitou, liy TX0 ak RX0 nan premye pò seri yo konbine avèk liy biwo vòt matris klavye a, sètadi sa yo ki vote kle fonksyon yo sou kote ekspozisyon an. Men, kisa ou ka fè - otè a te bati sa a:

Nou ap ekri yon bootloader OTA pou ATmega128RFA1 (kòm yon pati nan aparèy Smart Response XE)

Li te pote liy JTAG yo la, epi kounye a pa gen okenn nesesite pou louvri lòj batri a. Epi pou ke desen yo ka telechaje, mwen konekte tou de pò seri a menm konektè a, tou ajoute yon switch, paske ak pil yo enstale, li se fizikman enposib fèmen aparèy la nan nenpòt lòt fason.

Li te pran anpil tan pou travay ak yon fè soude, yon kouto itilite ak yon zam lakòl. An jeneral, telechaje desen "sou lè a" se pi plis pratik; nou ijan bezwen envante yon bagay pou sa.

Arduino IDE itilize pwogram nan pou telechaje desen avrdude. Li reyaji ak mikrokontwolè a lè l sèvi avèk pwotokòl la STK500, ki pèmèt ou transfere fichye nan toude direksyon yo. Li mal konpatib ak chanèl kote reta varyab, deformation ak pèt done yo posib. Si yon bagay vin lach oswa rustles nan chanèl la seri, ou ka ale fou chèche kòz la. Yon fwa otè a soufri pou mwatye yon jou jiskaske li reyalize ke pwoblèm nan se te yon kab move, osi byen ke yon konvètisè koòdone kaprisyeuz CP2102. Menm yon mikrokontroleur ak yon konvètisè koòdone entegre, pou egzanp, ATmega32u4, ka pafwa aji tankou sa a. Chak itilizatè Arduino remake ke erè lè w telechaje desen yo pa tèlman ra. Pafwa anrejistreman an ale byen, men pandan yon tès li yo detekte yon erè. Sa pa vle di ke te gen yon erè pandan ekri - te gen yon echèk pandan lekti. Koulye a, imajine ke lè w ap travay "sou lè a" menm bagay la pral rive, men pi souvan.

Apre yo fin eseye diferan fason yo simonte pwoblèm sa a, otè a te vini ak sa ki annapre yo. Aparèy la gen yon memwa flash 128 KB ak yon koòdone SPI - nou resevwa done sou fil yo (sonje ke otè a deja gen yon aparèy ki gen yon konektè sou bò a), sèvi ak memwa sa a kòm yon tanpon, epi voye done yo sou radyo a. chanèl pou yon lòt aparèy. Bonjou soti nan Cybiko.

Apre ekri kòd la pou travay ak chanèl radyo a, osi byen ke font la, loader a te vin pi long pase 4 kilobyte. Se poutèt sa, valè HFUSE te dwe chanje soti nan 0xDA a 0xD8. Koulye a, bootloader a ka jiska 8 kilobyte longè, ak adrès la kòmanse se kounye a 0x1E000. Sa a se reflete nan Makefile a, men yo ta dwe tou pran an kont lè ranpli charjeur via avrdude.

Transceiver 802.15.4 nan ATmega128RFA1 a fèt orijinal pou opere lè l sèvi avèk pwotokòl la. ZigBee, ki se byen konplike, kidonk otè a deside jis transmèt pake pito. Sa a se aplike nan pyès ki nan konpitè nan ATmega128RFA1 a, kidonk ti kòd obligatwa. Epitou, pou senplisite, otè a deside sèvi ak yon kanal fiks, pa pèmèt ou chwazi li menm manyèlman. Estanda 802.15.4 a sipòte 16 chanèl ak nimewo ki soti nan 11 a 26. Yo byen ki gen anpil moun, gen kèk tou sipèpoze chanèl WiFi (wouj se chanèl ZigBee, ble, vèt ak jòn se WiFi).

Nou ap ekri yon bootloader OTA pou ATmega128RFA1 (kòm yon pati nan aparèy Smart Response XE)

Li te tounen soti ke chanèl 15 ak 26 yo pi piti sansib a entèferans nan WiFi. Otè a te chwazi dezyèm nan yo. Limit responsabilite nou: tradiktè a pa konnen si li gen dwa senplifye ZigBee fason sa a. Petèt nou ta dwe fè yon ti kras plis pwogramasyon epi aplike li konplètman?

Sou premye aparèy la, li nesesè pou aplike yon machin eta fini ki transmèt done atravè pwotokòl STK500 la. Pou pi fò, mesaj yo transmèt ak resevwa yo otonòm, men gen kèk ki mare ak sa yo ki te pase nan kanal la pi bonè. Yo bay deskripsyon dyalòg la isit la.

Yon eleman enpòtan nan dyalòg sa a se transmisyon pake ki gen entansyon ekri nan memwa flash aparèy destinasyon an. Pou mikwokontwolè senp nan fanmi AVR, gwosè paj la se 128 bytes, men pou ATmega128RFA1 li se 256. Ak pou memwa flash ki konekte atravè pwotokòl SPI a, se menm bagay la. Pwogram nan premye aparèy la, lè w telechaje yon chema, pa transfere li imedyatman nan dezyèm lan, men li ekri li nan memwa sa a. Lè Arduino IDE tcheke kòrèkteman nan antre a, li voye sa ki te ekri la. Koulye a, nou bezwen transmèt done yo resevwa atravè chanèl radyo nan dezyèm aparèy la. An menm tan an, chanje soti nan resevwa a transmèt ak tounen vin byen souvan. Pwotokòl la STK500 se endiferan nan reta, men li pa tolere pèt done (etranj, men li te di pi wo a ke reta afekte tou transfè done). Ak pèt pandan transmisyon san fil yo inevitab. ATmega128RFA1 a gen yon aplikasyon pyès ki nan konpitè bati nan demann repete lè gen dout sou kòrèk transfè a, men otè a deside aplike menm bagay la nan lojisyèl tèt li. Li devlope yon pwotokòl kote anpil plis done ap koule yon fason pase lòt la.

Li pa pafè, men li travay. Paj 256-byte a divize an kat segman, chak nan yo transmèt sou lè a kòm yon pake. Yon pake ka kenbe jiska 125 byte nan done plis yon byte pou longè ak de byte pou CRC. Se konsa, fragman 64 byte longè ansanm ak nimewo paj ak segman (ki soti nan 0 a 3) yo mete la. Aparèy k ap resevwa a gen yon varyab ki pèmèt li swiv konbyen segman yo te resevwa, epi lè tout kat rive, aparèy k ap voye a resevwa konfimasyon ke yo te resevwa tout paj la. Pa gen konfimasyon (CRC pa t matche) - voye tout paj la ankò. Vitès la menm pi gran pase lè transmèt via kab. Gade:


Men, an jeneral, li ta nesesè yo bay yon fason pratik konekte kab la ak aparèy yo pou telechaje desen ak atravè li. Pou egzanp, mete andedan tankou yon konvètisè koòdone sou CP2102 a, tankou nan foto a, epi kole li sou tablo a pou ke li ka kenbe tèt ak fòs la lè konekte ak dekonekte kab la Micro USB.

Nou ap ekri yon bootloader OTA pou ATmega128RFA1 (kòm yon pati nan aparèy Smart Response XE)

Li tou gen yon estabilizasyon 3,3-volt (ak kouman yo sèvi ak li nan yon aparèy ki gen yon ekipman pou pouvwa 6-volt - si sèlman li gen estabilize a menm, epi ou ka ajoute de dyod otomatikman chwazi kiyès nan yo ki pral pouvwa aparèy la) . Tout twa dirije yo dwe desoude nan tablo konvètisè koòdone, otreman yo pral anplis chaje pil yo lè yo ap opere sou yo, epi tou entèfere ak biwo vòt klavye ak travay ak memwa flash ak yon koòdone SPI.

Pouswiv yon objektif te tounen menm plis enteresan pase reyalize li (epi yo pa bezwen blag sa sou bis la). Otè a te aprann anpil bagay sou charjeur AVR, memwa flash SPI, pwotokòl STK500 ak estanda 802.15.4.

Tout lòt kòd anplis bibliyotèk ki dekri anwo a se - isit la, epi li tou anba GPL v3. Twitter otè a - isit la.

Sous: www.habr.com

Add nouvo kòmantè