Tha sinn a’ sgrìobhadh bootloader OTA airson ATmega128RFA1 (mar phàirt den inneal Smart Response XE)

Tha sinn a’ sgrìobhadh bootloader OTA airson ATmega128RFA1 (mar phàirt den inneal Smart Response XE)

Thòisich seo uile leis an ùghdar a’ ceannach inneal inntinneach air a’ mhargaidh àrd-sgoile - Smart Response XE (tuairisgeul goirid). Tha e an dùil airson sgoiltean: gheibh gach oileanach sa chlas inneal coltach ri leabhar notaichean dealanach no eadar-theangair bho na naochadan, bidh an tidsear a’ faighneachd ceist, agus bidh na h-oileanaich a’ sgrìobhadh na freagairtean air meur-chlàran nan innealan, a gheibhear tro a sianal rèidio (802.15.4) gu inneal-glacaidh ceangailte ri PC an tidseir.

Chaidh stad a chuir air na h-innealan sin grunn bhliadhnaichean air ais, agus tha na cheannaich sgoiltean airson $ 100- $ 200 gach ceann a-nis a’ nochdadh air eBay airson $ 10 no nas lugha. Tha am bathar-cruaidh an sin gu math freagarrach airson deuchainnean geeky:

  • 60 meur-chlàr prìomh
  • taisbeanadh le rùn de 384 × 136, 2 pìosan gach piogsail - coltach ri BC, CGA, ach 4 chan e dathan, ach ìrean de shoilleireachd
  • microcontroller ATmega128RFA1 (cuimhne flash 128 kB, 4 kB ROM, 16 kB RAM, transceiver 802.15.4)
  • taobh a-muigh (a thaobh am microcontroller, chan e an inneal gu lèir) cuimhne flash 1 megabit (128 kilobyte) le eadar-aghaidh SPI
  • roinn airson 4 eileamaidean AAA.

Bho ainm an microcontroller tha e soilleir gur ann leis an teaghlach AVR a tha e, a tha a’ ciallachadh gu bheil an inneal a tha co-chosmhail ri Arduino na obair nas lugha na rud beag.

Bho na naidheachdan air adhart Hackaday fhuair an t-ùghdar a-mach dè a th’ ann air a dhèanamh mu thràth (tha an aon cheangal ag innse dhut dè a cheanglas tu càite), a’ faighinn cothrom geamannan a ruith airson Arduboy:


Ach tha barrachd ùidh aig an ùghdar anns a’ chothrom gun a bhith a’ cluich air an inneal, ach a bhith ag ionnsachadh:

  • cuimhne flash le eadar-aghaidh sreathach SPI
  • Luchdaich a-nuas draibhearan airson AVR
  • ìre 802.15.4

Thòisich an t-ùghdar le sgrìobhadh leabharlannan (GPL v3), a leigeas leat an taisbeanadh a thòiseachadh, teacsa toraidh agus ceart-cheàrnach, agus faighinn gu cuimhne flash SPI. An uairsin thòisich e a 'tighinn a-steach le beachdan airson cleachdadh practaigeach air an inneal: inneal pòcaid co-chòrdail VT-100, geamannan ioma-chluicheadair. Às deidh dha trì innealan ath-thogail, chuir e roimhe “teagasg” dhaibh gus sgeidsichean fhaighinn “thairis air an èadhar”. Dè a bhiodh chan e a-mhàin inntinneach, ach cuideachd gu math goireasach: tha cùis an uidheim duilich fhosgladh a h-uile uair, agus fo chòmhdach roinn a ’bhataraidh chan eil ann ach tuill a leigeas leat prògramadair JTAG a cheangal ris a’ bhòrd.

Tha sinn a’ sgrìobhadh bootloader OTA airson ATmega128RFA1 (mar phàirt den inneal Smart Response XE)

Tha seo gu leòr airson an bootloader Arduino a luchdachadh suas, ach chan e an sgeidse - chan eil am port sreathach ceangailte an sin, agus mar sin chan urrainn dhut a dhèanamh fhathast gun a ’chùis fhosgladh. Cuideachd, tha na loidhnichean TX0 agus RX0 den chiad phort sreathach air an cur còmhla ri loidhnichean bhòtaidh matrix a ’mheur-chlàr, is e sin an fheadhainn a bhios a’ sgrùdadh na h-iuchraichean gnìomh air taobhan an taisbeanaidh. Ach dè as urrainn dhut a dhèanamh - thog an t-ùghdar seo:

Tha sinn a’ sgrìobhadh bootloader OTA airson ATmega128RFA1 (mar phàirt den inneal Smart Response XE)

Thug e na loidhnichean JTAG an sin, agus a-nis chan eil feum air an roinn bataraidh fhosgladh. Agus gus an gabhadh sgeidsichean a luchdachadh suas, cheangail mi an dà phort sreathach ris an aon cheangail, cuideachd a’ cur suidse ris, oir leis na bataraidhean air an cur a-steach, tha e do-dhèanta gu corporra an inneal a chuir dheth ann an dòigh sam bith eile.

Thug e beagan ùine a bhith ag obair le iarann ​​soldering, sgian goireasach agus gunna glaodh. San fharsaingeachd, tha e tòrr nas goireasaiche sgeidsichean a luchdachadh suas “thairis air an èadhar”; feumaidh sinn gu h-èiginneach rudeigin a chruthachadh airson seo.

Bidh Arduino IDE a’ cleachdadh a’ phrògram airson sgeidsichean a luchdachadh suas avrdude. Bidh e ag eadar-obrachadh leis an microcontroller a ’cleachdadh a’ phròtacal STK500, a leigeas leat faidhlichean a ghluasad an dà thaobh. Tha e gu math co-chòrdail ri seanalan far a bheil dàil caochlaideach, saobhadh agus call dàta comasach. Ma thig rudeigin sgaoilte no meirgeach san t-sianal sreathach, faodaidh tu a dhol às mo chiall a’ coimhead airson an adhbhar. Aon uair 's gu robh an t-ùghdar a' fulang airson leth latha gus an do thuig e gur e droch chàball a bh 'anns an duilgheadas, a bharrachd air inneal-tionndaidh eadar-aghaidh CP2102 capricious. Faodaidh eadhon microcontroller le inneal-tionndaidh eadar-aghaidh togte, mar eisimpleir, ATmega32u4, a bhith ag obair mar seo uaireannan. Tha a h-uile neach-cleachdaidh Arduino air mothachadh nach eil mearachdan nuair a bhios tu a’ luchdachadh suas sgeidsichean cho tearc. Aig amannan thèid an clàradh gu math, ach rè leughadh deuchainn lorgar mearachd. Chan eil seo a’ ciallachadh gun robh mearachd ann aig àm sgrìobhaidh - bha fàilligeadh ann aig àm leughaidh. A-nis smaoinich nuair a bhios tu ag obair “thairis air an èadhar” gun tachair an aon rud, ach gu math nas trice.

Às deidh dha diofar dhòighean fheuchainn gus faighinn seachad air an duilgheadas seo, thàinig an t-ùghdar suas leis na leanas. Tha cuimhne flash 128 KB aig an inneal le eadar-aghaidh SPI - gheibh sinn dàta thairis air na uèirichean (cuimhnich gu bheil aon inneal aig an ùghdar mu thràth le ceanglaiche air an taobh), cleachd a’ chuimhne seo mar bufair, agus cuir an dàta thairis air an rèidio sianal gu inneal eile. Halo bho Cybiko.

Às deidh dhut an còd a sgrìobhadh gus obrachadh leis an t-sianal rèidio, a bharrachd air a ’chruth-clò, dh’ fhàs an luchdan nas fhaide na 4 kilobytes. Mar sin, dh'fheumadh luach HFUSE atharrachadh bho 0xDA gu 0xD8. A-nis faodaidh an bootloader a bhith suas ri 8 kilobytes a dh'fhaid, agus tha an seòladh tòiseachaidh a-nis 0x1E000. Tha seo ri fhaicinn anns an Makefile, ach bu chòir aire a thoirt dha cuideachd nuair a bhios tu a’ lìonadh bootloader tro avrdude.

Tha an transceiver 802.15.4 anns an ATmega128RFA1 air a dhealbhadh an toiseach gus obrachadh a ’cleachdadh a’ phròtacal Zigbee, a tha gu math toinnte, agus mar sin cho-dhùin an t-ùghdar dìreach pacaidean a chuir a-mach nan àite. Tha seo air a chuir an gnìomh ann am bathar-cruaidh san ATmega128RFA1, agus mar sin chan eil mòran còd a dhìth. Cuideachd, airson sìmplidheachd, cho-dhùin an t-ùghdar sianal stèidhichte a chleachdadh, gun a bhith a 'leigeil leat a thaghadh eadhon le làimh. Tha an inbhe 802.15.4 a’ toirt taic do 16 seanalan le àireamhan bho 11 gu 26. Tha iad gu math làn, cuid cuideachd a’ dol thairis air seanalan WiFi (tha dearg nan seanalan ZigBee, gorm, uaine is buidhe nan WiFi).

Tha sinn a’ sgrìobhadh bootloader OTA airson ATmega128RFA1 (mar phàirt den inneal Smart Response XE)

Thionndaidh e a-mach gur e seanalan 15 agus 26 as lugha a tha buailteach do bhriseadh bho WiFi.Thagh an t-ùghdar an dàrna fear dhiubh. Àicheadh: chan eil fios aig an eadar-theangair a bheil e ceadaichte ZigBee a dhèanamh nas sìmplidhe mar seo. Is dòcha gum bu chòir dhuinn beagan a bharrachd phrògraman a dhèanamh agus a chuir an gnìomh gu tur?

Air a ’chiad inneal, feumar inneal stàite crìochnaichte a chuir an gnìomh a bhios a’ sgaoileadh dàta tron ​​​​phròtacal STK500. Airson a 'mhòr-chuid, tha na teachdaireachdan a chaidh a ghluasad agus a fhuair iad fèin-sheasmhach, ach tha cuid dhiubh ceangailte ris an fheadhainn a chaidh tron ​​​​t-sianal na bu tràithe. Tha tuairisgeul air a’ chòmhradh air a thoirt seachad an seo.

Is e pàirt chudromach den chòmhradh seo sgaoileadh phasganan a thathar an dùil a sgrìobhadh gu cuimhne flash an inneal ceann-uidhe. Airson microcontrollers sìmplidh den teaghlach AVR, is e meud na duilleige 128 bytes, ach airson an ATmega128RFA1 is e 256 a th ’ann. Agus airson a’ chuimhne flash a tha ceangailte tron ​​​​phròtacal SPI, tha e mar an ceudna. Chan eil am prògram anns a 'chiad inneal, nuair a bhios tu a' luchdachadh suas sgeidse, ga ghluasad chun dàrna fear, ach ga sgrìobhadh chun chuimhne seo. Nuair a nì an Arduino IDE sgrùdadh air ceartachd an inntrig, thèid na chaidh a sgrìobhadh an sin a chuir a-steach. A-nis feumaidh sinn an dàta a gheibhear tro sianal rèidio a chuir chun dàrna inneal. Aig an aon àm, bidh atharrachadh bho bhith a’ faighinn gu tar-chuir agus air ais a’ tachairt gu math tric. Tha protocol STK500 gun samhail mu dàil, ach chan eil e a’ gabhail ri call dàta (neònach, ach chaidh a ràdh gu h-àrd gu bheil dàil cuideachd a’ toirt buaidh air gluasad dàta). Agus tha call aig àm tar-chuir gun uèir do-sheachanta. Tha an ATmega128RFA1 air a chuir an sàs ann am bathar-cruaidh de dh’ iarrtasan a-rithist nuair a tha teagamhan ann mu cheartachd a’ ghluasaid, ach cho-dhùin an t-ùghdar an aon rud a chuir an gnìomh ann am bathar-bog e fhèin. Leasaich e protocol anns am bi tòrr a bharrachd dàta a’ sruthadh aon dòigh na dòigh eile.

Chan eil e foirfe, ach tha e ag obair. Tha an duilleag 256-byte air a roinn ann an ceithir earrannan, agus tha gach fear dhiubh air a ghluasad thairis air an èadhar mar phacaid. Gabhaidh pacaid suas ri 125 byte de dhàta agus aon byte fad is dà byte airson CRC. Mar sin tha pìosan 64 bytes a dh'fhaid còmhla ri àireamhan duilleag agus earrann (bho 0 gu 3) air an cur ann. Tha caochladair aig an inneal faighinn a leigeas leis sùil a chumail air cia mheud earrann a fhuaireadh, agus nuair a ruigeas na ceithir, gheibh an inneal cur dearbhadh gun d’ fhuaireadh an duilleag gu lèir. Gun dearbhadh (cha robh CRC co-ionnan) - ath-chuir an duilleag gu lèir. Tha an astar eadhon nas àirde na nuair a thèid a chuir tro chàball. Faic:


Ach san fharsaingeachd, bhiodh e riatanach dòigh goireasach a thoirt seachad gus an càball a cheangal ris na h-innealan airson sgeidsichean a luchdachadh suas agus troimhe. Mar eisimpleir, cuir taobh a-staigh inneal-tionndaidh eadar-aghaidh mar sin air an CP2102, mar a tha san dealbh, agus glaodh e chun bhòrd gus an urrainn dha seasamh an aghaidh an fhorsa nuair a bhios tu a ’ceangal agus a’ dì-cheangal a ’chàball Micro USB.

Tha sinn a’ sgrìobhadh bootloader OTA airson ATmega128RFA1 (mar phàirt den inneal Smart Response XE)

Tha stàball 3,3-bholta aige cuideachd (agus mar a chleachdas tu e ann an inneal le solar cumhachd 6-bholta - mura h-eil ach an aon stàball aige, agus faodaidh tu dà diodes a chuir ris gus taghadh gu fèin-ghluasadach cò dhiubh a bheir cumhachd don inneal) . Feumaidh na trì LEDan a bhith gun reic bhon bhòrd tionndaidh eadar-aghaidh, air neo bidh iad cuideachd a’ luchdachadh na bataraidhean nuair a bhios iad ag obair orra, agus cuideachd a’ cur bacadh air bhòtadh meur-chlàr agus ag obair le cuimhne flash le eadar-aghaidh SPI.

Bha e eadhon nas inntinniche tadhal a dhèanamh na bhith ga choileanadh (agus chan eil feum air an fhealla-dhà sin mun bhus). Dh’ ionnsaich an t-ùghdar tòrr mu luchdan boot AVR, cuimhne flash SPI, protocol STK500 agus an inbhe 802.15.4.

Is e a h-uile còd eile a bharrachd air an leabharlann a tha air a mhìneachadh gu h-àrd - an seo, agus tha e cuideachd fo GPL v3. Twitter an ùghdair - an seo.

Source: www.habr.com

Cuir beachd ann