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



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

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

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

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

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


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

  • فلاش المسلسل SPI
  • التنزيل ل AVR
  • معيار 802.15.4

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



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



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

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

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

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

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

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



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

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

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

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


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



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

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

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

Source: https://habr.com/ru/post/ar447026/


All Articles