اسان ATmega128RFA1 لاءِ هڪ OTA بوٽ لوڊر لکي رهيا آهيون (سمارٽ جوابي XE ڊوائيس جي حصي جي طور تي)

اسان ATmega128RFA1 لاءِ هڪ OTA بوٽ لوڊر لکي رهيا آهيون (سمارٽ جوابي XE ڊوائيس جي حصي جي طور تي)

اهو سڀ ڪجهه ليکڪ سان شروع ٿيو ثانوي مارڪيٽ تي هڪ دلچسپ ڊوائيس خريد ڪرڻ سان - Smart Response XE (مختصر وضاحت). ان جو مقصد اسڪولن لاءِ آهي: ڪلاس ۾ هر شاگرد هڪ ڊوائيس وصول ڪري ٿو جهڙوڪ هڪ اليڪٽرانڪ نوٽ بڪ يا هڪ مترجم نون جي ڏهاڪي کان، استاد هڪ سوال پڇي ٿو، ۽ شاگرد جواب ٽائيپ ڪن ٿا ڊوائيسز جي ڪيبورڊ تي، جيڪي حاصل ڪيا ويا آهن. ريڊيو چينل (802.15.4) استاد جي PC سان ڳنڍيل هڪ رسيور ڏانهن.

اهي ڊوائيس ڪيترائي سال اڳ بند ڪيا ويا هئا، ۽ جيڪي اسڪول $ 100- $ 200 لاءِ خريد ڪيا هئا اهي هاڻي eBay تي $ 10 يا ان کان گهٽ لاءِ پاپ اپ ٿي رهيا آهن. اتي موجود هارڊويئر گيڪي تجربن لاءِ بلڪل موزون آهي:

  • 60 ڪيبورڊ ڪيبورڊ
  • 384 × 136 جي ريزوليوشن سان ڊسپلي، 2 بٽ في پکسل - BC، CGA سان ملندڙ جلندڙ، پر 4 رنگ نه، پر چمڪ جي درجه بندي
  • microcontroller ATmega128RFA1 (128 kB فليش ميموري، 4 kB ROM، 16 kB RAM، 802.15.4 ٽرانسيور)
  • خارجي (مائڪرو ڪنٽرولر جي حوالي سان، نه سڄي ڊيوائس) 1 ميگا بائيٽ (128 ڪلو بائيٽ) فليش ميموري SPI انٽرفيس سان
  • 4 AAA عناصر لاء ڪمپارٽمينٽ.

مائڪرو ڪنٽرولر جي نالي مان اهو واضح ٿئي ٿو ته اهو AVR خاندان سان تعلق رکي ٿو، جنهن جو مطلب آهي ڊوائيس Arduino-compatible ٺاهڻ هڪ معمولي ڪم کان وڌيڪ آهي ...

خبر کان وٺي هيڪيو ليکڪ کي معلوم ٿيو ته اهو ڇا آهي اڳ ۾ ئي ڪري چڪو آهي (ساڳي لنڪ توهان کي ٻڌائي ٿي ته ڪهڙو ڳنڍڻو ڪٿي آهي)، Arduboy لاءِ راندين کي هلائڻ جو موقعو آهي:


پر ليکڪ وڌيڪ دلچسپي رکي ٿو فرصت ۾ نه ڊوائيس تي راند ڪرڻ، پر مطالعي ڪرڻ لاء:

  • فليش ياداشت سيريل SPI انٽرفيس سان
  • AVR لاءِ بوٽ لوڊ ڪندڙ
  • معيار 802.15.4

ليکڪ لکڻ جي شروعات ڪئي لائبريريون (GPL v3)، جيڪو توهان کي ڊسپلي، آئوٽ پٽ ٽيڪسٽ ۽ مستطيل کي شروع ڪرڻ، ۽ SPI فليش ميموري تائين رسائي جي اجازت ڏئي ٿو. ان کان پوء هن ڊوائيس جي عملي استعمال لاء خيالن سان گڏ ڪرڻ شروع ڪيو: هڪ VT-100-مطابقت واري کيسي ٽرمينل، multiplayer رانديون. ٽن ڊوائيسز کي ٻيهر تعمير ڪرڻ، هن فيصلو ڪيو ته "سيکارڻ" انهن کي اسڪيچ حاصل ڪرڻ لاء "هوا جي مٿان." ڇا نه رڳو دلچسپ ٿيندو، پر تمام آسان پڻ: ڊوائيس ڪيس هر وقت کولڻ ڏکيو آهي، ۽ بيٽري جي ڪمري جي ڍڪ هيٺ صرف سوراخ آهن جيڪي توهان کي JTAG پروگرامر کي بورڊ سان ڳنڍڻ جي اجازت ڏين ٿا.

اسان ATmega128RFA1 لاءِ هڪ OTA بوٽ لوڊر لکي رهيا آهيون (سمارٽ جوابي XE ڊوائيس جي حصي جي طور تي)

اهو Arduino بوٽ لوڊر کي اپلوڊ ڪرڻ لاء ڪافي آهي، پر اسڪيچ نه - سيريل پورٽ اتي ڳنڍيل ناهي، تنهنڪري توهان اڃا تائين ڪيس کولڻ کان سواء نٿا ڪري سگهو. انهي سان گڏ، پهرين سيريل پورٽ جون TX0 ۽ RX0 لائينون ڪيبورڊ ميٽرڪس جي پولنگ لائينن سان گڏ ڪيون ويون آهن، يعني اهي جيڪي ڊسپلي جي ڪنارن تي فنڪشنل ڪيز کي پول ڪن ٿا. پر توهان ڇا ڪري سگهو ٿا - ليکڪ هن کي ٺاهيو:

اسان ATmega128RFA1 لاءِ هڪ OTA بوٽ لوڊر لکي رهيا آهيون (سمارٽ جوابي XE ڊوائيس جي حصي جي طور تي)

هو اتي JTAG لائينون کڻي آيو، ۽ هاڻي بيٽري جو دٻو کولڻ جي ضرورت ناهي. ۽ جيئن ته خاڪا اپلوڊ ڪري سگهجن، مون ٻنهي سيريل بندرگاهن کي هڪ ئي ڪنيڪٽر سان ڳنڍيو، هڪ سوئچ پڻ شامل ڪيو، ڇاڪاڻ ته بيٽرين جي نصب ٿيڻ سان، ڊوائيس کي ڪنهن ٻئي طريقي سان بند ڪرڻ جسماني طور تي ناممڪن آهي.

سولڊرنگ آئرن، يوٽيلٽي چاقو ۽ گلو گن سان ڪم ڪرڻ ۾ ڪافي وقت لڳو. عام طور تي، اسڪيچ اپلوڊ ڪرڻ "اوور دي ايئر" گهڻو وڌيڪ آسان آهي؛ اسان کي فوري طور تي ان لاء ڪجهه ايجاد ڪرڻ جي ضرورت آهي.

Arduino IDE اسڪيچ اپلوڊ ڪرڻ لاءِ پروگرام استعمال ڪري ٿو آيو. اهو پروٽوڪول استعمال ڪندي مائڪرو ڪنٽرولر سان رابطو ڪري ٿو STK500، جيڪو توهان کي ٻنهي طرفن ۾ فائلن کي منتقل ڪرڻ جي اجازت ڏئي ٿو. اهو ناقص چينلن سان مطابقت رکي ٿو جتي متغير دير، تحريف ۽ ڊيٽا نقصان ممڪن آهي. جيڪڏهن سيريل چينل ۾ ڪا شيءِ ٿلهي يا ٻرندي اچي، ته توهان ان جو سبب ڳوليندي چريو ٿي سگهو ٿا. هڪ دفعو ليکڪ اڌ ڏينهن تائين برداشت ڪيو جيستائين هن محسوس ڪيو ته مسئلو هڪ خراب ڪيبل آهي، انهي سان گڏ هڪ دلچسپ CP2102 انٽرفيس ڪنورٽر. جيتوڻيڪ هڪ مائڪرو ڪنٽرولر هڪ ٺهيل انٽرفيس ڪنورٽر سان، مثال طور، ATmega32u4، ڪڏهن ڪڏهن هن طرح ڪم ڪري سگهي ٿو. هر Arduino صارف اهو محسوس ڪيو آهي ته خاڪا اپلوڊ ڪرڻ وقت غلطيون ايتريون نادر نه آهن. ڪڏهن ڪڏهن رڪارڊنگ ٺيڪ ٿي ويندي آهي، پر هڪ امتحان پڙهڻ دوران هڪ غلطي معلوم ٿئي ٿي. هن جو مطلب اهو ناهي ته لکڻ دوران غلطي هئي - پڙهڻ دوران ناڪامي هئي. ھاڻي تصور ڪريو ته "اوور ھوائي" ڪم ڪرڻ وقت ساڳيو ڪم ٿيندو، پر گھڻو ڪري.

هن مسئلي تي قابو پائڻ لاء مختلف طريقن جي ڪوشش ڪرڻ کان پوء، مصنف هيٺين سان آيو. ڊوائيس وٽ SPI انٽرفيس سان گڏ 128 KB فليش ميموري آهي - اسان تارن تي ڊيٽا وصول ڪندا آهيون (ياد رکو ته ليکڪ وٽ اڳ ۾ ئي هڪ ڊوائيس آهي هڪ ڪنيڪٽر پاسي سان)، هن ميموري کي بفر طور استعمال ڪريو، ۽ ڊيٽا کي ريڊيو تي موڪليو. ٻئي ڊوائيس ڏانهن چينل. سائبيڪو کان هيلو.

ريڊيو چينل سان گڏ ڪم ڪرڻ لاء ڪوڊ لکڻ کان پوء، فونٽ سان گڏ، لوڊر 4 ڪلو بائيٽ کان وڌيڪ ڊگهو ٿي ويو. تنهن ڪري، HFUSE قدر تبديل ڪيو وڃي 0xDA کان 0xD8 تائين. هاڻي بوٽ لوڊر 8 ڪلو بائيٽ ڊگهو ٿي سگهي ٿو، ۽ شروعاتي پتو هاڻي 0x1E000 آهي. اهو ظاهر ٿئي ٿو Makefile ۾، پر اهو پڻ حساب ۾ رکڻ گهرجي جڏهن ڀرڻ بوٽ لوڊ ڪندڙ avrdude ذريعي.

ATmega802.15.4RFA128 ۾ 1 ٽرانسيور اصل ۾ پروٽوڪول استعمال ڪندي هلائڻ لاءِ ٺهيل آهي Zigbee، جيڪو ڪافي پيچيده آهي، تنهن ڪري ليکڪ فيصلو ڪيو ته صرف ان جي بدران پيڪيٽ منتقل ڪرڻ. اهو ATmega128RFA1 ۾ هارڊويئر ۾ لاڳو ڪيو ويو آهي، تنهنڪري ٿورو ڪوڊ گهربل آهي. انهي سان گڏ، سادگي لاء، ليکڪ هڪ مقرر ڪيل چينل استعمال ڪرڻ جو فيصلو ڪيو، توهان کي دستي طور تي چونڊڻ جي اجازت ناهي. 802.15.4 معيار 16 چينلن کي سپورٽ ڪري ٿو جن جي تعداد 11 کان 26 تائين آهي. اهي ڪافي ڀريل آهن، ڪجهه وائي فائي چينلز کي به اوورليپ ڪن ٿا (ڳاڙهو ZigBee چينل آهن، نيرو، سائو ۽ پيلو وائي فائي آهن).

اسان ATmega128RFA1 لاءِ هڪ OTA بوٽ لوڊر لکي رهيا آهيون (سمارٽ جوابي XE ڊوائيس جي حصي جي طور تي)

اهو ظاهر ٿيو ته چينل 15 ۽ 26 وائي فائي جي مداخلت کان گهٽ ۾ گهٽ حساس آهن، ليکڪ انهن مان ٻيو چونڊيو. رد ڪرڻ: مترجم کي خبر ناهي ته ڇا ان کي اجازت ڏني وئي آهي ZigBee کي هن طريقي سان آسان ڪرڻ. ٿي سگهي ٿو اسان کي ٿورو وڌيڪ پروگرامنگ ڪرڻ گهرجي ۽ ان کي مڪمل طور تي لاڳو ڪرڻ گهرجي؟

پهرين ڊوائيس تي، اهو ضروري آهي ته هڪ محدود رياستي مشين کي لاڳو ڪرڻ لاء جيڪو ڊيٽا کي 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-وولٽ پاور سپلائي سان هڪ ڊيوائس ۾ ڪيئن استعمال ڪجي - جيڪڏهن صرف اهو ساڳيو اسٽيبلائزر آهي، ۽ توهان ٻه ڊيوڊ شامل ڪري سگهو ٿا خودڪار طريقي سان چونڊڻ لاءِ انهن مان ڪير ڊوائيس کي طاقت ڏيندو) . سڀئي ٽي LEDs لازمي طور تي انٽرفيس ڪنورٽر بورڊ کان بغير وڪرو ٿيل هجن، ٻي صورت ۾ اهي اضافي طور تي بيٽرين کي لوڊ ڪندا جڏهن انهن تي ڪم ڪندا، ۽ ڪيبورڊ پولنگ ۾ مداخلت ڪندا ۽ SPI انٽرفيس سان فليش ميموري سان ڪم ڪندا.

هڪ مقصد جو تعاقب ان کي حاصل ڪرڻ کان به وڌيڪ دلچسپ ثابت ٿيو (۽ بس جي باري ۾ انهي مذاق جي ضرورت ناهي). ليکڪ AVR بوٽ لوڊرز، SPI فليش ميموري، STK500 پروٽوڪول ۽ 802.15.4 معيار بابت گهڻو ڪجهه سکيو.

مٿي بيان ڪيل لائبريريءَ کان علاوه ٻيو سڀ ڪوڊ آهي - هتي، ۽ اهو پڻ GPL v3 جي تحت آهي. ليکڪ جي Twitter - هتي.

جو ذريعو: www.habr.com

تبصرو شامل ڪريو