Biz ATmega128RFA1 uchun OTA yuklash dasturini yozyapmiz (Smart Response XE qurilmasining bir qismi sifatida)

Biz ATmega128RFA1 uchun OTA yuklash dasturini yozyapmiz (Smart Response XE qurilmasining bir qismi sifatida)

Hammasi muallifning ikkilamchi bozorda qiziqarli qurilmani sotib olishi bilan boshlandi - Smart Response XE (qisqa Tasvir). U maktablar uchun moʻljallangan: sinfdagi har bir oʻquvchi elektron daftar yoki 802.15.4-yillardagi tarjimonga oʻxshash moslama oladi, oʻqituvchi savol beradi, oʻquvchilar esa qurilmalarning klaviaturasiga javoblarni yozib oladilar. radiokanal (XNUMX) o'qituvchining shaxsiy kompyuteriga ulangan qabul qilgichga.

Ushbu qurilmalar bir necha yil oldin ishlab chiqarish to'xtatilgan va har biri 100-200 dollarga sotib olingan maktablar eBay-da 10 dollar yoki undan kamroq narxda paydo bo'lmoqda. U erdagi apparat geeky tajribalar uchun juda mos keladi:

  • 60 tugmali klaviatura
  • 384 × 136 pikselli displey, har bir piksel uchun 2 bit - BC, CGA ga o'xshaydi, lekin 4 rang emas, balki yorqinlik gradatsiyasi
  • mikrokontroller ATmega128RFA1 (128 kB flesh-xotira, 4 kB ROM, 16 kB RAM, 802.15.4 qabul qiluvchi)
  • tashqi (butun qurilmaga emas, mikrokontrollerga nisbatan) SPI interfeysli 1 megabit (128 kilobayt) flesh xotira
  • 4 ta AAA elementi uchun bo'linma.

Mikrokontroller nomidan uning AVR oilasiga tegishli ekanligi ayon bo'ladi, ya'ni qurilmani Arduino-moslashuvchan qilish oddiygina vazifa emas...

Yangiliklardan boshlab Hackday muallif nima ekanligini bilib oldi allaqachon qilgan (xuddi shu havola sizga qaerga ulanish kerakligini aytadi), Arduboy uchun o'yinlarni o'tkazish imkoniyati mavjud:


Ammo muallifni qurilmada o'ynash emas, balki o'rganish imkoniyati ko'proq qiziqtiradi:

  • ketma-ket SPI interfeysi bilan flesh xotira
  • AVR uchun yuklagichlar
  • standart 802.15.4

Muallif yozishdan boshladi kutubxonalar (GPL v3), bu sizga displeyni ishga tushirish, matn va to'rtburchaklar chiqarish va SPI flesh xotirasiga kirish imkonini beradi. Keyin u qurilmadan amaliy foydalanish uchun g'oyalarni taklif qila boshladi: VT-100-ga mos keladigan cho'ntak terminali, ko'p o'yinchi o'yinlari. U uchta qurilmani qayta qurib, ularni "havo orqali" eskizlarni olishni "o'rgatish"ga qaror qildi. Bu nafaqat qiziqarli, balki juda qulay bo'lishi mumkin: qurilma korpusini har safar ochish qiyin va batareya bo'limi qopqog'i ostida faqat JTAG dasturchisini plataga ulash imkonini beruvchi teshiklar mavjud.

Biz ATmega128RFA1 uchun OTA yuklash dasturini yozyapmiz (Smart Response XE qurilmasining bir qismi sifatida)

Bu Arduino yuklash moslamasini yuklash uchun etarli, lekin eskiz emas - ketma-ket port ulanmagan, shuning uchun siz hali ham ishni ochmasdan qilolmaysiz. Shuningdek, birinchi ketma-ket portning TX0 va RX0 satrlari klaviatura matritsasining so'rov satrlari, ya'ni displeyning yon tomonlaridagi funksiya tugmachalarini so'raydiganlar bilan birlashtirilgan. Lekin nima qila olasiz - muallif buni qurgan:

Biz ATmega128RFA1 uchun OTA yuklash dasturini yozyapmiz (Smart Response XE qurilmasining bir qismi sifatida)

U JTAG liniyalarini u erga olib keldi va endi batareya bo'linmasini ochishning hojati yo'q. Eskizlar yuklanishi uchun men ikkala ketma-ket portni bir xil ulagichga uladim, shuningdek, kalitni qo'shdim, chunki o'rnatilgan batareyalar bilan qurilmani boshqa yo'l bilan o'chirish jismonan mumkin emas.

Lehimlash temir, yordamchi pichoq va yopishtiruvchi qurol bilan ishlashga ancha vaqt kerak bo'ldi. Umuman olganda, eskizlarni "havoda" yuklash ancha qulayroq, biz zudlik bilan buning uchun biror narsa ixtiro qilishimiz kerak.

Arduino IDE eskizlarni yuklash uchun dasturdan foydalanadi avrdude. Protokol yordamida mikrokontroller bilan o'zaro ta'sir qiladi STK500, bu sizga har ikki yo'nalishda ham fayllarni uzatish imkonini beradi. O'zgaruvchan kechikishlar, buzilishlar va ma'lumotlar yo'qolishi mumkin bo'lgan kanallar bilan yomon mos keladi. Agar serial kanalida biror narsa bo'shab qolsa yoki shitirlashsa, sababni izlab aqldan ozishingiz mumkin. Bir marta muallif muammoning yomon kabel, shuningdek, CP2102 interfeysi konvertorining injiqligi ekanligini tushunmaguncha, yarim kun davomida azob chekdi. Hatto o'rnatilgan interfeys konvertori bo'lgan mikrokontroller, masalan, ATmega32u4, ba'zida shunday harakat qilishi mumkin. Har bir Arduino foydalanuvchisi eskizlarni yuklashda xatolar unchalik kam emasligini payqagan. Ba'zida yozib olish yaxshi ketadi, lekin test o'qish paytida xatolik aniqlanadi. Bu yozish paytida xatolik yuz berdi degani emas - o'qish paytida xatolik yuz berdi. Endi tasavvur qiling-a, "havoda" ishlaganda xuddi shu narsa sodir bo'ladi, lekin tez-tez.

Ushbu muammoni bartaraf etishning turli usullarini sinab ko'rgandan so'ng, muallif quyidagi xulosaga keldi. Qurilmada SPI interfeysli 128 KB flesh-xotira mavjud - biz ma'lumotlarni simlar orqali olamiz (esda tutingki, muallifning yon tomonida ulagichi bo'lgan bitta qurilma bor), bu xotiradan bufer sifatida foydalaning va ma'lumotlarni radio orqali yuboring boshqa qurilmaga kanal. Cybiko'dan salom.

Radiokanal bilan ishlash uchun kodni, shuningdek, shriftni yozgandan so'ng, yuklovchi 4 kilobaytdan uzunroq bo'ldi. Shuning uchun HFUSE qiymatini 0xDA dan 0xD8 ga o'zgartirish kerak edi. Endi bootloader uzunligi 8 kilobaytgacha bo'lishi mumkin va boshlang'ich manzil endi 0x1E000. Bu Makefile-da aks ettirilgan, ammo to'ldirishda ham e'tiborga olinishi kerak yuklovchi avrdude orqali.

ATmega802.15.4RFA128-dagi 1 qabul qiluvchi-uzatuvchisi dastlab protokol yordamida ishlash uchun mo'ljallangan. ZigBee, bu juda murakkab, shuning uchun muallif shunchaki paketlarni uzatishga qaror qildi. Bu ATmega128RFA1 apparatida amalga oshiriladi, shuning uchun kam kod talab qilinadi. Bundan tashqari, soddaligi uchun muallif hatto qo'lda tanlashga ruxsat bermasdan, sobit kanaldan foydalanishga qaror qildi. 802.15.4 standarti raqamlari 16 dan 11 gacha bo'lgan 26 ta kanalni qo'llab-quvvatlaydi. Ular juda gavjum, ba'zilari Wi-Fi kanallarini ham qoplaydi (qizil - ZigBee kanallari, ko'k, yashil va sariq - WiFi).

Biz ATmega128RFA1 uchun OTA yuklash dasturini yozyapmiz (Smart Response XE qurilmasining bir qismi sifatida)

Ma'lum bo'lishicha, 15 va 26-kanallar WiFi shovqinlariga eng kam sezgir.Muallif ulardan ikkinchisini tanlagan. Rad etish: tarjimon ZigBee-ni shu tarzda soddalashtirishga ruxsat borligini bilmaydi. Balki biz biroz ko'proq dasturlashtirib, uni to'liq amalga oshirishimiz kerakmi?

Birinchi qurilmada STK500 protokoli orqali ma'lumotlarni uzatuvchi cheklangan holat mashinasini amalga oshirish kerak. Ko'pincha, uzatiladigan va qabul qilingan xabarlar o'z-o'zidan etarli, ammo ba'zilari avvalroq kanal orqali o'tgan xabarlarga bog'langan. Dialogning tavsifi berilgan shu yerda.

Ushbu dialogning muhim komponenti - bu maqsad qurilmaning flesh-xotirasiga yozish uchun mo'ljallangan paketlarni uzatish. AVR oilasining oddiy mikrokontrollerlari uchun sahifa hajmi 128 bayt, lekin ATmega128RFA1 uchun bu 256. SPI protokoli orqali ulangan flesh-xotira uchun esa xuddi shunday. Birinchi qurilmadagi dastur eskizni yuklashda uni darhol ikkinchisiga o'tkazmaydi, balki uni ushbu xotiraga yozadi. Arduino IDE yozuvning to'g'riligini tekshirganda, u erda yozilgan narsa yuboriladi. Endi biz radiokanal orqali olingan ma'lumotlarni ikkinchi qurilmaga o'tkazishimiz kerak. Shu bilan birga, qabul qilishdan uzatishga va orqaga o'tish juda tez-tez sodir bo'ladi. STK500 protokoli kechikishlarga befarq, lekin ma'lumotlar yo'qolishiga toqat qilmaydi (g'alati, lekin yuqorida kechikishlar ma'lumotlar uzatilishiga ham ta'sir qilishi aytilgan edi). Va simsiz uzatish paytida yo'qotishlar muqarrar. ATmega128RFA1 o'tkazmaning to'g'riligiga shubha tug'ilganda takroriy so'rovlarning o'rnatilgan apparat ta'minotiga ega, ammo muallif buni dasturiy ta'minotda ham amalga oshirishga qaror qildi. U protokol ishlab chiqdi, unda ma'lumotlar bir tomonga boshqasiga qaraganda ancha ko'p.

Bu mukammal emas, lekin u ishlaydi. 256 baytlik sahifa to'rtta segmentga bo'lingan, ularning har biri havo orqali paket sifatida uzatiladi. Paket 125 baytgacha ma'lumotni, shuningdek uzunligi uchun bir baytni va CRC uchun ikki baytni saqlashi mumkin. Shunday qilib, u erda 64 bayt uzunlikdagi fragmentlar va sahifa va segment raqamlari (0 dan 3 gacha) joylashtiriladi. Qabul qiluvchi qurilmada qancha segment olinganligini kuzatish imkonini beruvchi o'zgaruvchi mavjud va to'rttasi kelganda jo'natuvchi qurilma butun sahifa olinganligi haqidagi tasdiqni oladi. Tasdiqlash yo'q (CRC mos kelmadi) - butun sahifani qayta yuboring. Tezlik kabel orqali uzatishdan ham kattaroqdir. Qarang:


Ammo umuman olganda, kabelni eskizlarni yuklash va u orqali qurilmalarga ulashning qulay usulini ta'minlash kerak bo'ladi. Misol uchun, fotosuratda bo'lgani kabi, CP2102-ga bunday interfeys konvertorini joylashtiring va Micro USB kabelini ulash va ajratishda kuchga bardosh bera oladigan tarzda uni taxtaga yopishtiring.

Biz ATmega128RFA1 uchun OTA yuklash dasturini yozyapmiz (Smart Response XE qurilmasining bir qismi sifatida)

Shuningdek, u 3,3 voltli stabilizatorga ega (va uni 6 voltli quvvat manbai bo'lgan qurilmada qanday ishlatish kerak - agar u bir xil stabilizatorga ega bo'lsa va ulardan qaysi biri qurilmani quvvatlantirishini avtomatik ravishda tanlash uchun ikkita diod qo'shishingiz mumkin) . Barcha uchta LEDni interfeys konvertor taxtasidan lehimsiz bo'lishi kerak, aks holda ular ishlayotganda batareyalarni qo'shimcha ravishda yuklaydi, shuningdek, klaviatura so'roviga xalaqit beradi va SPI interfeysi bilan flesh-xotira bilan ishlaydi.

Maqsadga intilish unga erishishdan ko'ra qiziqroq bo'lib chiqdi (va avtobus haqida bu hazil kerak emas). Muallif AVR yuklash qurilmalari, SPI flesh-xotirasi, STK500 protokoli va 802.15.4 standarti haqida ko'p narsalarni bilib oldi.

Yuqorida tavsiflangan kutubxonaga qo'shimcha ravishda barcha boshqa kodlar - shu yerda, va u ham GPL v3 ostida. Muallifning Twitteri - shu yerda.

Manba: www.habr.com

a Izoh qo'shish