Kami nyerat bootloader OTA pikeun ATmega128RFA1 (salaku bagian tina alat Smart Response XE)

Kami nyerat bootloader OTA pikeun ATmega128RFA1 (salaku bagian tina alat Smart Response XE)

Éta sadayana dimimitian ku panulis mésér alat anu pikaresepeun dina pasar sekundér - Smart Response XE (pedaran pondok). Hal ieu ditujukeun pikeun sakola: unggal murid di kelas nampi alat anu sami sareng buku catetan éléktronik atanapi penerjemah ti taun nineties, guru naroskeun patarosan, sareng murid ngetik jawaban dina kibor alat, anu ditampi via a saluran radio (802.15.4) ka panarima disambungkeun ka PC guru.

Alat-alat ieu dileungitkeun sababaraha taun ka pengker, sareng naon anu dipésér ku sakola pikeun $ 100- $ 200 masing-masing ayeuna muncul dina eBay pikeun $ 10 atanapi kirang. Hardware aya cocog pisan pikeun percobaan geeky:

  • 60 keyboard konci
  • tampilan kalawan resolusi 384 × 136, 2 bit per piksel - sarupa SM, CGA, tapi 4 teu kelir, tapi gradasi kacaangan
  • mikrokontroler ATmega128RFA1 (memori flash 128 kB, 4 kB ROM, 16 kB RAM, 802.15.4 transceiver)
  • éksternal (dina hubungan jeung mikrokontroler, teu sakabéh alat) 1 megabit (128 kilobyte) memori flash kalawan panganteur SPI
  • kompartemen pikeun 4 elemen AAA.

Tina nami mikrokontroler jelas yén éta milik kulawarga AVR, anu hartosna ngajantenkeun alat anu cocog sareng Arduino mangrupikeun tugas anu langkung sepele ...

Ti béja Hackday pangarang manggihan naon éta geus rengse (Tumbu anu sami nyarioskeun naon anu kedah dihubungkeun), gaduh kasempetan pikeun ngajalankeun kaulinan pikeun Arduboy:


Tapi panulis leuwih museurkeun kasempetan teu maén dina alat, tapi diajar:

  • memori flash kalawan panganteur SPI serial
  • bootloaders pikeun AVR
  • standar 802.15.4

Pangarang dimimitian ku tulisan perpustakaan (GPL v3), nu ngidinan Anjeun pikeun initialize tampilan, kaluaran téks na rectangles, sarta aksés memori flash SPI. Lajeng anjeunna mimiti datang nepi ka gagasan pikeun pamakéan praktis alat: terminal saku VT-100-cocog, kaulinan multiplayer. Ngadamel deui tilu alat, anjeunna mutuskeun pikeun "ngajar" aranjeunna nampi sketsa "dina hawa". Naon bakal jadi teu ngan metot, tapi ogé pohara merenah: bisi alat hese dibuka unggal waktu, sarta dina panutup kompartemen batré ngan aya liang nu ngidinan Anjeun pikeun nyambungkeun programmer JTAG ka dewan.

Kami nyerat bootloader OTA pikeun ATmega128RFA1 (salaku bagian tina alat Smart Response XE)

Ieu cukup pikeun unggah bootloader Arduino, tapi teu sketsa - port serial teu disambungkeun di dinya, jadi Anjeun masih teu bisa ngalakukeun tanpa muka kasus. Ogé, garis TX0 sareng RX0 tina port serial munggaran digabungkeun sareng garis polling tina matriks keyboard, nyaéta anu polling tombol fungsi dina sisi tampilan. Tapi naon anu anjeun tiasa laksanakeun - panulis ngawangun ieu:

Kami nyerat bootloader OTA pikeun ATmega128RFA1 (salaku bagian tina alat Smart Response XE)

Anjeunna nyandak jalur JTAG ka dinya, sareng ayeuna henteu kedah muka kompartemen batré. Sareng supados sketsa tiasa diunggah, kuring nyambungkeun dua palabuhan serial kana konektor anu sami, ogé nambihan saklar, sabab ku batré dipasang, sacara fisik teu mungkin mareuman alat ku cara anu sanés.

Butuh waktu rada lila pikeun digawekeun ku beusi soldering, péso utiliti sarta gun lem. Sacara umum, unggah sketsa "leuwih hawa" langkung merenah, urang kedah urgently invent hal pikeun ieu.

Arduino IDE ngagunakeun program pikeun unggah sketsa avrdude. Éta berinteraksi sareng mikrokontroler nganggo protokol STK500, nu ngidinan Anjeun pikeun nransper payil dina duanana arah. Éta kirang cocog sareng saluran dimana telat variabel, distorsi sareng leungitna data mungkin. Lamun hal asalna leupas atawa rustles dina saluran serial, anjeun bisa balik gélo pilari cukang lantaranana. Sakali panulis ngalaman satengah dinten dugi anjeunna sadar yén masalah éta kabel goréng, kitu ogé converter panganteur CP2102 capricious. Malah mikrokontroler sareng konverter antarbeungeut anu diwangun, contona, ATmega32u4, sakapeung tiasa ngalakukeun sapertos kieu. Unggal pamaké Arduino geus noticed nu kasalahan nalika unggah sketsa teu jadi langka. Kadang-kadang ngarékam éta saé, tapi salami tés maca kasalahan dideteksi. Ieu henteu hartosna aya kasalahan nalika nyerat - aya kagagalan nalika maca. Ayeuna bayangkeun yén nalika damel "dina hawa" hal anu sami bakal kajantenan, tapi langkung sering.

Saatos nyobian sababaraha cara pikeun ngungkulan masalah ieu, panulis datang sareng ieu di handap. Alatna ngagaduhan mémori flash 128 KB kalayan antarmuka SPI - kami nampi data dina kabel (inget yén panulis parantos ngagaduhan hiji alat anu aya konektor di sisi), nganggo mémori ieu salaku panyangga, sareng ngirim data kana radio. saluran ka alat sejen. Salam ti Cybiko.

Saatos nyerat kode pikeun dianggo sareng saluran radio, ogé font, loader janten langkung panjang ti 4 kilobyte. Ku alatan éta, nilai HFUSE kudu dirobah tina 0xDA ka 0xD8. Ayeuna bootloader tiasa dugi ka 8 kilobytes, sareng alamat awal ayeuna 0x1E000. Ieu reflected dina Makefile, tapi ogé kudu dibawa kana akun nalika ngeusian bootloader via avrdude.

Transceiver 802.15.4 dina ATmega128RFA1 asalna dirancang pikeun beroperasi nganggo protokol Zigbee, nu rada pajeulit, jadi panulis mutuskeun pikeun ngan ngirimkeun pakét gantina. Ieu dilaksanakeun dina hardware di ATmega128RFA1, jadi saeutik kode diperlukeun. Ogé, pikeun kesederhanaan, panulis mutuskeun pikeun ngagunakeun saluran tetep, teu ngidinan Anjeun pikeun milih eta malah sacara manual. Standar 802.15.4 ngadukung 16 saluran kalayan nomer tina 11 dugi ka 26. Aranjeunna rada rame, sababaraha ogé tumpang tindih saluran WiFi (beureum nyaéta saluran ZigBee, biru, héjo sareng konéng nyaéta WiFi).

Kami nyerat bootloader OTA pikeun ATmega128RFA1 (salaku bagian tina alat Smart Response XE)

Tétéla yén saluran 15 sareng 26 sahenteuna rentan ka gangguan tina WiFi.Panulis milih anu kadua. Bantahan: penerjemah henteu terang naha éta diidinan nyederhanakeun ZigBee ku cara ieu. Panginten urang kedah ngalakukeun pemrograman langkung sakedik sareng ngalaksanakeunana lengkep?

Dina alat munggaran, perlu pikeun nerapkeun mesin kaayaan terhingga anu ngirimkeun data ngaliwatan protokol STK500. Sabagéan ageung, pesen anu dikirimkeun sareng ditampi cekap mandiri, tapi sawaréh aya hubunganana sareng anu ngalangkungan saluran tadi. Pedaran ngeunaan dialog dirumuskeun di dieu.

Komponén penting tina dialog ieu nyaéta pangiriman pakét anu dimaksudkeun pikeun ditulis kana mémori lampu kilat alat tujuan. Pikeun mikrokontroler basajan tina kulawarga AVR, ukuran kaca 128 bait, tapi pikeun ATmega128RFA1 256. Jeung memori flash disambungkeun via protokol SPI sarua. Program dina alat kahiji, nalika unggah sketsa, teu langsung mindahkeun ka kadua, tapi nulis dina mémori ieu. Nalika Arduino IDE mariksa kabeneran éntri, dikirimkeun naon anu diserat di dinya. Ayeuna urang kedah ngirimkeun data anu ditampi liwat saluran radio ka alat anu kadua. Dina waktos anu sami, gentos tina nampi kana ngirimkeun sareng mundur sering sering. Protokol STK500 acuh ka reureuh, tapi teu sabar leungitna data (aneh, tapi ieu ceuk luhur yén reureuh ogé mangaruhan mindahkeun data). Sareng karugian salami pangiriman nirkabel teu tiasa dihindari. ATmega128RFA1 gaduh palaksanaan hardware anu diwangun dina pamundut-terusan nalika aya mamang ngeunaan kabeneran transferna, tapi panulis mutuskeun pikeun nerapkeun anu sami dina parangkat lunak nyalira. Anjeunna ngembangkeun protokol dimana langkung seueur data ngalir dina hiji arah tibatan anu sanés.

Teu sampurna, tapi jalan. Kaca 256-bait dibagi kana opat bagéan, nu masing-masing dikirimkeun ngaliwatan hawa salaku pakét a. Hiji pakét tiasa nahan dugi ka 125 bait data ditambah hiji bait pikeun panjangna sareng dua bait pikeun CRC. Jadi fragmen 64 bait panjangna babarengan jeung nomer kaca jeung ruas (ti 0 nepi ka 3) disimpen di dinya. Alat panampa boga variabel anu ngamungkinkeun pikeun ngalacak sabaraha bagéan anu ditampi, sareng nalika sadayana opat sumping, alat pangirim nampi konfirmasi yén sadaya halaman parantos nampi. Taya konfirmasi (CRC teu cocog) - resend sakabéh kaca. Lajuna langkung ageung tibatan nalika ngirimkeun kabel. Tingali:


Tapi sacara umum, perlu nyadiakeun cara merenah pikeun nyambungkeun kabel ka alat-alat pikeun unggah sketsa tur ngaliwatan eta. Contona, nempatkeun di jero hiji panganteur converter on CP2102, sakumaha dina poto, sarta lem ka dewan meh bisa tahan gaya nalika nyambungkeun jeung megatkeun sambungan kabel Micro USB.

Kami nyerat bootloader OTA pikeun ATmega128RFA1 (salaku bagian tina alat Smart Response XE)

Éta ogé gaduh penstabil 3,3 volt (sareng kumaha cara ngagunakeunana dina alat anu nganggo catu daya 6 volt - upami ngan gaduh penstabil anu sami, sareng anjeun tiasa nambihan dua dioda pikeun otomatis milih anu mana anu bakal ngawasa alat) . Katiluna LEDs kudu unsoldered ti dewan converter panganteur, disebutkeun aranjeunna Sajaba bakal ngamuat accu nalika operasi on aranjeunna, sarta ogé ngaganggu polling keyboard sarta gawé bareng memori flash kalawan panganteur SPI.

Ngudag tujuan tétéla jadi malah leuwih metot ti achieving eta (jeung teu perlu lulucon éta ngeunaan beus). Panulis diajar seueur ngeunaan bootloader AVR, mémori flash SPI, protokol STK500 sareng standar 802.15.4.

Sadaya kode sanésna salian ti perpustakaan anu dijelaskeun di luhur nyaéta − di dieu, sarta eta oge dina GPL v3. Twitter pangarang - di dieu.

sumber: www.habr.com

Tambahkeun komentar