Біз ATmega128RFA1 үшін OTA жүктеушісін жазып жатырмыз (Smart Response XE құрылғысының бөлігі ретінде)

Біз ATmega128RFA1 үшін OTA жүктеушісін жазып жатырмыз (Smart Response XE құрылғысының бөлігі ретінде)

Барлығы автордың қайталама нарықта қызықты құрылғы - Smart Response XE сатып алуынан басталды.қысқаша сипаттамасы). Ол мектептерге арналған: сыныптағы әрбір оқушы тоқсаныншы жылдардағы электронды дәптерге немесе аудармашыға ұқсас құрылғыны алады, мұғалім сұрақ қояды, ал оқушылар құрылғының пернетақтасына жауаптарын тереді, олар телефон арқылы қабылданады. радиоарна (802.15.4) мұғалімнің ДК-ге қосылған қабылдағышқа.

Бұл құрылғылар бірнеше жыл бұрын тоқтатылды және әрқайсысы 100-200 долларға сатып алынған мектептер қазір eBay-де 10 доллар немесе одан төмен бағаға шығады. Ондағы аппараттық құрал гееки эксперименттер үшін өте қолайлы:

  • 60 пернелік пернетақта
  • ажыратымдылығы 384×136 дисплей, бір пиксельге 2 бит – BC, CGA сияқты, бірақ 4 түс емес, жарықтық градациялары
  • микроконтроллер ATmega128RFA1 (128 кБ флэш-жад, 4 кБ ROM, 16 кБ жедел жады, 802.15.4 трансивері)
  • сыртқы (бүкіл құрылғыға емес, микроконтроллерге қатысты) SPI интерфейсі бар 1 мегабит (128 килобайт) флэш-жад
  • 4 AAA элементтеріне арналған бөлік.

Микроконтроллердің атауынан оның AVR отбасына жататыны анық, яғни құрылғыны Arduino-үйлесімді ету тривиальды міндет емес...

Жаңалықтардан Хакадэй автор оның не екенін анықтады жасап қойған (сол сілтеме сізге қайда қосылу керектігін айтады), Arduboy үшін ойындарды іске қосу мүмкіндігі бар:


Бірақ авторды құрылғыда ойнау емес, зерттеу мүмкіндігі көбірек қызықтырады:

  • сериялық SPI интерфейсі бар флэш-жад
  • AVR үшін жүктеушілер
  • 802.15.4 стандарты

Автор жазудан бастады кітапханалар (GPL v3), ол дисплейді инициализациялауға, мәтін мен тіктөртбұрыштарды шығаруға және SPI флэш жадына қол жеткізуге мүмкіндік береді. Содан кейін ол құрылғыны практикалық қолдану үшін идеяларды ойлап таба бастады: VT-100 үйлесімді қалта терминалы, көп ойыншы ойындары. Үш құрылғыны қайта құрастырғаннан кейін ол оларды «ауа арқылы» эскиздерді қабылдауды «үйретуді» шешті. Бұл тек қызықты ғана емес, сонымен қатар өте ыңғайлы болар еді: құрылғының корпусын әр уақытта ашу қиын, ал батарея бөлігінің қақпағының астында JTAG бағдарламашысын тақтаға қосуға мүмкіндік беретін тесіктер ғана бар.

Біз ATmega128RFA1 үшін OTA жүктеушісін жазып жатырмыз (Smart Response XE құрылғысының бөлігі ретінде)

Бұл Arduino жүктеушісін жүктеу үшін жеткілікті, бірақ эскиз емес - сериялық порт ол жерде қосылмаған, сондықтан сіз әлі де корпусты ашпай жасай алмайсыз. Сондай-ақ, бірінші сериялық порттың TX0 және RX0 жолдары пернетақта матрицасының сұрау сызықтарымен, атап айтқанда дисплейдің бүйірлеріндегі функционалдық пернелерді сұрайтын жолдармен біріктірілген. Бірақ сіз не істей аласыз - автор мұны жасады:

Біз ATmega128RFA1 үшін OTA жүктеушісін жазып жатырмыз (Smart Response XE құрылғысының бөлігі ретінде)

Ол JTAG желілерін сонда әкелді, енді батарея бөлімін ашудың қажеті жоқ. Эскиздерді жүктеп салу үшін мен екі сериялық портты бір қосқышқа қостым, сонымен қатар қосқышты қостым, өйткені орнатылған батареялармен құрылғыны басқа жолмен өшіру физикалық мүмкін емес.

Дәнекерлеу үтікімен, пышақпен және желім пистолетімен жұмыс істеуге біраз уақыт қажет болды. Жалпы, эскиздерді «әуе арқылы» жүктеп салу әлдеқайда ыңғайлы, біз бұл үшін шұғыл түрде бірдеңе ойлап табуымыз керек.

Arduino IDE эскиздерді жүктеп салу үшін бағдарламаны пайдаланады avrdude. Ол хаттаманың көмегімен микроконтроллермен әрекеттеседі STK500, бұл файлдарды екі бағытта тасымалдауға мүмкіндік береді. Ол ауыспалы кешігулер, бұрмаланулар және деректердің жоғалуы мүмкін арналармен нашар үйлеседі. Егер сериялық арнада бірдеңе босап кетсе немесе сыбдыр шықса, оның себебін іздеуге болады. Бірде автор мәселенің нашар кабель, сондай-ақ CP2102 интерфейстік түрлендіргіші екенін түсінгенге дейін жарты күн бойы зардап шекті. Тіпті кірістірілген интерфейс түрлендіргіші бар микроконтроллер, мысалы, ATmega32u4, кейде осылай әрекет ете алады. Әрбір Arduino пайдаланушысы эскиздерді жүктеп салу кезіндегі қателер соншалықты сирек емес екенін байқады. Кейде жазу жақсы өтеді, бірақ сынақты оқу кезінде қате анықталады. Бұл жазу кезінде қате болды дегенді білдірмейді - оқу кезінде сәтсіздік болды. Енді елестетіп көріңізші, «әуеде» жұмыс істегенде дәл солай болады, бірақ жиірек.

Бұл мәселені шешудің әртүрлі әдістерін қолданып көргеннен кейін, автор келесіге келді. Құрылғыда SPI интерфейсі бар 128 КБ флэш-жады бар - біз деректерді сымдар арқылы аламыз (автордың жағында қосқышы бар бір құрылғы бар екенін есте сақтаңыз), бұл жадты буфер ретінде пайдаланыңыз және деректерді радио арқылы жіберіңіз басқа құрылғыға арна. Cybiko-дан сәлем.

Радиоарнамен жұмыс істеу үшін кодты, сондай-ақ қаріпті жазғаннан кейін жүктеуші 4 килобайттан ұзағырақ болды. Сондықтан HFUSE мәнін 0xDA-дан 0xD8-ге өзгерту керек болды. Енді жүктегіштің ұзындығы 8 килобайтқа дейін болуы мүмкін, ал бастапқы мекенжай енді 0x1E000. Бұл Makefile файлында көрсетілген, бірақ оны толтыру кезінде де ескеру қажет жүктеуші avrdude арқылы.

ATmega802.15.4RFA128 ішіндегі 1 трансивері бастапқыда протоколды пайдаланып жұмыс істеуге арналған. Зигби, бұл өте күрделі, сондықтан автор оның орнына жай ғана пакеттерді жіберуді шешті. Бұл ATmega128RFA1 аппараттық құралында жүзеге асырылады, сондықтан аз код қажет. Сондай-ақ, қарапайым болу үшін автор оны қолмен таңдауға мүмкіндік бермей, тіркелген арнаны пайдалануды шешті. 802.15.4 стандарты 16-ден 11-ға дейінгі сандары бар 26 арнаны қолдайды. Олар өте көп, кейбіреулері WiFi арналарын да біріктіреді (қызыл - ZigBee арналары, көк, жасыл және сары - WiFi).

Біз ATmega128RFA1 үшін OTA жүктеушісін жазып жатырмыз (Smart Response XE құрылғысының бөлігі ретінде)

15 және 26 арналар WiFi кедергілеріне ең аз ұшырайтыны анықталды.Автор олардың екіншісін таңдаған. Жауапкершіліктен бас тарту: аудармашы ZigBee-ді осылай жеңілдетуге рұқсат етілгенін білмейді. Мүмкін біз біраз бағдарламалауды және оны толығымен енгізуіміз керек пе?

Бірінші құрылғыда мәліметтерді STK500 хаттамасы арқылы жіберетін соңғы күй машинасын енгізу қажет. Көбінесе жіберілетін және қабылданған хабарламалар өзін-өзі қамтамасыз етеді, бірақ кейбіреулері бұрын арна арқылы өткендерге байланысты. Диалогқа сипаттама беріледі осында.

Бұл диалогтың маңызды құрамдас бөлігі тағайындалған құрылғының флэш-жадына жазуға арналған пакеттерді жіберу болып табылады. AVR отбасының қарапайым микроконтроллерлері үшін бет өлшемі 128 байт, бірақ ATmega128RFA1 үшін 256. Ал SPI протоколы арқылы қосылған флэш-жад үшін бұл бірдей. Бірінші құрылғыдағы бағдарлама эскизді жүктеген кезде оны бірден екіншісіне өткізбейді, оны осы жадқа жазады. Arduino IDE жазбаның дұрыстығын тексергенде, онда жазылған нәрсе жіберіледі. Енді радиоарна арқылы алынған деректерді екінші құрылғыға беру керек. Сонымен қатар қабылдаудан жіберуге және кері қайтаруға ауысу жиі орын алады. STK500 хаттамасы кідірістерге немқұрайлы қарайды, бірақ деректердің жоғалуына жол бермейді (біртүрлі, бірақ жоғарыда кідірістердің деректерді тасымалдауға да әсер ететіні айтылды). Ал сымсыз тарату кезінде жоғалтулар сөзсіз. ATmega128RFA1-де тасымалдаудың дұрыстығына күмән туындаған кезде қайталанатын сұраулардың кірістірілген аппараттық іске асырылуы бар, бірақ автор оны бағдарламалық жасақтамада өзі енгізуді шешті. Ол бір жолмен басқасына қарағанда әлдеқайда көп деректер ағыны болатын протоколды әзірледі.

Бұл тамаша емес, бірақ ол жұмыс істейді. 256 байттық бет төрт сегментке бөлінген, олардың әрқайсысы әуе арқылы пакет түрінде беріледі. Пакет 125 байтқа дейін деректерді және ұзындығы бойынша бір байтты және CRC үшін екі байтты сақтай алады. Осылайша, ұзындығы 64 байт фрагменттер бет және сегмент нөмірлерімен (0-ден 3-ке дейін) орналастырылады. Қабылдаушы құрылғыда қанша сегменттің қабылданғанын бақылауға мүмкіндік беретін айнымалы бар және төртеуі де келген кезде жіберуші құрылғы бүкіл беттің қабылданғаны туралы растауды алады. Растау жоқ (CRC сәйкес келмеді) - бүкіл бетті қайта жіберіңіз. Жылдамдық кабель арқылы жіберуден де жоғары. Қараңыз:


Бірақ тұтастай алғанда, кабельді эскиздерді жүктеуге арналған құрылғыларға және ол арқылы қосудың ыңғайлы әдісін қамтамасыз ету қажет. Мысалы, фотосуреттегідей CP2102 интерфейсінің түрлендіргішінің ішіне орналастырып, Micro USB кабелін қосу және ажырату кезінде күшке төтеп бере алатындай етіп оны тақтаға жабыстырыңыз.

Біз ATmega128RFA1 үшін OTA жүктеушісін жазып жатырмыз (Smart Response XE құрылғысының бөлігі ретінде)

Сондай-ақ оның 3,3 вольтты тұрақтандырғышы бар (және оны 6 вольтты қуат көзі бар құрылғыда қалай пайдалану керек - егер оның бірдей тұрақтандырғышы болса және олардың қайсысы құрылғыны қуаттайтынын автоматты түрде таңдау үшін екі диод қосуға болады) . Барлық үш жарықдиодты интерфейс түрлендіргіш тақтасынан ажырату керек, әйтпесе олар жұмыс істеген кезде батареяларды қосымша жүктейді, сонымен қатар пернетақтаны сұрауға және SPI интерфейсі бар флэш-жадпен жұмыс істеуге кедергі келтіреді.

Мақсатқа жету оған жетуден де қызықтырақ болып шықты (және автобус туралы бұл әзіл қажет емес). Автор AVR жүктеушілері, SPI флэш-жады, STK500 хаттамасы және 802.15.4 стандарты туралы көп нәрсені білді.

Жоғарыда сипатталған кітапханадан басқа барлық басқа код - осында, сонымен қатар ол GPL v3 астында. Авторлық Twitter - осында.

Ақпарат көзі: www.habr.com

пікір қалдыру