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 шайкеш келүүчү аппаратты жасоо анча деле маанилүү эмес...

Жаңылыктардан Hackday автор анын эмне экенин билди буга чейин кылган (ошол эле шилтемеде эмнени каякка туташтыруу керектиги айтылат), 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 түзмөгүнүн бир бөлүгү катары)

Ал жерге ЖТАГ линияларын алып келди, эми аккумулятордук бөлүмдү ачуунун кереги жок. Эскиздерди жүктөө үчүн, мен эки сериялык портту бир туташтыргычка туташтырдым, ошондой эле которгучту коштум, анткени орнотулган батареялар менен аппаратты башка жол менен өчүрүү физикалык жактан мүмкүн эмес.

Бир паяльник, бычак жана желим тапанча менен иштөө үчүн бир топ убакыт кетти. Жалпысынан алганда, эскиздерди "аба аркылуу" жүктөө алда канча ыңгайлуу, биз бул үчүн тез арада бир нерсе ойлоп табышыбыз керек.

Arduino IDE эскиздерди жүктөө үчүн программаны колдонот avrdude. Бул протоколду колдонуу менен микроконтроллер менен өз ара аракеттенет STK500, бул файлдарды эки багытта өткөрүүгө мүмкүндүк берет. Бул өзгөрүлмө кечигүү, бурмалоо жана маалыматтарды жоготуу мүмкүн болгон каналдар менен начар шайкеш келет. Эгер сериал каналында бир нерсе бошоп кетсе же шыбырап кетсе, анын себебин издеп жинди болуп кетесиз. Бир жолу автор көйгөйдүн начар кабелде, ошондой эле каприздуу CP2102 интерфейсинин конвертеринде экенин түшүнгөнгө чейин жарым күн кыйналды. Ал тургай, орнотулган интерфейс конвертери бар микроконтроллер, мисалы, ATmega32u4, кээде ушундай иш кыла алат. Ар бир Arduino колдонуучусу эскиздерди жүктөөдө каталар сейрек эмес экенин байкаган. Кээде жазуу жакшы өтөт, бирок сыноо учурунда ката аныкталат. Бул жазуу учурунда ката кетти дегенди билдирбейт - окуу учурунда ката кетти. Эми элестетип көрүңүз, "аба аркылуу" иштегенде, ошол эле нерсе болот, бирок андан да көп.

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

Радиоканал менен иштөө үчүн кодду, ошондой эле шрифти жазгандан кийин жүктөгүч 4 килобайттан узун болуп калды. Ошондуктан, HFUSE маанисин 0xDAдан 0xD8ге өзгөртүү керек болчу. Эми жүктөгүчтүн узундугу 8 килобайтка чейин болушу мүмкүн, ал эми баштапкы дареги азыр 0x1E000. Бул Makefileде чагылдырылган, бирок аны толтурууда да эске алуу керек жүктөгүч avrdude аркылуу.

ATmega802.15.4RFA128деги 1 трансивери алгач протоколду колдонуу үчүн иштелип чыккан Zigbee, бул абдан татаал, ошондуктан автор анын ордуна жөн гана пакеттерди өткөрүп берүүнү чечти. Бул 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 астында да бар. Автордун Твиттери - бул жерде.

Source: www.habr.com

Комментарий кошуу