كتابة محمل إقلاع OTA لـ ATmega128RFA1 (كجزء من جهاز Smart Response XE)

كتابة محمل إقلاع OTA لـ ATmega128RFA1 (كجزء من جهاز Smart Response XE)

بدأ كل شيء عندما قام المؤلف بشراء جهاز مثير للاهتمام في السوق الثانوية - Smart Response XE (وصف قصير). مخصص للمدارس: يحصل كل طالب في الصف على جهاز يشبه الدفتر الإلكتروني أو مترجم من التسعينات، ويطرح المعلم سؤالاً، ويقوم الطلاب بكتابة الإجابات على لوحات المفاتيح الخاصة بالأجهزة، والتي يتم استلامها عبر قناة الراديو (802.15.4) إلى جهاز الاستقبال المتصل بجهاز الكمبيوتر الخاص بالمعلم.

تم إيقاف هذه الأجهزة منذ عدة سنوات، وما اشترته المدارس مقابل 100 إلى 200 دولار لكل منها يظهر الآن على موقع eBay مقابل 10 دولارات أو أقل. الأجهزة هناك مناسبة جدًا للتجارب العبقري غريب الأطوار:

  • 60 لوحة مفاتيح رئيسية
  • شاشة بدقة 384 × 136، 2 بت لكل بكسل - تشبه BC، CGA، ولكن 4 ليست ألوان، ولكن تدرجات للسطوع
  • متحكم دقيق ATmega128RFA1 (ذاكرة فلاش 128 كيلو بايت، 4 كيلو بايت روم، 16 كيلو بايت رام، جهاز إرسال واستقبال 802.15.4)
  • ذاكرة فلاش خارجية (فيما يتعلق بوحدة التحكم الدقيقة، وليس الجهاز بأكمله) بسعة 1 ميجابت (128 كيلو بايت) مع واجهة SPI
  • مقصورة لـ 4 عناصر AAA.

من اسم المتحكم يتضح أنه ينتمي إلى عائلة AVR مما يعني أن جعل الجهاز متوافق مع الاردوينو هي مهمة أكثر من تافهة...

من الأخبار على Hackaday اكتشف المؤلف ما هو عليه فعلت (يخبرك نفس الرابط بما يجب الاتصال به)، مع إتاحة الفرصة لتشغيل الألعاب لـ Arduboy:


لكن المؤلف مهتم أكثر بفرصة عدم اللعب على الجهاز، بل الدراسة:

  • ذاكرة فلاش مع واجهة SPI التسلسلية
  • محمل الإقلاع لـ AVR
  • معيار 802.15.4

بدأ المؤلف بالكتابة مكتبة (GPL v3)، والذي يسمح لك بتهيئة الشاشة وإخراج النص والمستطيلات والوصول إلى ذاكرة فلاش SPI. ثم بدأ في طرح أفكار للاستخدام العملي للجهاز: جهاز جيب متوافق مع VT-100، وألعاب متعددة اللاعبين. وبعد أن أعاد بناء ثلاثة أجهزة، قرر "تعليمها" كيفية تلقي الرسومات "على الهواء". ما لن يكون مثيرًا للاهتمام فحسب، بل مريحًا جدًا أيضًا: يصعب فتح علبة الجهاز في كل مرة، وتحت غطاء حجرة البطارية لا يوجد سوى ثقوب تسمح لك بتوصيل مبرمج JTAG باللوحة.

كتابة محمل إقلاع OTA لـ ATmega128RFA1 (كجزء من جهاز Smart Response XE)

هذا يكفي لتحميل أداة تحميل التشغيل Arduino، ولكن ليس الرسم التخطيطي - المنفذ التسلسلي غير متصل هناك، لذلك لا يزال بإمكانك الاستغناء عن فتح العلبة. أيضًا، يتم دمج خطوط TX0 وRX0 للمنفذ التسلسلي الأول مع خطوط الاقتراع لمصفوفة لوحة المفاتيح، وهي تلك التي تستقصي مفاتيح الوظائف على جوانب الشاشة. ولكن ماذا يمكنك أن تفعل - قام المؤلف ببناء هذا:

كتابة محمل إقلاع OTA لـ ATmega128RFA1 (كجزء من جهاز Smart Response XE)

لقد أحضر خطوط JTAG هناك، والآن ليست هناك حاجة لفتح حجرة البطارية. وحتى يمكن تحميل الرسومات، قمت بتوصيل كلا المنفذين التسلسليين بنفس الموصل، وأضفت أيضًا مفتاحًا، لأنه مع البطاريات المثبتة، من المستحيل فعليًا إيقاف تشغيل الجهاز بأي طريقة أخرى.

استغرق العمل باستخدام مكواة لحام وسكين متعدد الاستخدامات ومسدس غراء بعض الوقت. بشكل عام، يعد تحميل الرسومات "عبر الأثير" أكثر ملاءمة، ونحن بحاجة ماسة إلى ابتكار شيء ما لهذا الغرض.

يستخدم Arduino IDE البرنامج لتحميل الرسومات avrdude. يتفاعل مع وحدة التحكم الدقيقة باستخدام البروتوكول STK500، والذي يسمح لك بنقل الملفات في كلا الاتجاهين. إنه غير متوافق بشكل جيد مع القنوات التي من الممكن حدوث تأخيرات متغيرة وتشويه وفقدان البيانات. إذا حدث شيء ما أو حدث حفيف في القناة التسلسلية، فيمكنك أن تصاب بالجنون بحثًا عن السبب. بمجرد أن عانى المؤلف لمدة نصف يوم حتى أدرك أن المشكلة كانت في كابل سيء، بالإضافة إلى محول واجهة CP2102 متقلب. حتى وحدة التحكم الدقيقة المزودة بمحول واجهة مدمج، على سبيل المثال، ATmega32u4، يمكن أن تعمل أحيانًا بهذه الطريقة. لقد لاحظ كل مستخدم لـ Arduino أن الأخطاء عند تحميل الرسومات ليست نادرة جدًا. في بعض الأحيان يكون التسجيل جيدًا، ولكن أثناء اختبار القراءة يتم اكتشاف خطأ. وهذا لا يعني أنه كان هناك خطأ أثناء الكتابة، بل كان هناك فشل أثناء القراءة. الآن تخيل أنه عند العمل "على الهواء"، سيحدث نفس الشيء، ولكن في كثير من الأحيان.

وبعد تجربة طرق مختلفة للتغلب على هذه المشكلة، توصل المؤلف إلى ما يلي. يحتوي الجهاز على ذاكرة فلاش بسعة 128 كيلو بايت مع واجهة SPI - نستقبل البيانات عبر الأسلاك (تذكر أن المؤلف لديه بالفعل جهاز واحد مزود بموصل على الجانب)، ونستخدم هذه الذاكرة كمخزن مؤقت، ونرسل البيانات عبر الراديو قناة إلى جهاز آخر. مرحبا من سيبيكو.

وبعد كتابة الكود الخاص بالعمل مع قناة الراديو وكذلك الخط أصبح حجم اللودر أطول من 4 كيلو بايت. ولذلك، كان لا بد من تغيير قيمة HFUSE من 0xDA إلى 0xD8. الآن يمكن أن يصل طول أداة تحميل التشغيل إلى 8 كيلو بايت، وعنوان البداية هو الآن 0x1E000. ينعكس هذا في ملف Makefile، ولكن يجب أيضًا أخذه بعين الاعتبار عند التعبئة محمل الإقلاع عبر أفردودي.

تم تصميم جهاز الإرسال والاستقبال 802.15.4 الموجود في ATmega128RFA1 في الأصل للعمل باستخدام البروتوكول زيجبي، وهو أمر معقد للغاية، لذلك قرر المؤلف إرسال الحزم فقط بدلاً من ذلك. يتم تنفيذ ذلك في الأجهزة الموجودة في ATmega128RFA1، لذا لا يلزم سوى القليل من التعليمات البرمجية. أيضًا، من أجل البساطة، قرر المؤلف استخدام قناة ثابتة، ولا يسمح لك بتحديدها حتى يدويًا. يدعم معيار 802.15.4 16 قناة بأرقام من 11 إلى 26. وهي مزدحمة للغاية، وبعضها يتداخل أيضًا مع قنوات WiFi (اللون الأحمر هو قنوات ZigBee، والأزرق والأخضر والأصفر عبارة عن WiFi).

كتابة محمل إقلاع OTA لـ ATmega128RFA1 (كجزء من جهاز Smart Response XE)

وتبين أن القناتين 15 و26 هما الأقل عرضة للتداخل من شبكات WiFi، وقد اختار المؤلف الثانية منهما. إخلاء المسؤولية: لا يعرف المترجم ما إذا كان مسموحًا بتبسيط ZigBee بهذه الطريقة. ربما ينبغي لنا أن نفعل المزيد من البرمجة وننفذها بالكامل؟

على الجهاز الأول، من الضروري تنفيذ جهاز ذو حالة محدودة ينقل البيانات عبر بروتوكول STK500. في معظمها، تكون الرسائل المرسلة والمستقبلة مكتفية ذاتيا، ولكن بعضها مرتبط بتلك التي مرت عبر القناة في وقت سابق. ويرد وصف الحوار هنا.

أحد العناصر المهمة في هذا الحوار هو إرسال الحزم المراد كتابتها إلى ذاكرة الفلاش الخاصة بالجهاز الوجهة. بالنسبة لوحدات التحكم الدقيقة البسيطة لعائلة AVR، يبلغ حجم الصفحة 128 بايت، ولكن بالنسبة لـ ATmega128RFA1 يبلغ 256 بايت. وبالنسبة لذاكرة الفلاش المتصلة عبر بروتوكول SPI، فهو نفسه. البرنامج الموجود على الجهاز الأول، عند تحميل رسم، لا ينقله على الفور إلى الجهاز الثاني، بل يكتبه في هذه الذاكرة. عندما يتحقق Arduino IDE من صحة الإدخال، يتم إرسال ما هو مكتوب هناك. نحتاج الآن إلى إرسال البيانات المستلمة عبر قناة الراديو إلى الجهاز الثاني. في الوقت نفسه، يحدث التبديل من الاستقبال إلى الإرسال والعودة في كثير من الأحيان. بروتوكول STK500 غير مبال بالتأخير، لكنه لا يتسامح مع فقدان البيانات (غريب، ولكن قيل أعلاه أن التأخير يؤثر أيضًا على نقل البيانات). والخسائر أثناء الإرسال اللاسلكي أمر لا مفر منه. يحتوي ATmega128RFA1 على تنفيذ أجهزة مدمج للطلبات المتكررة عندما تكون هناك شكوك حول صحة النقل، لكن المؤلف قرر تنفيذ نفس الشيء في البرنامج بنفسه. لقد طور بروتوكولًا يتدفق فيه المزيد من البيانات في اتجاه واحد أكثر من الآخر.

إنها ليست مثالية، لكنها تعمل. وتنقسم الصفحة ذات 256 بايت إلى أربعة أجزاء، يتم إرسال كل منها عبر الهواء كحزمة. يمكن أن تحتوي الحزمة على ما يصل إلى 125 بايت من البيانات بالإضافة إلى بايت واحد للطول وبايتين لاتفاقية حقوق الطفل. لذلك يتم وضع الأجزاء التي يبلغ طولها 64 بايت مع أرقام الصفحات والأجزاء (من 0 إلى 3) هناك. يحتوي جهاز الاستقبال على متغير يسمح له بتتبع عدد المقاطع التي تم استلامها، وعندما تصل الأجزاء الأربعة جميعها، يتلقى الجهاز المرسل تأكيدًا باستلام الصفحة بأكملها. لا يوجد تأكيد (CRC غير متطابق) - أعد إرسال الصفحة بأكملها. السرعة أكبر حتى من الإرسال عبر الكابل. يرى:


لكن بشكل عام، سيكون من الضروري توفير طريقة ملائمة لتوصيل الكابل بالأجهزة لتحميل الرسومات ومن خلالها. على سبيل المثال، ضع داخل محول الواجهة هذا على CP2102، كما في الصورة، وألصقه على اللوحة حتى يتمكن من تحمل القوة عند توصيل وفصل كابل Micro USB.

كتابة محمل إقلاع OTA لـ ATmega128RFA1 (كجزء من جهاز Smart Response XE)

يحتوي أيضًا على مثبت 3,3 فولت (وكيفية استخدامه في جهاز مزود بمصدر طاقة 6 فولت - إذا كان يحتوي على نفس المثبت فقط، ويمكنك إضافة صمامين ثنائيين لتحديد أي منهما سيعمل على تشغيل الجهاز تلقائيًا) . يجب فك جميع مصابيح LED الثلاثة من لوحة محول الواجهة، وإلا فإنها ستقوم بالإضافة إلى ذلك بتحميل البطاريات عند التشغيل عليها، وتتداخل أيضًا مع استقصاء لوحة المفاتيح والعمل مع ذاكرة الفلاش مع واجهة SPI.

تبين أن السعي وراء الهدف أكثر إثارة للاهتمام من تحقيقه (ولست بحاجة إلى هذه النكتة حول الحافلة). لقد تعلم المؤلف الكثير عن أدوات تحميل التشغيل AVR وذاكرة فلاش SPI وبروتوكول STK500 ومعيار 802.15.4.

جميع التعليمات البرمجية الأخرى بالإضافة إلى المكتبة الموضحة أعلاه هي - هنا، وهو أيضًا تحت GPL v3. تويتر المؤلف - هنا.

المصدر: www.habr.com

إضافة تعليق