ہم ATmega128RFA1 کے لیے ایک OTA بوٹ لوڈر لکھ رہے ہیں (Smart Response XE ڈیوائس کے حصے کے طور پر)

ہم ATmega128RFA1 کے لیے ایک OTA بوٹ لوڈر لکھ رہے ہیں (Smart Response XE ڈیوائس کے حصے کے طور پر)

یہ سب مصنف کے ثانوی مارکیٹ پر ایک دلچسپ ڈیوائس خریدنے کے ساتھ شروع ہوا - Smart Response XE (مختصر کوائف)۔ اس کا مقصد اسکولوں کے لیے ہے: کلاس میں ہر طالب علم کو نوے کی دہائی کے الیکٹرانک نوٹ بک یا مترجم کی طرح کا ایک آلہ ملتا ہے، استاد ایک سوال پوچھتا ہے، اور طلباء جوابات کو آلات کے کی بورڈ پر ٹائپ کرتے ہیں، جو کہ ایک کے ذریعے موصول ہوتے ہیں۔ ریڈیو چینل (802.15.4) ٹیچر کے پی سی سے منسلک ریسیور سے۔

یہ آلات کئی سال پہلے بند کر دیے گئے تھے، اور جو اسکول $100-$200 میں خریدتے تھے وہ اب eBay پر $10 یا اس سے کم میں آ رہے ہیں۔ وہاں کا ہارڈ ویئر گیکی تجربات کے لیے بہت موزوں ہے:

  • 60 کلیدی کی بورڈ
  • 384×136 کی ریزولوشن کے ساتھ ڈسپلے، 2 بٹس فی پکسل - BC، CGA کی طرح، لیکن 4 رنگ نہیں، بلکہ چمک کی درجہ بندی
  • مائکروکنٹرولر ATmega128RFA1 (128 kB فلیش میموری، 4 kB ROM، 16 kB RAM، 802.15.4 ٹرانسیور)
  • ایس پی آئی انٹرفیس کے ساتھ بیرونی (مائیکروکنٹرولر کے سلسلے میں، پورے آلے کے نہیں) 1 میگا بٹ (128 کلو بائٹ) فلیش میموری
  • 4 AAA عناصر کے لئے ٹوکری.

مائیکرو کنٹرولر کے نام سے یہ واضح ہے کہ اس کا تعلق AVR خاندان سے ہے، جس کا مطلب ہے کہ ڈیوائس کو Arduino-compatible بنانا ایک معمولی سے زیادہ کام نہیں ہے۔

خبروں سے ہیکاۓ مصنف کو پتہ چلا کہ یہ کیا ہے پہلے ہی کر چکے ہیں (وہی لنک آپ کو بتاتا ہے کہ کہاں سے جڑنا ہے)، 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، کبھی کبھی اس طرح کام کر سکتا ہے۔ ہر Arduino صارف نے محسوس کیا ہے کہ خاکے اپ لوڈ کرتے وقت غلطیاں اتنی کم نہیں ہوتیں۔ بعض اوقات ریکارڈنگ اچھی طرح چلتی ہے، لیکن ٹیسٹ کے دوران پڑھنے میں غلطی کا پتہ چلا۔ اس کا مطلب یہ نہیں ہے کہ لکھنے کے دوران غلطی ہوئی تھی - پڑھنے کے دوران ناکامی تھی۔ اب تصور کریں کہ "اوور دی ایئر" کام کرتے وقت ایک ہی چیز ہو گی، لیکن زیادہ کثرت سے۔

اس مسئلے پر قابو پانے کے لیے مختلف طریقے آزمانے کے بعد، مصنف نے درج ذیل کے ساتھ آیا۔ ڈیوائس میں SPI انٹرفیس کے ساتھ 128 KB فلیش میموری ہے - ہمیں تاروں پر ڈیٹا موصول ہوتا ہے (یاد رہے کہ مصنف کے پاس پہلے سے ایک ڈیوائس ہے جس میں کنیکٹر ہے)، اس میموری کو بفر کے طور پر استعمال کریں، اور ڈیٹا کو ریڈیو پر بھیجیں۔ کسی دوسرے ڈیوائس پر چینل۔ سائبیکو کی طرف سے ہیلو۔

ریڈیو چینل کے ساتھ ساتھ فونٹ کے ساتھ کام کرنے کے لیے کوڈ لکھنے کے بعد، لوڈر 4 کلو بائٹس سے لمبا ہو گیا۔ لہذا، HFUSE قدر کو 0xDA سے 0xD8 میں تبدیل کرنا پڑا۔ اب بوٹ لوڈر 8 کلو بائٹس تک لمبا ہو سکتا ہے، اور ابتدائی پتہ اب 0x1E000 ہے۔ یہ میک فائل میں جھلکتا ہے، لیکن اسے بھرتے وقت بھی دھیان میں رکھنا چاہیے۔ بوٹ لوڈر avrdude کے ذریعے.

ATmega802.15.4RFA128 میں 1 ٹرانسیور اصل میں پروٹوکول کا استعمال کرتے ہوئے کام کرنے کے لیے ڈیزائن کیا گیا ہے زیگ بی۔، جو کافی پیچیدہ ہے، لہذا مصنف نے اس کے بجائے صرف پیکٹ منتقل کرنے کا فیصلہ کیا۔ یہ ATmega128RFA1 میں ہارڈ ویئر میں لاگو کیا گیا ہے، لہذا بہت کم کوڈ کی ضرورت ہے۔ اس کے علاوہ، سادگی کے لئے، مصنف نے ایک مقررہ چینل استعمال کرنے کا فیصلہ کیا، آپ کو اسے دستی طور پر بھی منتخب کرنے کی اجازت نہیں دی. 802.15.4 اسٹینڈرڈ 16 چینلز کو سپورٹ کرتا ہے جن کی تعداد 11 سے 26 تک ہے۔ وہ کافی ہجوم ہیں، کچھ وائی فائی چینلز کو بھی اوورلیپ کرتے ہیں (سرخ ZigBee چینلز ہیں، نیلے، سبز اور پیلے رنگ کے وائی فائی ہیں)۔

ہم ATmega128RFA1 کے لیے ایک OTA بوٹ لوڈر لکھ رہے ہیں (Smart Response 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 بوٹ لوڈر لکھ رہے ہیں (Smart Response XE ڈیوائس کے حصے کے طور پر)

اس میں 3,3 وولٹ کا سٹیبلائزر بھی ہے (اور اسے 6 وولٹ پاور سپلائی والے ڈیوائس میں کیسے استعمال کیا جائے - اگر صرف اس میں ایک ہی سٹیبلائزر ہو، اور آپ خود بخود یہ منتخب کرنے کے لیے دو ڈائیوڈز شامل کر سکتے ہیں کہ ان میں سے کون سا ڈیوائس کو پاور کرے گا) . تینوں ایل ای ڈیز کو انٹرفیس کنورٹر بورڈ سے فروخت نہ کیا جائے، بصورت دیگر وہ ان پر کام کرتے وقت بیٹریوں کو بھی لوڈ کریں گے، اور کی بورڈ پولنگ میں بھی مداخلت کریں گے اور SPI انٹرفیس کے ساتھ فلیش میموری کے ساتھ کام کریں گے۔

کسی مقصد کا تعاقب اسے حاصل کرنے سے کہیں زیادہ دلچسپ ثابت ہوا (اور بس کے بارے میں اس مذاق کی ضرورت نہیں ہے)۔ مصنف نے AVR بوٹ لوڈرز، SPI فلیش میموری، STK500 پروٹوکول اور 802.15.4 معیار کے بارے میں بہت کچھ سیکھا۔

اوپر بیان کی گئی لائبریری کے علاوہ باقی تمام کوڈ − ہے۔ یہاں، اور یہ GPL v3 کے تحت بھی ہے۔ مصنف کا ٹویٹر - یہاں.

ماخذ: www.habr.com

نیا تبصرہ شامل کریں