మేము ATmega128RFA1 కోసం OTA బూట్‌లోడర్‌ని వ్రాస్తున్నాము (స్మార్ట్ రెస్పాన్స్ XE పరికరంలో భాగంగా)

మేము ATmega128RFA1 కోసం OTA బూట్‌లోడర్‌ని వ్రాస్తున్నాము (స్మార్ట్ రెస్పాన్స్ XE పరికరంలో భాగంగా)

సెకండరీ మార్కెట్‌లో రచయిత ఒక ఆసక్తికరమైన పరికరాన్ని కొనుగోలు చేయడంతో ఇదంతా ప్రారంభమైంది - స్మార్ట్ రెస్పాన్స్ XE (చిన్న వివరణ) ఇది పాఠశాలల కోసం ఉద్దేశించబడింది: తరగతిలోని ప్రతి విద్యార్థి ఎలక్ట్రానిక్ నోట్‌బుక్ లేదా తొంభైల నుండి అనువాదకుడు వంటి పరికరాన్ని అందుకుంటాడు, ఉపాధ్యాయుడు ఒక ప్రశ్న అడుగుతాడు మరియు విద్యార్థులు పరికరాల కీబోర్డ్‌లపై సమాధానాలను టైప్ చేస్తారు, అవి రేడియో ఛానెల్ (802.15.4) ఉపాధ్యాయుని PCకి కనెక్ట్ చేయబడిన రిసీవర్‌కి.

ఈ పరికరాలు చాలా సంవత్సరాల క్రితం నిలిపివేయబడ్డాయి మరియు ఒక్కొక్కటి $100-$200కి కొనుగోలు చేసిన పాఠశాలలు ఇప్పుడు eBayలో $10 లేదా అంతకంటే తక్కువ ధరకు పాప్ అప్ అవుతున్నాయి. గీకీ ప్రయోగాలకు అక్కడ హార్డ్‌వేర్ చాలా అనుకూలంగా ఉంటుంది:

  • 60 కీ కీబోర్డ్
  • 384×136 రిజల్యూషన్‌తో డిస్‌ప్లే, పిక్సెల్‌కు 2 బిట్‌లు - BC, CGA లాంటివి, కానీ 4 రంగులు కాదు, ప్రకాశం యొక్క స్థాయిలు
  • మైక్రోకంట్రోలర్ ATmega128RFA1 (128 kB ఫ్లాష్ మెమరీ, 4 kB ROM, 16 kB 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 బూట్‌లోడర్‌ని వ్రాస్తున్నాము (స్మార్ట్ రెస్పాన్స్ XE పరికరంలో భాగంగా)

Arduino బూట్‌లోడర్‌ను అప్‌లోడ్ చేయడానికి ఇది సరిపోతుంది, కానీ స్కెచ్ కాదు - సీరియల్ పోర్ట్ అక్కడ కనెక్ట్ చేయబడలేదు, కాబట్టి మీరు ఇప్పటికీ కేసును తెరవకుండా చేయలేరు. అలాగే, మొదటి సీరియల్ పోర్ట్ యొక్క TX0 మరియు RX0 లైన్‌లు కీబోర్డ్ మ్యాట్రిక్స్ యొక్క పోలింగ్ లైన్‌లతో కలిపి ఉంటాయి, అవి డిస్ప్లే వైపులా ఫంక్షన్ కీలను పోల్ చేసేవి. కానీ మీరు ఏమి చేయగలరు - రచయిత దీన్ని నిర్మించారు:

మేము ATmega128RFA1 కోసం OTA బూట్‌లోడర్‌ని వ్రాస్తున్నాము (స్మార్ట్ రెస్పాన్స్ XE పరికరంలో భాగంగా)

అతను అక్కడ JTAG లైన్లను తీసుకువచ్చాడు మరియు ఇప్పుడు బ్యాటరీ కంపార్ట్మెంట్ తెరవాల్సిన అవసరం లేదు. మరియు స్కెచ్‌లను అప్‌లోడ్ చేయడానికి, నేను రెండు సీరియల్ పోర్ట్‌లను ఒకే కనెక్టర్‌కు కనెక్ట్ చేసాను, స్విచ్‌ను కూడా జోడించాను, ఎందుకంటే బ్యాటరీలను ఇన్‌స్టాల్ చేయడంతో, పరికరాన్ని వేరే విధంగా ఆఫ్ చేయడం భౌతికంగా అసాధ్యం.

టంకం ఇనుము, యుటిలిటీ కత్తి మరియు జిగురు తుపాకీతో పని చేయడానికి కొంత సమయం పట్టింది. సాధారణంగా, "గాలిలో" స్కెచ్‌లను అప్‌లోడ్ చేయడం చాలా సౌకర్యవంతంగా ఉంటుంది; దీని కోసం మేము అత్యవసరంగా ఏదైనా కనుగొనవలసి ఉంటుంది.

Arduino IDE స్కెచ్‌లను అప్‌లోడ్ చేయడానికి ప్రోగ్రామ్‌ను ఉపయోగిస్తుంది avrdude. ఇది ప్రోటోకాల్‌ని ఉపయోగించి మైక్రోకంట్రోలర్‌తో సంకర్షణ చెందుతుంది STK500, ఇది రెండు దిశలలో ఫైల్‌లను బదిలీ చేయడానికి మిమ్మల్ని అనుమతిస్తుంది. వేరియబుల్ జాప్యాలు, వక్రీకరణ మరియు డేటా నష్టం సాధ్యమయ్యే ఛానెల్‌లతో ఇది పేలవంగా అనుకూలంగా లేదు. సీరియల్ ఛానెల్‌లో ఏదైనా వదులుగా వచ్చినా లేదా రస్టల్‌గా వచ్చినా, మీరు కారణాన్ని వెతుక్కుంటూ పిచ్చిగా మారవచ్చు. ఒకసారి రచయిత సమస్య చెడ్డ కేబుల్, అలాగే మోజుకనుగుణమైన CP2102 ఇంటర్‌ఫేస్ కన్వర్టర్ అని గ్రహించే వరకు సగం రోజులు బాధపడ్డాడు. అంతర్నిర్మిత ఇంటర్‌ఫేస్ కన్వర్టర్‌తో కూడిన మైక్రోకంట్రోలర్ కూడా, ఉదాహరణకు, ATmega32u4, కొన్నిసార్లు ఇలా పని చేస్తుంది. ప్రతి Arduino వినియోగదారు స్కెచ్‌లను అప్‌లోడ్ చేసేటప్పుడు లోపాలు చాలా అరుదుగా ఉండవని గమనించారు. కొన్నిసార్లు రికార్డింగ్ బాగా జరుగుతుంది, కానీ పరీక్ష రీడ్ సమయంలో లోపం కనుగొనబడింది. దీని అర్థం రాసేటప్పుడు లోపం ఉందని కాదు - చదివేటప్పుడు వైఫల్యం ఉంది. ఇప్పుడు "గాలిలో" పని చేస్తున్నప్పుడు అదే విషయం జరుగుతుందని ఊహించండి, కానీ చాలా తరచుగా.

ఈ సమస్యను అధిగమించడానికి వివిధ మార్గాలను ప్రయత్నించిన తర్వాత, రచయిత ఈ క్రింది వాటిని కనుగొన్నారు. పరికరం SPI ఇంటర్‌ఫేస్‌తో 128 KB ఫ్లాష్ మెమరీని కలిగి ఉంది - మేము వైర్‌ల ద్వారా డేటాను స్వీకరిస్తాము (రచయిత ఇప్పటికే వైపున కనెక్టర్‌తో ఒక పరికరాన్ని కలిగి ఉన్నారని గుర్తుంచుకోండి), ఈ మెమరీని బఫర్‌గా ఉపయోగించండి మరియు డేటాను రేడియో ద్వారా పంపండి మరొక పరికరానికి ఛానెల్. Cybiko నుండి హలో.

రేడియో ఛానెల్‌తో పాటు ఫాంట్‌తో పనిచేయడానికి కోడ్‌ను వ్రాసిన తర్వాత, లోడర్ 4 కిలోబైట్ల కంటే ఎక్కువ పొడవుగా మారింది. కాబట్టి, HFUSE విలువను 0xDA నుండి 0xD8కి మార్చవలసి ఉంటుంది. ఇప్పుడు బూట్‌లోడర్ పొడవు 8 కిలోబైట్ల వరకు ఉంటుంది మరియు ప్రారంభ చిరునామా ఇప్పుడు 0x1E000. ఇది మేక్‌ఫైల్‌లో ప్రతిబింబిస్తుంది, కానీ నింపేటప్పుడు కూడా పరిగణనలోకి తీసుకోవాలి బూట్లోడర్ avrdude ద్వారా.

ATmega802.15.4RFA128లోని 1 ట్రాన్స్‌సీవర్ వాస్తవానికి ప్రోటోకాల్‌ను ఉపయోగించి ఆపరేట్ చేయడానికి రూపొందించబడింది. జిగ్బీ, ఇది చాలా సంక్లిష్టమైనది, కాబట్టి రచయిత బదులుగా ప్యాకెట్లను ప్రసారం చేయాలని నిర్ణయించుకున్నారు. ఇది ATmega128RFA1లో హార్డ్‌వేర్‌లో అమలు చేయబడుతుంది, కాబట్టి తక్కువ కోడ్ అవసరం. అలాగే, సరళత కోసం, రచయిత స్థిర ఛానెల్‌ని ఉపయోగించాలని నిర్ణయించుకున్నారు, మీరు దానిని మానవీయంగా కూడా ఎంచుకోవడానికి అనుమతించరు. 802.15.4 ప్రమాణం 16 నుండి 11 వరకు సంఖ్యలతో 26 ఛానెల్‌లకు మద్దతు ఇస్తుంది. అవి చాలా రద్దీగా ఉంటాయి, కొన్ని WiFi ఛానెల్‌లను కూడా అతివ్యాప్తి చేస్తాయి (ఎరుపు రంగు జిగ్‌బీ ఛానెల్‌లు, నీలం, ఆకుపచ్చ మరియు పసుపు వైఫై).

మేము ATmega128RFA1 కోసం OTA బూట్‌లోడర్‌ని వ్రాస్తున్నాము (స్మార్ట్ రెస్పాన్స్ XE పరికరంలో భాగంగా)

15 మరియు 26 ఛానెల్‌లు WiFi నుండి జోక్యానికి చాలా తక్కువ అవకాశం ఉందని తేలింది. రచయిత వాటిలో రెండవదాన్ని ఎంచుకున్నారు. నిరాకరణ: జిగ్‌బీని ఈ విధంగా సరళీకరించడానికి అనుమతించబడిందో లేదో అనువాదకుడికి తెలియదు. బహుశా మనం కొంచెం ఎక్కువ ప్రోగ్రామింగ్ చేసి పూర్తిగా అమలు చేయాలా?

మొదటి పరికరంలో, STK500 ప్రోటోకాల్ ద్వారా డేటాను ప్రసారం చేసే పరిమిత స్థితి యంత్రాన్ని అమలు చేయడం అవసరం. చాలా వరకు, ప్రసారం చేయబడిన మరియు స్వీకరించబడిన సందేశాలు స్వయం సమృద్ధిగా ఉంటాయి, అయితే కొన్ని గతంలో ఛానెల్ ద్వారా పంపబడిన వాటితో ముడిపడి ఉంటాయి. డైలాగ్ యొక్క వివరణ ఇవ్వబడింది ఇక్కడ.

ఈ డైలాగ్‌లోని ముఖ్యమైన భాగం గమ్యస్థాన పరికరం యొక్క ఫ్లాష్ మెమరీకి వ్రాయడానికి ఉద్దేశించిన ప్యాకెట్ల ప్రసారం. AVR కుటుంబానికి చెందిన సాధారణ మైక్రోకంట్రోలర్‌ల కోసం, పేజీ పరిమాణం 128 బైట్‌లు, కానీ ATmega128RFA1 కోసం ఇది 256. మరియు SPI ప్రోటోకాల్ ద్వారా కనెక్ట్ చేయబడిన ఫ్లాష్ మెమరీకి, ఇది ఒకే విధంగా ఉంటుంది. మొదటి పరికరంలోని ప్రోగ్రామ్, స్కెచ్‌ను అప్‌లోడ్ చేస్తున్నప్పుడు, దానిని వెంటనే రెండవదానికి బదిలీ చేయదు, కానీ దానిని ఈ మెమరీకి వ్రాస్తుంది. Arduino IDE ఎంట్రీ యొక్క ఖచ్చితత్వాన్ని తనిఖీ చేసినప్పుడు, అక్కడ వ్రాయబడినది పంపబడుతుంది. ఇప్పుడు మనం అందుకున్న డేటాను రేడియో ఛానల్ ద్వారా రెండవ పరికరానికి ప్రసారం చేయాలి. అదే సమయంలో, స్వీకరించడం నుండి ప్రసారం మరియు వెనుకకు మారడం చాలా తరచుగా జరుగుతుంది. STK500 ప్రోటోకాల్ ఆలస్యం పట్ల ఉదాసీనంగా ఉంటుంది, కానీ డేటా నష్టాన్ని సహించదు (విచిత్రం, కానీ ఆలస్యం డేటా బదిలీని కూడా ప్రభావితం చేస్తుందని పైన చెప్పబడింది). మరియు వైర్‌లెస్ ప్రసార సమయంలో నష్టాలు అనివార్యం. ATmega128RFA1 బదిలీ యొక్క ఖచ్చితత్వంపై సందేహాలు ఉన్నప్పుడు పునరావృత అభ్యర్థనల యొక్క అంతర్నిర్మిత హార్డ్‌వేర్ అమలును కలిగి ఉంది, అయితే రచయిత సాఫ్ట్‌వేర్‌లో అదే అమలు చేయాలని నిర్ణయించుకున్నాడు. అతను ఒక ప్రోటోకాల్‌ను అభివృద్ధి చేశాడు, దీనిలో చాలా ఎక్కువ డేటా ఒక మార్గంలో మరొకటి ప్రవహిస్తుంది.

ఇది పరిపూర్ణమైనది కాదు, కానీ ఇది పనిచేస్తుంది. 256-బైట్ పేజీ నాలుగు విభాగాలుగా విభజించబడింది, వీటిలో ప్రతి ఒక్కటి ప్యాకెట్‌గా గాలిలో ప్రసారం చేయబడుతుంది. ఒక ప్యాకెట్ 125 బైట్‌ల డేటాతో పాటు ఒక బైట్ పొడవు మరియు CRC కోసం రెండు బైట్‌లను కలిగి ఉంటుంది. కాబట్టి పేజీ మరియు సెగ్మెంట్ సంఖ్యలతో పాటు 64 బైట్‌ల పొడవు గల శకలాలు (0 నుండి 3 వరకు) అక్కడ ఉంచబడ్డాయి. స్వీకరించే పరికరం వేరియబుల్‌ని కలిగి ఉంది, అది ఎన్ని విభాగాలు స్వీకరించబడిందో ట్రాక్ చేయడానికి అనుమతిస్తుంది మరియు నాలుగు వచ్చినప్పుడు, పంపే పరికరం మొత్తం పేజీని స్వీకరించినట్లు నిర్ధారణను పొందుతుంది. నిర్ధారణ లేదు (CRC సరిపోలలేదు) - మొత్తం పేజీని మళ్లీ పంపండి. కేబుల్ ద్వారా ప్రసారం చేసేటప్పుడు కంటే వేగం మరింత ఎక్కువగా ఉంటుంది. చూడండి:


కానీ సాధారణంగా, స్కెచ్‌లను అప్‌లోడ్ చేయడానికి మరియు దాని ద్వారా కేబుల్‌ను పరికరాలకు కనెక్ట్ చేయడానికి అనుకూలమైన మార్గాన్ని అందించడం అవసరం. ఉదాహరణకు, ఫోటోలో ఉన్నట్లుగా CP2102లో అటువంటి ఇంటర్‌ఫేస్ కన్వర్టర్‌లో ఉంచండి మరియు మైక్రో USB కేబుల్‌ను కనెక్ట్ చేసేటప్పుడు మరియు డిస్‌కనెక్ట్ చేసేటప్పుడు శక్తిని తట్టుకోగలిగేలా దానిని బోర్డుకి అతికించండి.

మేము ATmega128RFA1 కోసం OTA బూట్‌లోడర్‌ని వ్రాస్తున్నాము (స్మార్ట్ రెస్పాన్స్ XE పరికరంలో భాగంగా)

ఇది 3,3-వోల్ట్ స్టెబిలైజర్‌ను కూడా కలిగి ఉంది (మరియు 6-వోల్ట్ విద్యుత్ సరఫరా ఉన్న పరికరంలో దీన్ని ఎలా ఉపయోగించాలి - అదే స్టెబిలైజర్ కలిగి ఉంటే, మరియు మీరు రెండు డయోడ్‌లను జోడించి వాటిలో ఏది పరికరానికి శక్తిని ఇస్తుందో స్వయంచాలకంగా ఎంచుకోవచ్చు) . మూడు LED లు తప్పనిసరిగా ఇంటర్‌ఫేస్ కన్వర్టర్ బోర్డ్ నుండి అన్‌సోల్డర్ చేయబడాలి, లేకుంటే అవి వాటిపై పనిచేసేటప్పుడు అదనంగా బ్యాటరీలను లోడ్ చేస్తాయి మరియు కీబోర్డ్ పోలింగ్‌లో జోక్యం చేసుకుంటాయి మరియు SPI ఇంటర్‌ఫేస్‌తో ఫ్లాష్ మెమరీతో పని చేస్తాయి.

లక్ష్యాన్ని సాధించడం కంటే దాన్ని కొనసాగించడం మరింత ఆసక్తికరంగా మారింది (మరియు బస్సు గురించి ఆ జోక్ అవసరం లేదు). రచయిత AVR బూట్‌లోడర్లు, SPI ఫ్లాష్ మెమరీ, STK500 ప్రోటోకాల్ మరియు 802.15.4 ప్రమాణాల గురించి చాలా నేర్చుకున్నారు.

పైన వివరించిన లైబ్రరీకి అదనంగా అన్ని ఇతర కోడ్ -- ఇక్కడ, మరియు ఇది GPL v3 కింద కూడా ఉంది. రచయిత ట్విట్టర్ - ఇక్కడ.

మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి