Бид ATmega128RFA1-д зориулсан OTA ачаалагчийг бичиж байна (Smart Response XE төхөөрөмжийн нэг хэсэг болгон)

Бид ATmega128RFA1-д зориулсан OTA ачаалагчийг бичиж байна (Smart Response XE төхөөрөмжийн нэг хэсэг болгон)

Энэ бүхэн зохиогч хоёрдогч зах зээл дээр сонирхолтой төхөөрөмж худалдан авснаар эхэлсэн - Smart Response XE (богино тайлбар). Энэ нь сургуулиудад зориулагдсан: ангийн сурагч бүр 802.15.4-ээд оны үеийн цахим дэвтэр эсвэл орчуулагчтай төстэй төхөөрөмж авч, багш асуулт асууж, сурагчид төхөөрөмжийн гар дээр хариултаа бичдэг. радио суваг (XNUMX) багшийн компьютерт холбогдсон хүлээн авагч руу.

Эдгээр төхөөрөмжүүдийг хэдэн жилийн өмнө зогсоосон бөгөөд тус бүр нь 100-200 доллараар худалдаж авсан сургуулиуд eBay дээр 10 доллар ба түүнээс бага үнээр гарч ирж байна. Тэнд байгаа техник хангамж нь гажиг туршилт хийхэд маш тохиромжтой.

  • 60 товчлууртай гар
  • 384×136 нягтралтай дэлгэц, пиксел тутамд 2 бит - BC, CGA-тай төстэй, гэхдээ 4 өнгө биш, харин тод байдлын зэрэглэл
  • микроконтроллер ATmega128RFA1 (128 кБ флаш санах ой, 4 кБ ROM, 16 кБ RAM, 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 гэх мэт суурилуулсан интерфэйс хувиргагчтай микроконтроллер ч гэсэн заримдаа ийм үйлдэл хийх боломжтой. Ардуиногийн хэрэглэгч бүр ноорог байршуулах үед алдаа гарах нь тийм ч ховор биш гэдгийг анзаарсан. Заримдаа бичлэг сайн явагддаг ч туршилтын уншлагын явцад алдаа илэрдэг. Энэ нь бичих явцад алдаа гарсан гэсэн үг биш юм - унших явцад алдаа гарсан. Одоо "агаараар" ажиллахад ижил зүйл тохиолдох болно гэж төсөөлөөд үз дээ, гэхдээ илүү олон удаа.

Энэ асуудлыг даван туулах янз бүрийн аргыг туршиж үзсэний эцэст зохиогч дараахь зүйлийг гаргаж ирэв. Энэ төхөөрөмж нь 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 байт хуудас нь дөрвөн сегментэд хуваагддаг бөгөөд тус бүр нь пакет хэлбэрээр агаараар дамждаг. Пакет нь уртаараа нэг байт, CRC-д хоёр байт хүртэл 125 байт өгөгдөл багтаах боломжтой. Тиймээс тэнд хуудас, сегментийн дугаар (64-ээс 0 хүртэл) 3 байт урттай хэсгүүдийг байрлуулна. Хүлээн авагч төхөөрөмж нь хэдэн сегмент хүлээн авсныг хянах боломжтой хувьсагчтай бөгөөд дөрвүүлээ ирэхэд илгээгч төхөөрөмж бүх хуудсыг хүлээн авсан гэсэн баталгааг хүлээн авдаг. Баталгаажуулалт байхгүй (CRC тохирохгүй) - хуудсыг бүхэлд нь дахин илгээнэ үү. Хурд нь кабелиар дамжуулахаас ч илүү байна. Харах:


Гэхдээ ерөнхийдөө ноорог зураг байршуулах төхөөрөмжид кабелийг холбоход тохиромжтой арга замыг хангах шаардлагатай болно. Жишээлбэл, CP2102 дээрх зураг дээрх шиг интерфэйс хувиргагчийг дотор нь байрлуулж, Micro USB кабелийг холбож, салгах үед хүчийг тэсвэрлэхийн тулд самбар дээр наа.

Бид ATmega128RFA1-д зориулсан OTA ачаалагчийг бичиж байна (Smart Response XE төхөөрөмжийн нэг хэсэг болгон)

Энэ нь мөн 3,3 вольтын тогтворжуулагчтай (мөн үүнийг 6 вольтын цахилгаан хангамжтай төхөөрөмжид хэрхэн ашиглах вэ - хэрэв энэ нь ижил тогтворжуулагчтай бол та хоёр диод нэмж, тэдгээрийн аль нь төхөөрөмжийг тэжээхийг автоматаар сонгох боломжтой) . Бүх гурван LED-ийг интерфэйс хөрвүүлэгч самбараас салгах ёстой, эс тэгвээс тэдгээр нь ажиллахдаа батерейг цэнэглэхээс гадна гарны санал хураалтад саад болж, SPI интерфейстэй флаш санах ойтой ажиллах болно.

Зорилгодоо хүрэх нь түүнд хүрэхээс ч илүү сонирхолтой байсан (автобусны тухай хошигнол хэрэггүй). Зохиогч AVR ачаалагч, SPI флаш санах ой, STK500 протокол, 802.15.4 стандартын талаар маш их зүйлийг мэдэж авсан.

Дээр дурдсан номын сангаас гадна бусад бүх код нь - энд, мөн энэ нь GPL v3-ийн дагуу байна. Зохиогчийн твиттер - энд.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх