Мо як боркунаки OTA барои ATmega128RFA1 менависем (ҳамчун қисми дастгоҳи Smart Response XE)

Мо як боркунаки OTA барои ATmega128RFA1 менависем (ҳамчун қисми дастгоҳи 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 кБ RAM, интиқоли 802.15.4)
  • беруна (нисбат ба микроконтроллер, на тамоми дастгоҳ) хотираи флеши 1 мегабит (128 килобайт) бо интерфейси SPI
  • қисм барои 4 унсури AAA.

Аз номи микроконтроллер маълум аст, ки он ба оилаи AVR тааллуқ дорад, ки маънои онро дорад, ки дастгоҳ ба Arduino мувофиқ аст, на вазифаи ночиз аст...

Аз хабархо Ҳакадэй муаллиф фаҳмид, ки он чӣ аст аллакай кардаанд (ҳамон истинод ба шумо мегӯяд, ки чиро ба куҷо пайваст кардан лозим аст), дорои имкони гузаронидани бозиҳо барои Arduboy:


Аммо муаллиф бештар ба имкони бозӣ кардан дар дастгоҳ не, балки омӯхтан таваҷҷӯҳ дорад:

  • хотираи флеш бо интерфейси SPI силсилавии
  • боркунакҳо барои AVR
  • Стандарт 802.15.4

Муаллиф аз навиштан оғоз кард китобхонаҳо (GPL v3), ки ба шумо имкон медиҳад, ки намоишро оғоз кунед, матн ва росткунҷаҳоро нишон диҳед ва хотираи флеши SPI дастрас кунед. Пас аз он ӯ ба фикру ақидаҳо барои истифодаи амалии дастгоҳ шурӯъ кард: терминали кисаи мувофиқи VT-100, бозиҳои мултипликатори. Се дастгоҳро аз нав сохта, ӯ тасмим гирифт, ки ба онҳо «ба воситаи ҳаво» гирифтани эскизҳоро «омӯзонад». Он чизе, ки на танҳо ҷолиб, балки хеле қулай мебуд: корпуси дастгоҳро ҳар дафъа кушодан душвор аст ва дар зери сарпӯши батарея танҳо сӯрохҳо мавҷуданд, ки ба шумо имкон медиҳанд, ки барномасози JTAG ба тахта пайваст карда шавад.

Мо як боркунаки OTA барои ATmega128RFA1 менависем (ҳамчун қисми дастгоҳи Smart Response XE)

Ин барои бор кардани боркунаки Arduino кифоя аст, аммо на эскиз - порти силсилавӣ дар он ҷо пайваст нашудааст, бинобар ин шумо ба ҳар ҳол бе кушодани парванда кор карда наметавонед. Инчунин, хатҳои TX0 ва RX0-и порти силсилавии аввал бо хатҳои овоздиҳии матритсаи клавиатура, яъне онҳое, ки калидҳои функсионалии паҳлӯҳои экранро пурсиш мекунанд, якҷоя карда мешаванд. Аммо шумо чӣ кор карда метавонед - муаллиф инро сохтааст:

Мо як боркунаки OTA барои ATmega128RFA1 менависем (ҳамчун қисми дастгоҳи Smart Response XE)

Вай хатхои ЖТАГ-ро ба он чо овард ва холо ба кушодани кисми аккумулятор лозим нест. Ва барои он ки эскизҳо бор карда шаванд, ман ҳарду порти силсилаиро ба як пайвасткунак пайваст кардам ва инчунин коммутаторро илова кардам, зеро бо батареяҳои насбшуда ба таври дигар хомӯш кардани дастгоҳ аз ҷиҳати ҷисмонӣ ғайриимкон аст.

Барои кор кардан бо дарзмол, корд ва таппончаи ширеш вақти зиёде лозим буд. Умуман, бор кардани эскизҳо "аз рӯи ҳаво" хеле қулайтар аст; мо бояд фавран барои ин чизе ихтироъ кунем.

Arduino IDE ин барномаро барои бор кардани эскизҳо истифода мебарад аврдуде. Он бо микроконтроллер бо истифода аз протокол ҳамкорӣ мекунад STK500, ки ба шумо имкон медиҳад, ки файлҳоро дар ду самт интиқол диҳед. Он бо каналҳое, ки таъхирҳои тағирёбанда, таҳриф ва талафоти маълумот имконпазиранд, суст мувофиқат мекунад. Агар дар канали сериалӣ чизе фуҷур шавад ё занг занад, шумо метавонед дар ҷустуҷӯи сабаб девона шавед. Боре муаллиф ним рӯз азоб кашид, то фаҳмид, ки мушкилот кабели бад ва инчунин табдилдиҳандаи интерфейси CP2102 аст. Ҳатто микроконтроллер бо табдилдиҳандаи интерфейси дарунсохт, масалан, ATmega32u4, баъзан метавонад чунин амал кунад. Ҳар як корбари Arduino пай бурд, ки хатогиҳо ҳангоми боркунии эскизҳо он қадар кам нестанд. Баъзан сабт хуб мегузарад, аммо ҳангоми хондани санҷиш хатогӣ ошкор мешавад. Ин маънои онро надорад, ки ҳангоми навиштан хатогӣ рух додааст - ҳангоми хондан нокомӣ вуҷуд дошт. Акнун тасаввур кунед, ки ҳангоми кор "аз болои ҳаво" ҳамин чиз рӯй медиҳад, аммо бештар.

Пас аз кӯшиши роҳҳои гуногуни бартараф кардани ин мушкилот, муаллиф ба хулосаи зерин омад. Дастгоҳ дорои хотираи флеши 128 КБ бо интерфейси SPI - мо маълумотро тавассути симҳо қабул мекунем (дар хотир доред, ки муаллиф аллакай як дастгоҳ бо пайвасткунак дар паҳлӯ дорад), ин хотираро ҳамчун буфер истифода баред ва маълумотро тавассути радио фиристед канал ба дастгоҳи дигар. Салом аз Cybiko.

Пас аз навиштани коди кор бо канали радио, инчунин шрифт, боркунак аз 4 килобайт дароз шуд. Аз ин рӯ, арзиши HFUSE бояд аз 0xDA ба 0xD8 иваз карда шавад. Акнун боркунак метавонад то 8 килобайт дарозӣ дошта бошад ва суроғаи ибтидоӣ ҳоло 0x1E000 аст. Ин дар Makefile инъикос ёфтааст, аммо ҳангоми пур кардан низ бояд ба назар гирифта шавад пурборкунанда тавассути avrdude.

Интиқолдиҳандаи 802.15.4 дар ATmega128RFA1 аслан барои кор бо протокол тарҳрезӣ шудааст Зигби, ки хеле мураккаб аст, бинобар ин муаллиф тасмим гирифт, ки ба ҷои он танҳо пакетҳоро интиқол диҳад. Ин дар сахтафзор дар ATmega128RFA1 амалӣ карда мешавад, аз ин рӯ рамзи кам талаб карда мешавад. Инчунин, барои соддагӣ, муаллиф тасмим гирифт, ки канали собитро истифода барад ва ба шумо имкон намедиҳад, ки онро ҳатто дастӣ интихоб кунед. Стандарти 802.15.4 16 каналро бо рақамҳои аз 11 то 26 дастгирӣ мекунад. Онҳо хеле серодаманд, баъзеҳо инчунин каналҳои WiFi-ро дарбар мегиранд (сурх каналҳои ZigBee, кабуд, сабз ва зард WiFi мебошанд).

Мо як боркунаки OTA барои ATmega128RFA1 менависем (ҳамчун қисми дастгоҳи 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 ба қувва тоб оварад.

Мо як боркунаки OTA барои ATmega128RFA1 менависем (ҳамчун қисми дастгоҳи Smart Response XE)

Он инчунин дорои стабилизатори 3,3-волта аст (ва чӣ гуна онро дар дастгоҳи дорои қувваи барқи 6-волта истифода бурдан мумкин аст - агар он як стабилизатор дошта бошад ва шумо метавонед ду диодро илова кунед, то ба таври худкор интихоб кунед, ки кадоме аз онҳо дастгоҳро нерӯ медиҳад) . Ҳар се LED бояд аз панели табдилдиҳандаи интерфейс ҷудо карда шаванд, вагарна онҳо ҳангоми кор бо онҳо батареяҳоро ба таври иловагӣ бор мекунанд ва инчунин ба овоздиҳии клавиатура халал мерасонанд ва бо хотираи флешдор бо интерфейси SPI кор мекунанд.

Пайравӣ аз ноил шудан ба ҳадаф боз ҳам ҷолибтар буд (ва ин шӯхӣ дар бораи автобус лозим нест). Муаллиф дар бораи боркунакҳои AVR, хотираи флеши SPI, протоколи STK500 ва стандарти 802.15.4 бисёр чизҳоро омӯхтааст.

Ҳама рамзи дигар ба ғайр аз китобхонаи дар боло тавсифшуда - аст дар ин ҷо, ва он инчунин дар зери GPL v3 аст. Твиттери муаллиф - дар ин ҷо.

Манбаъ: will.com

Илова Эзоҳ