Mēs rakstām OTA sāknÄ“Å”anas ielādētāju ATmega128RFA1 (kā daļa no Smart Response XE ierÄ«ces)

Mēs rakstām OTA sāknÄ“Å”anas ielādētāju ATmega128RFA1 (kā daļa no Smart Response XE ierÄ«ces)

Viss sākās ar to, ka autors otrreizējā tirgū iegādājās interesantu ierīci - Smart Response XE (īss apraksts). Tā paredzēta skolām: katrs klases skolēns saņem elektroniskai kladei līdzīgu ierīci vai deviņdesmito gadu tulku, skolotājs uzdod jautājumu, bet atbildes skolēni ieraksta uz ierīču tastatūrām, kuras saņem caur a. radio kanālu (802.15.4) uz uztvērēju, kas savienots ar skolotāja personālo datoru.

Å Ä«s ierÄ«ces tika pārtrauktas pirms vairākiem gadiem, un skolas, kuras katra iegādājās par 100ā€“200 USD, tagad tiek parādÄ«tas eBay par USD 10 vai mazāk. Tur esoŔā aparatÅ«ra ir ļoti piemērota geeky eksperimentiem:

  • 60 taustiņu tastatÅ«ra
  • displejs ar izŔķirtspēju 384Ɨ136, 2 biti uz pikseļu - lÄ«dzÄ«gi kā BC, CGA, bet 4 nevis krāsas, bet spilgtuma gradācijas
  • mikrokontrolleris ATmega128RFA1 (128 kB zibatmiņa, 4 kB ROM, 16 kB RAM, 802.15.4 raiduztvērējs)
  • ārējā (attiecÄ«bā pret mikrokontrolleri, nevis visu ierÄ«ci) 1 megabita (128 kilobaitu) zibatmiņa ar SPI interfeisu
  • nodalÄ«jums 4 AAA elementiem.

Pēc mikrokontrollera nosaukuma ir skaidrs, ka tas pieder AVR saimei, kas nozÄ«mē, ka ierÄ«ces padarÄ«Å”ana ar Arduino saderÄ«gu ir vairāk nekā triviāls uzdevums...

No ziņām tālāk Hakadaji autors uzzināja, kas tas ir jau ir izdarÄ«juÅ”i (tā pati saite norāda, ko pieslēgt), kam ir iespēja palaist spēles Arduboy:


Bet autoru vairāk interesē iespēja nevis spēlēt uz ierīces, bet gan mācīties:

  • zibatmiņa ar seriālo SPI interfeisu
  • bootloaders priekÅ” AVR
  • standarts 802.15.4

Autors sāka ar rakstÄ«Å”anu bibliotēkas (GPL v3), kas ļauj inicializēt displeju, izvadÄ«t tekstu un taisnstÅ«rus, kā arÄ« piekļūt SPI zibatmiņai. Tad viņŔ sāka nākt klajā ar idejām ierÄ«ces praktiskai lietoÅ”anai: ar VT-100 saderÄ«gs kabatas terminālis, vairāku spēlētāju spēles. PārbÅ«vējis trÄ«s ierÄ«ces, viņŔ nolēma ā€œiemācÄ«tā€ tām saņemt skices ā€œpa gaisuā€. Kas bÅ«tu ne tikai interesanti, bet arÄ« ļoti ērti: ierÄ«ces korpusu katru reizi ir grÅ«ti atvērt, un zem akumulatora nodalÄ«juma vāka ir tikai caurumi, kas ļauj pieslēgt JTAG programmētāju pie plates.

Mēs rakstām OTA sāknÄ“Å”anas ielādētāju ATmega128RFA1 (kā daļa no Smart Response XE ierÄ«ces)

Ar to pietiek, lai augÅ”upielādētu Arduino sāknÄ“Å”anas ielādētāju, bet ne skici - seriālais ports tur nav savienots, tāpēc joprojām nevarat iztikt bez korpusa atvērÅ”anas. ArÄ« pirmā seriālā porta TX0 un RX0 lÄ«nijas ir apvienotas ar tastatÅ«ras matricas aptauju lÄ«nijām, proti, tām, kas aptaujā funkciju taustiņus displeja sānos. Bet ko jÅ«s varat darÄ«t - autors izveidoja Å”o:

Mēs rakstām OTA sāknÄ“Å”anas ielādētāju ATmega128RFA1 (kā daļa no Smart Response XE ierÄ«ces)

ViņŔ tur atveda JTAG lÄ«nijas, un tagad nav nepiecieÅ”ams atvērt akumulatora nodalÄ«jumu. Un, lai skices varētu augÅ”upielādēt, abus seriālos portus pieslēdzu vienam savienotājam, pievienojot arÄ« slēdzi, jo ar ieliktām baterijām fiziski nav iespējams citādi izslēgt ierÄ«ci.

Pagāja diezgan ilgs laiks, lai strādātu ar lodāmuru, nazi un lÄ«mes pistoli. Kopumā skiču augÅ”upielāde ā€œpa gaisuā€ ir daudz ērtāka, mums steidzami kaut kas tam jāizgudro.

Arduino IDE izmanto programmu, lai augÅ”upielādētu skices avrdude. Tas mijiedarbojas ar mikrokontrolleri, izmantojot protokolu STK500, kas ļauj pārsÅ«tÄ«t failus abos virzienos. Tas ir slikti saderÄ«gs ar kanāliem, kur ir iespējama mainÄ«ga aizkave, kropļojumi un datu zudumi. Ja seriālajā kanālā kaut kas atdalās vai čaukst, jÅ«s varat kļūt traki, meklējot cēloni. Reiz autors cieta pusi dienas, lÄ«dz saprata, ka problēma ir sliktā kabeli, kā arÄ« kaprÄ«zā CP2102 interfeisa pārveidotājā. Pat mikrokontrolleris ar iebÅ«vētu interfeisa pārveidotāju, piemēram, ATmega32u4, dažreiz var darboties Ŕādi. Katrs Arduino lietotājs ir pamanÄ«jis, ka kļūdas, augÅ”upielādējot skices, nav tik reti. Dažkārt ierakstÄ«Å”ana norit labi, bet testa nolasÄ«Å”anas laikā tiek atklāta kļūda. Tas nenozÄ«mē, ka rakstÄ«Å”anas laikā radās kļūda - lasÄ«Å”anas laikā radās kļūme. Tagad iedomājieties, ka, strādājot "pa gaisu", tas pats notiks, bet daudz biežāk.

Izmēģinājis dažādus veidus, kā pārvarēt Å”o problēmu, autors nāca klajā ar sekojoÅ”o. IerÄ«cei ir 128 KB zibatmiņa ar SPI interfeisu - saņemam datus pa vadiem (atceramies, ka autoram jau ir viena ierÄ«ce ar savienotāju sānos), izmantojam Å”o atmiņu kā buferi, un datus nosÅ«tām pa radio kanālu uz citu ierÄ«ci. Sveiki no Cybiko.

Pēc koda rakstÄ«Å”anas darbam ar radio kanālu, kā arÄ« fontu, ielādētājs kļuva garāks par 4 kilobaitiem. Tāpēc HFUSE vērtÄ«ba bija jāmaina no 0xDA uz 0xD8. Tagad sāknÄ“Å”anas ielādētājs var bÅ«t lÄ«dz 8 kilobaitiem garÅ”, un sākuma adrese tagad ir 0x1E000. Tas ir atspoguļots Makefile, taču tas jāņem vērā arÄ« aizpildot bootloader caur avrdude.

802.15.4 raiduztvērējs ATmega128RFA1 sākotnēji ir paredzēts darbam, izmantojot protokolu ZigBee, kas ir diezgan sarežģīti, tāpēc autors nolēma tā vietā vienkārÅ”i pārsÅ«tÄ«t paketes. Tas ir ieviests aparatÅ«rā ATmega128RFA1, tāpēc ir nepiecieÅ”ams maz koda. ArÄ« vienkārŔības labad autors nolēma izmantot fiksētu kanālu, neļaujot to izvēlēties pat manuāli. 802.15.4 standarts atbalsta 16 kanālus ar skaitļiem no 11 lÄ«dz 26. Tie ir diezgan pārpildÄ«ti, daži arÄ« pārklājas ar WiFi kanāliem (sarkans ir ZigBee kanāli, zils, zaļŔ un dzeltens ir WiFi).

Mēs rakstām OTA sāknÄ“Å”anas ielādētāju ATmega128RFA1 (kā daļa no Smart Response XE ierÄ«ces)

IzrādÄ«jās, ka kanāli 15 un 26 ir vismazāk uzņēmÄ«gi pret traucējumiem no WiFi. Autors izvēlējās otro no tiem. Atruna: tulkotājs nezina, vai ir atļauts Ŕādi vienkārÅ”ot ZigBee. VarbÅ«t vajadzētu nedaudz vairāk programmēt un ieviest to pilnÄ«bā?

Pirmajā ierÄ«cē ir jāievieÅ” ierobežota stāvokļa maŔīna, kas pārsÅ«ta datus, izmantojot STK500 protokolu. Lielākoties pārsÅ«tÄ«tie un saņemtie ziņojumi ir paÅ”pietiekami, bet daži ir saistÄ«ti ar tiem, kas tika nosÅ«tÄ«ti caur kanālu agrāk. Tiek sniegts dialoga apraksts Å”eit.

SvarÄ«ga Ŕī dialoga sastāvdaļa ir pakeÅ”u pārsÅ«tÄ«Å”ana, kas paredzētas ierakstÄ«Å”anai mērÄ·a ierÄ«ces zibatmiņā. VienkārÅ”iem AVR saimes mikrokontrolleriem lapas izmērs ir 128 baiti, bet ATmega128RFA1 ā€“ 256. Un zibatmiņai, kas ir pieslēgta caur SPI protokolu, tas pats. Programma pirmajā ierÄ«cē, augÅ”upielādējot skici, nekavējoties nepārsÅ«ta to uz otro, bet gan ieraksta to Å”ajā atmiņā. Kad Arduino IDE pārbauda ieraksta pareizÄ«bu, tiek nosÅ«tÄ«ts tur rakstÄ«tais. Tagad mums ir jāpārsÅ«ta saņemtie dati pa radio kanālu uz otro ierÄ«ci. Tajā paŔā laikā pārslēgÅ”anās no saņemÅ”anas uz pārraidi un atpakaļ notiek diezgan bieži. STK500 protokols ir vienaldzÄ«gs pret aizkavi, taču necieÅ” datu zudumu (dÄ«vaini, bet iepriekÅ” tika teikts, ka kavÄ“Å”anās ietekmē arÄ« datu pārraidi). Un zaudējumi bezvadu pārraides laikā ir neizbēgami. ATmega128RFA1 ir iebÅ«vēta aparatÅ«ras ievieÅ”ana atkārtotiem pieprasÄ«jumiem, kad rodas Å”aubas par pārsÅ«tÄ«Å”anas pareizÄ«bu, taču autors nolēma to paÅ”u ieviest programmatÅ«rā. ViņŔ izstrādāja protokolu, kurā daudz vairāk datu plÅ«st vienā virzienā nekā otrā.

Tas nav ideāls, bet tas darbojas. 256 baitu lapa ir sadalÄ«ta četros segmentos, no kuriem katrs tiek pārraidÄ«ts pa gaisu kā pakete. Pakete var saturēt lÄ«dz 125 baitiem datu plus viens baits garumam un divi baiti CRC. Tātad tur tiek ievietoti 64 baitus gari fragmenti kopā ar lapu un segmentu numuriem (no 0 lÄ«dz 3). Saņēmējai ierÄ«cei ir mainÄ«gais, kas ļauj izsekot, cik segmentu ir saņemti, un, kad visi četri pienāk, sÅ«tÄ«tāja ierÄ«ce saņem apstiprinājumu, ka ir saņemta visa lapa. Nav apstiprinājuma (CRC neatbilda) ā€” atkārtoti nosÅ«tiet visu lapu. Ātrums ir pat lielāks nekā pārraidot pa kabeli. SkatÄ«t:


Bet vispār bÅ«tu nepiecieÅ”ams nodroÅ”ināt ērtu iespēju savienot kabeli ar ierÄ«cēm skiču augÅ”upielādei un caur to. Piemēram, ievietojiet iekÅ”pusē Ŕādu interfeisa pārveidotāju uz CP2102, kā fotoattēlā, un pielÄ«mējiet to pie tāfeles, lai tas varētu izturēt spēku, pievienojot un atvienojot Micro USB kabeli.

Mēs rakstām OTA sāknÄ“Å”anas ielādētāju ATmega128RFA1 (kā daļa no Smart Response XE ierÄ«ces)

Tam ir arÄ« 3,3 voltu stabilizators (un kā to izmantot ierÄ«cē ar 6 voltu baroÅ”anas avotu - ja tikai tam ir tāds pats stabilizators, un jÅ«s varat pievienot divas diodes, lai automātiski atlasÄ«tu, kura no tām ierÄ«cei tiks darbināta) . Visām trim gaismas diodēm jābÅ«t atlodētām no interfeisa pārveidotāja plates, pretējā gadÄ«jumā, darbojoties ar tām, tās papildus noslogos baterijas, kā arÄ« traucēs tastatÅ«ras aptauju un darbu ar zibatmiņu ar SPI interfeisu.

Tiekties uz mērķi izrādījās vēl interesantāk nekā to sasniegt (un nevajag to joku par autobusu). Autors uzzināja daudz par AVR bootloaderiem, SPI zibatmiņu, STK500 protokolu un 802.15.4 standartu.

Visi pārējie kodi papildus iepriekÅ” aprakstÄ«tajai bibliotēkai ir āˆ’ Å”eit, un tas ir arÄ« saskaņā ar GPL v3. Autora Twitter - Å”eit.

Avots: www.habr.com

Pievieno komentāru