Kami sedang menulis pemuat but OTA untuk ATmega128RFA1 (sebagai sebahagian daripada peranti Smart Response XE)

Kami sedang menulis pemuat but OTA untuk ATmega128RFA1 (sebagai sebahagian daripada peranti Smart Response XE)

Semuanya bermula dengan pengarang membeli peranti yang menarik di pasaran sekunder - Smart Response XE (Penerangan Ringkas). Ia bertujuan untuk sekolah: setiap pelajar dalam kelas menerima peranti yang serupa dengan buku nota elektronik atau penterjemah dari tahun sembilan puluhan, guru bertanya soalan, dan pelajar menaip jawapan pada papan kekunci peranti, yang diterima melalui saluran radio (802.15.4) kepada penerima yang disambungkan ke PC guru.

Peranti ini telah dihentikan beberapa tahun yang lalu, dan apa yang dibeli oleh sekolah dengan harga $100-$200 setiap satu kini muncul di eBay dengan harga $10 atau kurang. Perkakasan di sana sangat sesuai untuk eksperimen geeky:

  • 60 kekunci papan kekunci
  • paparan dengan resolusi 384Γ—136, 2 bit setiap piksel - serupa dengan BC, CGA, tetapi 4 bukan warna, tetapi penggredan kecerahan
  • mikropengawal ATmega128RFA1 (memori kilat 128 kB, ROM 4 kB, RAM 16 kB, transceiver 802.15.4)
  • luaran (berkaitan dengan mikropengawal, bukan keseluruhan peranti) 1 megabit (128 kilobait) memori kilat dengan antara muka SPI
  • petak untuk 4 elemen AAA.

Dari nama mikropengawal itu jelas bahawa ia tergolong dalam keluarga AVR, yang bermaksud menjadikan peranti yang serasi dengan Arduino adalah tugas yang lebih daripada remeh...

Daripada berita itu Hackaday penulis mengetahui apa itu sudah pun buat (pautan yang sama memberitahu anda apa yang hendak disambungkan ke mana), berpeluang menjalankan permainan untuk Arduboy:


Tetapi penulis lebih berminat dengan peluang untuk tidak bermain pada peranti, tetapi untuk mengkaji:

  • memori kilat dengan antara muka SPI bersiri
  • pemuat but untuk AVR
  • standard 802.15.4

Penulis memulakan dengan menulis perpustakaan (GPL v3), yang membolehkan anda memulakan paparan, teks output dan segi empat tepat, dan mengakses memori kilat SPI. Kemudian dia mula menghasilkan idea untuk kegunaan praktikal peranti itu: terminal poket serasi VT-100, permainan berbilang pemain. Setelah membina semula tiga peranti, dia memutuskan untuk "mengajar" mereka menerima lakaran "melalui udara." Apa yang bukan sahaja menarik, tetapi juga sangat mudah: sarung peranti sukar dibuka setiap kali, dan di bawah penutup petak bateri hanya terdapat lubang yang membolehkan anda menyambungkan pengaturcara JTAG ke papan.

Kami sedang menulis pemuat but OTA untuk ATmega128RFA1 (sebagai sebahagian daripada peranti Smart Response XE)

Ini cukup untuk memuat naik pemuat but Arduino, tetapi bukan lakaran - port bersiri tidak disambungkan di sana, jadi anda masih tidak boleh melakukannya tanpa membuka kes itu. Juga, garisan TX0 dan RX0 port bersiri pertama digabungkan dengan garis pengundian matriks papan kekunci, iaitu garisan yang mengundi kekunci fungsi pada sisi paparan. Tetapi apa yang boleh anda lakukan - pengarang membina ini:

Kami sedang menulis pemuat but OTA untuk ATmega128RFA1 (sebagai sebahagian daripada peranti Smart Response XE)

Dia membawa talian JTAG ke sana, dan kini tidak perlu membuka petak bateri. Dan supaya lakaran boleh dimuat naik, saya menyambungkan kedua-dua port bersiri ke penyambung yang sama, juga menambah suis, kerana dengan bateri yang dipasang, secara fizikalnya mustahil untuk mematikan peranti dengan cara lain.

Ia mengambil masa yang agak lama untuk bekerja dengan besi pematerian, pisau utiliti dan pistol gam. Secara umum, memuat naik lakaran "melalui udara" adalah lebih mudah; kami perlu mencipta sesuatu untuk ini dengan segera.

Arduino IDE menggunakan program untuk memuat naik lakaran avrdude. Ia berinteraksi dengan mikropengawal menggunakan protokol STK500, yang membolehkan anda memindahkan fail dalam kedua-dua arah. Ia kurang serasi dengan saluran di mana kelewatan berubah-ubah, herotan dan kehilangan data mungkin berlaku. Jika ada sesuatu yang terlepas atau berdesir dalam saluran bersiri, anda boleh gila mencari puncanya. Pernah penulis menderita selama setengah hari sehingga dia menyedari bahawa masalahnya adalah kabel yang buruk, serta penukar antara muka CP2102 yang berubah-ubah. Malah mikropengawal dengan penukar antara muka terbina dalam, contohnya, ATmega32u4, kadangkala boleh bertindak seperti ini. Setiap pengguna Arduino menyedari bahawa ralat semasa memuat naik lakaran tidak begitu jarang berlaku. Kadangkala rakaman berjalan lancar, tetapi semasa ujian membaca ralat dikesan. Ini tidak bermakna terdapat kesilapan semasa menulis - terdapat kegagalan semasa membaca. Sekarang bayangkan bahawa apabila bekerja "melalui udara" perkara yang sama akan berlaku, tetapi lebih kerap.

Selepas mencuba pelbagai cara untuk mengatasi masalah ini, penulis datang dengan perkara berikut. Peranti ini mempunyai memori kilat 128 KB dengan antara muka SPI - kami menerima data melalui wayar (ingat bahawa pengarang sudah mempunyai satu peranti dengan penyambung di sisi), gunakan memori ini sebagai penimbal dan hantar data melalui radio saluran ke peranti lain. Salam dari Cybiko.

Selepas menulis kod untuk berfungsi dengan saluran radio, serta fon, pemuat menjadi lebih panjang daripada 4 kilobait. Oleh itu, nilai HFUSE terpaksa ditukar daripada 0xDA kepada 0xD8. Kini pemuat but boleh panjang sehingga 8 kilobait, dan alamat permulaan kini ialah 0x1E000. Ini ditunjukkan dalam Makefile, tetapi juga harus diambil kira semasa mengisi pemuat but melalui avrdude.

Transceiver 802.15.4 dalam ATmega128RFA1 pada asalnya direka bentuk untuk beroperasi menggunakan protokol ZigBee, yang agak rumit, jadi penulis memutuskan untuk menghantar paket sahaja. Ini dilaksanakan dalam perkakasan dalam ATmega128RFA1, jadi sedikit kod diperlukan. Juga, untuk kesederhanaan, penulis memutuskan untuk menggunakan saluran tetap, tidak membenarkan anda memilihnya secara manual. Piawaian 802.15.4 menyokong 16 saluran dengan nombor dari 11 hingga 26. Ia agak sesak, ada juga saluran WiFi yang bertindih (merah adalah saluran ZigBee, biru, hijau dan kuning adalah WiFi).

Kami sedang menulis pemuat but OTA untuk ATmega128RFA1 (sebagai sebahagian daripada peranti Smart Response XE)

Ternyata saluran 15 dan 26 paling kurang terdedah kepada gangguan daripada WiFi. Penulis memilih yang kedua daripadanya. Penafian: penterjemah tidak tahu sama ada ia dibenarkan untuk memudahkan ZigBee dengan cara ini. Mungkin kita perlu melakukan sedikit lagi pengaturcaraan dan melaksanakannya sepenuhnya?

Pada peranti pertama, adalah perlu untuk melaksanakan mesin keadaan terhingga yang menghantar data melalui protokol STK500. Untuk sebahagian besar, mesej yang dihantar dan diterima adalah mencukupi, tetapi ada yang terikat dengan mesej yang melalui saluran lebih awal. Penerangan tentang dialog diberikan di sini.

Komponen penting dalam dialog ini ialah penghantaran paket yang bertujuan untuk ditulis ke memori denyar peranti destinasi. Untuk mikropengawal mudah keluarga AVR, saiz halaman ialah 128 bait, tetapi untuk ATmega128RFA1 ialah 256. Dan untuk memori kilat yang disambungkan melalui protokol SPI, ia adalah sama. Program dalam peranti pertama, apabila memuat naik lakaran, tidak segera memindahkannya ke yang kedua, tetapi menulisnya ke memori ini. Apabila IDE Arduino menyemak ketepatan entri, ia dihantar apa yang ditulis di sana. Sekarang kita perlu menghantar data yang diterima melalui saluran radio ke peranti kedua. Pada masa yang sama, bertukar daripada menerima kepada menghantar dan kembali berlaku agak kerap. Protokol STK500 tidak peduli dengan kelewatan, tetapi tidak bertolak ansur dengan kehilangan data (pelik, tetapi dikatakan di atas bahawa kelewatan juga menjejaskan pemindahan data). Dan kerugian semasa penghantaran wayarles tidak dapat dielakkan. ATmega128RFA1 mempunyai pelaksanaan perkakasan terbina dalam permintaan berulang apabila terdapat keraguan tentang ketepatan pemindahan, tetapi pengarang memutuskan untuk melaksanakan perkara yang sama dalam perisian sendiri. Dia membangunkan protokol di mana lebih banyak data mengalir satu arah daripada yang lain.

Ia tidak sempurna, tetapi ia berfungsi. Halaman 256-bait dibahagikan kepada empat segmen, setiap satunya dihantar melalui udara sebagai satu paket. Satu paket boleh memuatkan sehingga 125 bait data ditambah satu bait untuk panjang dan dua bait untuk CRC. Jadi serpihan sepanjang 64 bait bersama dengan nombor halaman dan segmen (dari 0 hingga 3) diletakkan di sana. Peranti penerima mempunyai pembolehubah yang membolehkannya menjejaki bilangan segmen yang telah diterima dan apabila keempat-empatnya tiba, peranti penghantar menerima pengesahan bahawa keseluruhan halaman telah diterima. Tiada pengesahan (CRC tidak sepadan) - hantar semula keseluruhan halaman. Kelajuan lebih besar daripada semasa menghantar melalui kabel. Lihat:


Tetapi secara umum, adalah perlu untuk menyediakan cara yang mudah untuk menyambungkan kabel ke peranti untuk memuat naik lakaran dan melaluinya. Sebagai contoh, letakkan di dalam penukar antara muka sedemikian pada CP2102, seperti dalam foto, dan gamkannya pada papan supaya ia dapat menahan daya apabila menyambung dan memutuskan kabel USB Mikro.

Kami sedang menulis pemuat but OTA untuk ATmega128RFA1 (sebagai sebahagian daripada peranti Smart Response XE)

Ia juga mempunyai penstabil 3,3 volt (dan cara menggunakannya dalam peranti dengan bekalan kuasa 6 volt - jika hanya ia mempunyai penstabil yang sama, dan anda boleh menambah dua diod untuk memilih secara automatik yang mana di antaranya akan menghidupkan peranti) . Ketiga-tiga LED mesti tidak dipateri dari papan penukar antara muka, jika tidak, ia akan memuatkan bateri tambahan apabila beroperasi padanya, dan juga mengganggu pengundian papan kekunci dan berfungsi dengan memori denyar dengan antara muka SPI.

Mengejar matlamat ternyata lebih menarik daripada mencapainya (dan tidak memerlukan jenaka tentang bas itu). Penulis belajar banyak tentang pemuat but AVR, memori kilat SPI, protokol STK500 dan standard 802.15.4.

Semua kod lain sebagai tambahan kepada perpustakaan yang diterangkan di atas ialah βˆ’ di sini, dan ia juga berada di bawah GPL v3. Twitter pengarang - di sini.

Sumber: www.habr.com

Tambah komen