Kita nulis bootloader OTA kanggo ATmega128RFA1 (minangka bagean saka piranti Smart Response XE)

Kita nulis bootloader OTA kanggo ATmega128RFA1 (minangka bagean saka piranti Smart Response XE)

Iku kabeh diwiwiti kanthi penulis tuku piranti sing menarik ing pasar sekunder - Smart Response XE (katrangan cekak). Iki ditrapake kanggo sekolah: saben siswa ing kelas nampa piranti sing padha karo notebook elektronik utawa penerjemah saka taun nineties, guru takon, lan siswa ngetik jawaban ing keyboard piranti, sing ditampa liwat a saluran radio (802.15.4) menyang panrima disambungake menyang PC guru.

Piranti kasebut mandheg sawetara taun kepungkur, lan apa sing dituku sekolah kanthi rega $100-$200 saben saiki muncul ing eBay kanthi rega $10 utawa kurang. Piranti keras ing kana cocok banget kanggo eksperimen geeky:

  • 60 tombol keyboard
  • tampilan kanthi resolusi 384 Γ— 136, 2 bit saben piksel - padha karo SM, CGA, nanging 4 ora werna, nanging gradations saka padhange
  • mikrokontroler ATmega128RFA1 (memori lampu kilat 128 kB, ROM 4 kB, RAM 16 kB, transceiver 802.15.4)
  • external (ing hubungan kanggo mikrokontroler, ora kabeh piranti) 1 megabit (128 kilobyte) memori lampu kilat karo antarmuka SPI
  • kompartemen kanggo 4 unsur AAA.

Saka jeneng mikrokontroler kasebut jelas yen kalebu kulawarga AVR, tegese nggawe piranti sing kompatibel karo Arduino minangka tugas sing luwih sepele ...

Saka warta ing hackaday penulis nemokake apa iku wis rampung (link sing padha ngandhani apa sing kudu disambungake), duwe kesempatan kanggo mbukak game kanggo Arduboy:


Nanging penulis luwih kasengsem ing kesempatan ora kanggo muter ing piranti, nanging kanggo sinau:

  • memori flash karo antarmuka SPI serial
  • bootloaders kanggo AVR
  • standar 802.15.4

Penulis miwiti kanthi nulis perpustakaan (GPL v3), sing ngijini sampeyan kanggo initialize tampilan, teks output lan persegi dowo, lan ngakses memori lampu kilat SPI. Banjur wiwit teka munggah karo gagasan kanggo praktis nggunakake piranti: terminal kanthong VT-100-kompatibel, game bebarengan. Sawise mbangun maneh telung piranti, dheweke mutusake kanggo "ngajari" dheweke nampa sketsa "liwat udhara." Apa ora mung menarik, nanging uga trep banget: kasus piranti angel mbukak saben wektu, lan ing tutup kompartemen baterei mung ana bolongan sing ngidini sampeyan nyambungake programmer JTAG menyang papan.

Kita nulis bootloader OTA kanggo ATmega128RFA1 (minangka bagean saka piranti Smart Response XE)

Iki cukup kanggo ngunggah bootloader Arduino, nanging ora sketsa - port serial ora disambungake ing kana, supaya sampeyan ora bisa nindakake tanpa mbukak kasus kasebut. Uga, garis TX0 lan RX0 saka port serial pisanan digabungake karo garis polling matriks keyboard, yaiku sing polling tombol fungsi ing sisih layar. Nanging apa sing bisa ditindakake - penulis nggawe iki:

Kita nulis bootloader OTA kanggo ATmega128RFA1 (minangka bagean saka piranti Smart Response XE)

Dheweke nggawa garis JTAG ing kana, lan saiki ora perlu mbukak kompartemen baterei. Lan supaya sketsa bisa diunggah, aku nyambungake loro port serial menyang konektor sing padha, uga nambah switch, amarga kanthi baterei sing diinstal, ora bisa mateni piranti kanthi cara liya.

Butuh sawetara wektu kanggo nggarap wesi solder, piso sarana lan pistol lem. UmumΓ©, ngunggah sketsa "liwat udhara" luwih trep, kita kudu cepet-cepet nggawe apa-apa kanggo iki.

Arduino IDE nggunakake program kanggo ngunggah sketsa avrdude. Iku sesambungan karo mikrokontroler nggunakake protokol STK500, sing ngidini sampeyan nransfer file ing loro arah. Ora cocog karo saluran sing bisa uga ana wektu tundha, distorsi lan mundhut data. Yen ana sing ngeculke utawa rustles ing saluran serial, sampeyan bisa edan looking for sabab. Sawise penulis nandhang sangsara kanggo setengah dina nganti temen maujud sing masalah iku kabel ala, uga CP2102 converter antarmuka capricious. Malah mikrokontroler kanthi konverter antarmuka sing dibangun, contone, ATmega32u4, kadhangkala bisa tumindak kaya iki. Saben pangguna Arduino ngerteni manawa kesalahan nalika ngunggah sketsa ora langka. Kadhangkala rekaman dadi apik, nanging sajrone tes maca kesalahan dideteksi. Iki ora ateges ana kesalahan nalika nulis - ana kegagalan nalika maca. Saiki mbayangno yen nalika nggarap "liwat udhara" kedadeyan sing padha, nanging luwih asring.

Sawise nyoba macem-macem cara kanggo ngatasi masalah iki, penulis teka karo ing ngisor iki. Piranti kasebut nduweni memori flash 128 KB kanthi antarmuka SPI - kita nampa data liwat kabel (elinga yen penulis wis duwe piranti siji karo konektor ing sisih), nggunakake memori iki minangka buffer, lan ngirim data liwat radio. saluran menyang piranti liyane. Salam saka Cybiko.

Sawise nulis kode kanggo nggarap saluran radio, uga font, loader dadi luwih saka 4 kilobyte. Mulane, nilai HFUSE kudu diganti saka 0xDA dadi 0xD8. Saiki bootloader bisa nganti 8 kilobyte dawa, lan alamat wiwitan saiki 0x1E000. Iki dibayangke ing Makefile, nanging uga kudu digatekake nalika ngisi bootloader liwat avrdude.

Transceiver 802.15.4 ing ATmega128RFA1 asline dirancang kanggo operate nggunakake protokol Zigbee, sing cukup rumit, mula penulis mutusake mung ngirim paket. Iki dileksanakake ing hardware ing ATmega128RFA1, supaya sethitik kode dibutuhake. Uga, kanggo kesederhanaan, penulis mutusake nggunakake saluran tetep, ora ngidini sampeyan milih kanthi manual. Standar 802.15.4 ndhukung 16 saluran kanthi nomer saka 11 nganti 26. Padha cukup rame, sawetara uga tumpang tindih saluran WiFi (abang minangka saluran ZigBee, biru, ijo lan kuning minangka WiFi).

Kita nulis bootloader OTA kanggo ATmega128RFA1 (minangka bagean saka piranti Smart Response XE)

Ternyata saluran 15 lan 26 paling ora rentan kanggo gangguan saka WiFi. Penulis milih sing nomer loro. Penafian: penerjemah ora ngerti apa diijini nyederhanakake ZigBee kanthi cara iki. Mungkin kita kudu nindakake pemrograman sing luwih cilik lan ngetrapake kanthi lengkap?

Ing piranti pisanan, perlu kanggo ngleksanakake mesin negara winates sing ngirim data liwat protokol STK500. Umume, pesen sing dikirim lan ditampa cukup mandhiri, nanging sawetara ana gandhengane karo sing liwat saluran kasebut sadurunge. Katrangan saka dialog diwenehi kene.

Komponen penting saka dialog iki yaiku transmisi paket sing arep ditulis ing memori lampu kilat piranti sing dituju. Kanggo mikrokontroler prasaja saka kulawarga AVR, ukuran kaca 128 bait, nanging kanggo ATmega128RFA1 256. Lan kanggo memori lampu kilat sing disambungake liwat protokol SPI, iku padha. Program ing piranti pisanan, nalika ngunggah sketsa, ora langsung nransfer menyang kaloro, nanging nulis ing memori iki. Nalika Arduino IDE mriksa bener entri, dikirim apa ditulis ana. Saiki kita kudu ngirim data sing ditampa liwat saluran radio menyang piranti liya. Ing wektu sing padha, ngalih saka nampa menyang ngirim lan bali cukup kerep. Protokol STK500 ora peduli karo telat, nanging ora ngidinke mundhut data (aneh, nanging kasebut ing ndhuwur yen telat uga mengaruhi transfer data). Lan kerugian sajrone transmisi nirkabel ora bisa dihindari. ATmega128RFA1 nduweni implementasi hardware sing dibangun ing panjalukan sing bola-bali nalika ana keraguan babagan transfer sing bener, nanging penulis mutusake kanggo ngetrapake piranti lunak kasebut. Dheweke ngembangake protokol sing luwih akeh data mili kanthi cara siji tinimbang liyane.

Iku ora sampurna, nanging bisa. Kaca 256-byte dipΓ©rang dadi patang segmen, sing saben-saben dikirim liwat udhara minangka paket. Paket bisa ngemot nganti 125 bita data plus siji bait kanggo dawa lan rong bita kanggo CRC. Dadi fragmen sing dawane 64 bita bebarengan karo nomer kaca lan segmen (saka 0 nganti 3) diselehake ing kana. Piranti panampa nduweni variabel sing ngidini kanggo nglacak jumlah segmen sing wis ditampa, lan nalika kabeh papat teka, piranti sing ngirim nampa konfirmasi yen kabeh kaca wis ditampa. Ora ana konfirmasi (CRC ora cocog) - kirim maneh kabeh kaca. Kacepetan malah luwih gedhe tinimbang nalika ngirim liwat kabel. Waca:


Nanging ing umum, iku perlu kanggo nyedhiyani cara trep kanggo nyambungake kabel menyang piranti kanggo ngunggah sketsa lan liwat iku. Contone, nyelehake ing CP2102 antarmuka konverter, kaya ing foto, lan lem menyang Papan supaya bisa tahan pasukan nalika nyambungake lan medhot kabel Micro USB.

Kita nulis bootloader OTA kanggo ATmega128RFA1 (minangka bagean saka piranti Smart Response XE)

Uga nduweni stabilisator 3,3 volt (lan cara nggunakake piranti kasebut kanthi sumber daya 6 volt - yen mung duwe stabilisator sing padha, lan sampeyan bisa nambah loro dioda kanggo milih kanthi otomatis sing bakal menehi daya piranti) . Kabeh telung LED kudu unsoldered saka Papan Konverter antarmuka, digunakake padha bakal tambahan mbukak baterei nalika operasi ing wong, lan uga ngganggu polling keyboard lan bisa karo memori lampu kilat karo antarmuka SPI.

Nguber gol dadi luwih menarik tinimbang nggayuh (lan ora perlu guyon babagan bis). Penulis sinau akeh babagan bootloader AVR, memori flash SPI, protokol STK500 lan standar 802.15.4.

Kabeh kode liyane saliyane perpustakaan kasebut ing ndhuwur yaiku βˆ’ kene, lan uga ana ing GPL v3. Penulis Twitter - kene.

Source: www.habr.com

Add a comment