Muna rubuta bootloader na OTA don ATmega128RFA1 (a matsayin ɓangare na na'urar Amsa Amsa XE)

Muna rubuta bootloader na OTA don ATmega128RFA1 (a matsayin ɓangare na na'urar Amsa Amsa XE)

An fara ne da marubucin yana siyan na'ura mai ban sha'awa akan kasuwar sakandare - Smart Response XE (takaice bayanin). An yi shi ne don makarantu: kowane ɗalibi a cikin ajin yana karɓar na'ura mai kama da na'urar rubutu ta lantarki ko kuma mai fassara daga shekaru casa'in, malami ya yi tambaya, ɗalibai kuma ɗalibai su rubuta amsoshin a kan maɓallan na'urorin, waɗanda aka karɓa ta hanyar tashar rediyo (802.15.4) zuwa mai karɓa da aka haɗa da PC na malami.

An dakatar da waɗannan na'urori shekaru da yawa da suka gabata, kuma abin da makarantu da aka saya akan $100-$200 kowannensu yanzu yana tasowa akan eBay akan $10 ko ƙasa da haka. Kayan aikin da ke wurin ya dace sosai don gwaje-gwajen geeky:

  • 60 makullin madannai
  • nuni tare da ƙuduri na 384 × 136, 2 ragowa da pixel - kama da BC, CGA, amma 4 ba launuka ba, amma grads na haske
  • microcontroller ATmega128RFA1 (128 kB flash memory, 4kB ROM, 16 kB RAM, 802.15.4 transceiver)
  • waje (dangane da microcontroller, ba duka na'urar ba) 1 megabit (128 kilobyte) ƙwaƙwalwar walƙiya tare da ƙirar SPI
  • sashi don abubuwan 4 AAA.

Daga sunan microcontroller ya bayyana a fili cewa yana cikin dangin AVR, wanda ke nufin yin na'urar Arduino-jituwa aiki ne fiye da ƙaramin aiki ...

Daga labarai Hackaday marubucin ya gano menene sun riga sun yi (Haɗin guda ɗaya yana gaya muku abin da za ku haɗa a ina), samun damar gudanar da wasanni don Arduboy:


Amma marubucin ya fi sha'awar damar kada ku yi wasa a kan na'urar, amma don nazarin:

  • ƙwaƙwalwar walƙiya tare da ƙirar SPI na serial
  • bootloaders don AVR
  • Babban darajar 802.15.4

Marubucin ya fara da rubutu dakunan karatu (GPL v3), wanda ke ba ka damar fara nuni, fitarwa rubutu da rectangles, da samun damar ƙwaƙwalwar filasha ta SPI. Sa'an nan kuma ya fara samar da ra'ayoyin don amfani da na'urar a aikace: tashar VT-100 mai dacewa da aljihu, wasanni masu yawa. Bayan ya sake gina na’urori uku, ya yanke shawarar “koya” su don karɓar zane-zane “a kan iska.” Abin da ba zai zama mai ban sha'awa ba kawai, amma kuma ya dace sosai: akwati na na'urar yana da wuya a buɗe kowane lokaci, kuma a ƙarƙashin murfin baturi akwai ramuka kawai wanda ke ba ka damar haɗa mai shirye-shiryen JTAG zuwa allon.

Muna rubuta bootloader na OTA don ATmega128RFA1 (a matsayin ɓangare na na'urar Amsa Amsa XE)

Wannan ya isa ya loda bootloader na Arduino, amma ba zane-zane ba - tashar tashar jiragen ruwa ba ta da alaƙa a can, don haka har yanzu ba za ku iya yin ba tare da buɗe shari'ar ba. Hakanan, layin TX0 da RX0 na tashar tashar jiragen ruwa ta farko an haɗa su tare da layukan jefa ƙuri'a na matrix na madannai, wato waɗanda ke jefa kuri'a maɓallan ayyuka a gefen nunin. Amma me za ku iya yi - marubucin ya gina wannan:

Muna rubuta bootloader na OTA don ATmega128RFA1 (a matsayin ɓangare na na'urar Amsa Amsa XE)

Ya kawo layukan JTAG a can, kuma yanzu babu bukatar bude dakin batir. Kuma don a iya loda zane-zane, sai na haɗa dukkan tashoshin jiragen ruwa biyu zuwa na'ura mai haɗawa ɗaya, na kuma ƙara maɓalli, saboda da batir ɗin da aka sanya, ba zai yiwu a kashe na'urar ta kowace hanya ba.

An ɗauki ɗan lokaci kaɗan don yin aiki tare da ƙarfe mai siyar, wuka mai amfani da bindigar manne. Gabaɗaya, loda zane-zane "a kan iska" ya fi dacewa; muna buƙatar ƙirƙira wani abu cikin gaggawa don wannan.

Arduino IDE yana amfani da shirin don loda zane-zane avrdude. Yana hulɗa tare da microcontroller ta amfani da yarjejeniya STK500, wanda ke ba ka damar canja wurin fayiloli a bangarorin biyu. Ba shi da kyau sosai tare da tashoshi inda jinkiri masu canzawa, murdiya da asarar bayanai ke yiwuwa. Idan wani abu ya zo sako-sako da ko sata a cikin serial tashar, za ka iya yin hauka neman dalilin. Da zarar marubucin ya sha wahala na rabin yini har sai ya gane cewa matsalar ita ce mugun kebul, da kuma mai canza yanayin CP2102. Ko da microcontroller tare da ginannen mahallin dubawa, misali, ATmega32u4, na iya yin wani lokaci kamar haka. Kowane mai amfani da Arduino ya lura cewa kurakurai lokacin loda zane ba kasafai bane. Wani lokaci rikodin yana tafiya da kyau, amma yayin gwajin karanta an gano kuskure. Wannan ba yana nufin an sami kuskure yayin rubutu ba - an sami gazawa yayin karatu. Yanzu yi tunanin cewa lokacin aiki "a kan iska" abu ɗaya zai faru, amma sau da yawa.

Bayan gwada hanyoyi daban-daban don shawo kan wannan matsala, marubucin ya fito da wadannan. Na'urar tana da ƙwaƙwalwar walƙiya mai nauyin 128 KB tare da ƙirar SPI - muna karɓar bayanai akan wayoyi (tuna cewa marubucin ya riga ya sami na'ura guda ɗaya tare da mai haɗawa a gefe), yi amfani da wannan ƙwaƙwalwar azaman ma'auni, kuma aika bayanan akan rediyo. tashar zuwa wata na'ura. Sannu daga Cybiko.

Bayan rubuta lambar don yin aiki tare da tashar rediyo, da kuma font, mai ɗaukar kaya ya zama tsayi fiye da 4 kilobytes. Don haka, dole ne a canza ƙimar HFUSE daga 0xDA zuwa 0xD8. Yanzu bootloader na iya zama tsayin kilobytes 8, kuma adireshin farawa yanzu 0x1E000. Ana nuna wannan a cikin Makefile, amma kuma yakamata a yi la'akari da lokacin cikawa bootloader via avrdude.

802.15.4 transceiver a cikin ATmega128RFA1 an tsara shi don aiki ta amfani da yarjejeniya. Zigbee, wanda yake da rikitarwa sosai, don haka marubucin ya yanke shawarar kawai aika fakiti maimakon. Ana aiwatar da wannan a cikin kayan masarufi a cikin ATmega128RFA1, don haka ana buƙatar ƙaramin lamba. Har ila yau, don sauƙi, marubucin ya yanke shawarar yin amfani da kafaffen tashar, ba ya ba ka damar zaɓar shi ko da da hannu. Ma'auni na 802.15.4 yana goyan bayan tashoshi 16 tare da lambobi daga 11 zuwa 26. Suna da cunkoson jama'a, wasu kuma sun mamaye tashoshin WiFi (ja su ne tashoshin ZigBee, blue, kore da rawaya WiFi ne).

Muna rubuta bootloader na OTA don ATmega128RFA1 (a matsayin ɓangare na na'urar Amsa Amsa XE)

Ya bayyana cewa tashoshi 15 da 26 ba su da sauƙi ga tsangwama daga WiFi. Mawallafin ya zaɓi na biyu daga cikinsu. Disclaimer: mai fassara bai san ko an yarda ya sauƙaƙa ZigBee ta wannan hanyar ba. Wataƙila ya kamata mu ƙara ƙarin shirye-shirye kuma mu aiwatar da shi gaba ɗaya?

A kan na'urar farko, wajibi ne don aiwatar da na'ura mai iyaka wanda ke watsa bayanai ta hanyar yarjejeniyar STK500. A mafi yawancin lokuta, saƙonnin da ake aikawa da karɓa suna da wadatar kansu, amma wasu suna da alaƙa da waɗanda suka wuce ta tashar a baya. An ba da bayanin tattaunawar a nan.

Wani muhimmin sashi na wannan tattaunawa shine watsa fakitin da aka yi niyyar rubutawa zuwa ƙwaƙwalwar walƙiya na na'urar da za a nufa. Don masu sauƙin microcontrollers na dangin AVR, girman shafin shine 128 bytes, amma ga ATmega128RFA1 shine 256. Kuma ga ƙwaƙwalwar walƙiya wanda aka haɗa ta hanyar ka'idar SPI, daidai yake. Shirin a cikin na'urar farko, lokacin loda zane, ba ya canja wurin nan da nan zuwa na biyu, amma ya rubuta shi zuwa wannan ƙwaƙwalwar ajiya. Lokacin da Arduino IDE ya bincika daidaiton shigarwar, ana aika abin da aka rubuta a wurin. Yanzu muna buƙatar watsa bayanan da aka karɓa ta tashar rediyo zuwa na'ura ta biyu. A lokaci guda, sauyawa daga karɓa zuwa watsawa da baya yana faruwa sau da yawa. Ka'idar STK500 ba ta damu da jinkiri ba, amma baya jure wa asarar bayanai (baƙon abu, amma an faɗi a sama cewa jinkirin kuma yana shafar canja wurin bayanai). Kuma hasara a lokacin watsawa mara waya ba makawa. ATmega128RFA1 yana da ginanniyar aiwatar da aikace-aikacen kayan aiki na maimaita buƙatun lokacin da akwai shakku game da daidaiton canja wurin, amma marubucin ya yanke shawarar aiwatar da wannan a cikin software da kansa. Ya ɓullo da ƙa'idar da bayanai da yawa ke gudana ta hanya ɗaya fiye da ɗayan.

Ba cikakke ba ne, amma yana aiki. Shafin 256-byte ya kasu kashi hudu, kowanne daga cikinsu ana watsa shi ta iska a matsayin fakiti. Fakiti na iya ɗaukar bayanai har zuwa 125 byte tare da byte ɗaya na tsayi da bytes biyu na CRC. Don haka an sanya guntu 64 bytes tsayi tare da shafi da lambobi (daga 0 zuwa 3) a wurin. Na'urar karba tana da mabambantan da ke ba ta damar bin diddigin sassa nawa aka karɓa, kuma lokacin da duka huɗun suka zo, na'urar aika ta sami tabbacin cewa an karɓi duka shafin. Babu tabbaci (CRC bai dace ba) - sake aika duk shafin. Gudun ya ma fi lokacin aikawa ta hanyar kebul. Duba:


Amma gabaɗaya, zai zama dole don samar da hanyar da ta dace don haɗa kebul ɗin zuwa na'urori don loda zane da ta hanyar. Misali, sanya a cikin irin wannan na'ura mai canzawa akan CP2102, kamar yadda yake a cikin hoto, kuma manne shi a kan allo don ya iya jure ƙarfin lokacin haɗawa da cire haɗin kebul na USB.

Muna rubuta bootloader na OTA don ATmega128RFA1 (a matsayin ɓangare na na'urar Amsa Amsa XE)

Hakanan yana da stabilizer 3,3-volt (da kuma yadda ake amfani da shi a cikin na'ura mai samar da wutar lantarki 6-volt - idan kawai yana da stabilizer iri ɗaya, kuma zaku iya ƙara diodes guda biyu don zaɓar ta atomatik wanda daga cikinsu zai kunna na'urar) . Dukkan LEDs guda uku dole ne a kwance su daga allon mai canzawa, in ba haka ba za su ɗora nauyin batir yayin aiki akan su, kuma su tsoma baki tare da jefa kuri'a na maballin kuma suyi aiki tare da ƙwaƙwalwar walƙiya tare da ƙirar SPI.

Biyan manufa ya zama mafi ban sha'awa fiye da cimma shi (kuma ba sa buƙatar wannan wargi game da bas). Marubucin ya koyi abubuwa da yawa game da AVR bootloaders, SPI flash memory, STK500 yarjejeniya da 802.15.4 misali.

Duk sauran lambar ban da ɗakin karatu da aka kwatanta a sama shine - a nan, kuma yana ƙarƙashin GPL v3. Mawallafin Twitter - a nan.

source: www.habr.com

Add a comment