الواجهة الموحدة للبرنامج و Debug (UPDI) عبارة عن
واجهة أحادية السلك لبرمجة / تصحيح وحدات التحكم الدقيقة الجديدة ذات 8 بت Atmel ، لتحل محل واجهة PDI ثنائية الأسلاك المستخدمة في برمجة وحدات التحكم الدقيقة AVR XMEGA.
لذا ، وصل فوج بروتوكولات Atmelovsk - ISP ، JTAG ، debugWIRE ، TPI ، aWire ، PDI ، الآن هنا UPDI. في الوقت نفسه ، لا يزال وضع النظام البيئي في AVR ميئوسًا جدًا منه ، لذلك كنا سنتخلى عن استخدامه تمامًا ، ولكن الاتجاه الأخير أسعدنا قليلاً ، لذلك تمت كتابة هذه المقالة.
يمكن فقط للمالكين المحظوظين لمبرمج Atmel ICE استخدام بروتوكول UPDI ، وهو ليس مناسبًا جدًا للاستخدام بسبب اختيار غريب نوعًا ما للموصل ، وليس من الرخص شراءه على نطاق صناعي. بالإضافة إلى ذلك ، يتطلب تثبيت Atmel Studio ، الذي يرفض بشكل دوري العمل معه ، لأنه وفقًا لسياسة شركتنا ، فإن معظم أجهزة الكمبيوتر لا يمكنها الوصول إلى الإنترنت ، ويزحف الاستوديو بشكل دوري هناك إما للسائقين أو لبعض المكتبات ، ونتيجة لذلك لحظات عندما كان المبرمج مرئيًا في النظام ، أي تم تثبيت برامج التشغيل بشكل صحيح ، ولكن لم يلاحظه الاستوديو نفسه حتى تمكن من الوصول إلى الشبكة ولم يتم تحديثه بالقوة.
لذلك ، بعد أن بدأنا مباشرة في استخدام وحدة التحكم الدقيقة ATTiny1616 الجديدة والمريحة إلى حد ما في تطوراتنا (حول مزاياها لاحقًا) ، كانت هناك حاجة إلى أداة يمكننا استخدامها للكتابة إلى وحدة تحكم bootloader في الإنتاج. بالطبع ، بدون
SMS وتسجيل الوصول إلى الإنترنت.
بعد قليل من البحث ، وجدت مشروع pyupdi على
Github (https://github.com/mraardvark/pyupdi) - تنفيذ بروتوكول UPDI في Python ، ويستند هذا التنفيذ إلى بروتوكول UART المعتاد ، باستثناء بدون محولات المستوى ، والتي ، في الواقع ، أكثر ملاءمة ، لأنه يسمح لك باستخدام رقائق تحويل FTDI القياسية أو نظيراتها الصينية CH340 / 341.
تم تنزيل المشروع واختباره ، وسارت الأمور بمرح. ولكن بعد يومين أصبح من الواضح أنه لا يزال لا يناسبنا تمامًا. الأسباب:
- من الضروري تثبيت Python ومجموعة كاملة من الحزم (أذكرك أننا نتحدث عن أجهزة كمبيوتر لا يمكنها الوصول إلى الإنترنت) ، واضطررت إلى تنزيل وتثبيت ما يقرب من اثنتي عشرة حزمة مختلفة قامت بسحب بعضها البعض مع التبعيات. نعم ، من حيث المبدأ ، يمكنك إنشاء ملف قابل للتنفيذ على كمبيوتر آخر من نص Python النصي ، وقد أدى ذلك إلى حل المشكلة بطريقة ما ، ولكن قائمة المشاكل لم تنته عند هذا الحد
- لا يوجد أي خطأ في فحص البرنامج النصي تقريبًا ، وينتهي أي خطأ بمقاطعة تشير إلى مجموعة من الملفات المرتبطة ببعضها البعض ، والتي لا تبدو واضحة جدًا للموظفين العاديين
- من المستحيل قراءة محتويات ذاكرة وحدة التحكم ، مما يجعل من المستحيل إنهاء عملية الكتابة
- لا توجد طريقة لقراءة الصمامات
- سرعة البرنامج النصي تترك الكثير مما هو مرغوب فيه ، يتم كتابة 16 كيلو بايت لمدة دقيقة تقريبًا ، ويرجع ذلك إلى عدم وجود أي تحسين أثناء النقل ، كل شيء يعتمد على توقيت ضيق
- عدم وجود إشارة إلى عملية التسجيل
- لا يدعم المشروع عدد من المعالجات التي يمكن أن تدعم
- المشروع نصف ميت ولا يستجيب للطلبات
تم حل المشاكل لبعض الوقت في إطار Python ، ولكن بعد أي إصلاح كان علي إعادة تجميع المشروع ، اختبار ، بحيث كانت هناك رغبة في إعادة كتابة البرنامج النصي على شيء أكثر دراية وسرعة ، أي في C. نحن embeders ، بعد كل شيء!
الآن بإيجاز عن مزايا سلسلة AVR 1 الصغيرة الجديدة:
- التوحيد الحقيقي للأجهزة الطرفية ومساحة العنوان في حدود 2 كيلوبايت إلى 32 كيلوبايت
- تكوين محمل إقلاع مريح (في بداية الذاكرة!)
- تبسيط كبير لخوارزمية ISP (In-System-Programming)
- الانتقال إلى العمارة فون نيومان
- ذاكرة فلاش بسعة تصل إلى 32 كيلوبايت في عبوة صغيرة (3 × 3 مم) مع 24 دبابيس ، منها ما يصل إلى 22 (!) يمكن استخدامها ك IO
- وجود مذبذب داخلي عند 16/20 ميجاهرتز
- اعتماد أقل على الأداء في تكوين الصمامات (صداع دائم AVR)
- جزء تناظري ممتاز لوحدة تحكم صغيرة (ADC / DAC / مقارنات مع إمكانية التبديل الداخلي والخارجي للمدخلات / المخرجات)
- برمجة وتصحيح سلك واحد
- سعر التجزئة منخفض للغاية (من 0.6 € مقابل 16 كيلوبايت)
بصفتنا الجزء الحديدي من المبرمج ، أخذنا محول USB-UART TTL المتوفر بناءً على شريحة CH340 الصينية ، مثل هذا:

بالنسبة للبرمجة ، يكفي توصيل مخرجيها RX و TX ، نظرًا لأنهما مجهزتان بالفعل بمقاوم إخراج 1.5 كيلو ، إذا لم يكن هناك المقاوم في نموذج المحول الخاص بك ، فأنت بحاجة إلى إضافته. يتم توصيل الإخراج المدمج بدبوس UPDI على شريحة قابلة للبرمجة ؛ ويجب أيضًا توصيل أرض المحول بأرض وحدة التحكم. إذا كان لديك طاقة خارجية ، فأنت بحاجة إلى الانتباه فقط إلى ما إذا كانت تتوافق مع الطاقة التي يستخدمها المحول (3.3 فولت أو 5 فولت). إذا كانت هناك حاجة ، فيمكنك تشغيل الدائرة باستخدام وحدة التحكم ومن المحول نفسه ، والتي يمكن أن تكون مريحة جدًا للبرمجة الأولية.
إنتباه! المقاوم اختياري ، ولا يحتاج إلى اللحام إلا إذا لم يكن لدى المحول أي مقاومات واقية عند الإخراج.
المشكلة الوحيدة المتعلقة بشريحة CH340 هي أنها لم تعمل في إصدار Linux الخاص بي من البرنامج ، لأن بت التماثل يستخدم في بروتوكول البرمجة ، ولا يعمل برنامج تشغيل CH340 في إصدار kernel مع هذا البت بشكل صحيح. ربما سيتم حل المشكلة في المستقبل القريب ، حتى الآن لم يكن لدي الصبر للقيام بذلك.
نتيجة للعمل والتجارب ، تمت كتابة برنامج
المحدث وتصحيحه في IDE Code :: Blocks ،
التي تم نشر رموز مصدرها على Github .
ما تم تنفيذه في هذا الإصدار من البرنامج:
- تمت إضافة القدرة على قراءة محتويات ذاكرة فلاش وحدة التحكم في ملف سداسي
- تمت إضافة القدرة على قراءة حالة جميع الصمامات وحدة التحكم
- كلما كان ذلك ممكنًا ، تمت إضافة خطأ في معالجة الرسائل المقابلة
- إضافة إشارة لعملية الكتابة / القراءة
- زيادة السرعة بشكل ملحوظ (حوالي 6 ثوان لقراءة 16 كيلو بايت)
- تمت إضافة دعم لجميع وحدات التحكم الدقيقة من الفئة 1
الحجم الأولي للبرنامج هو حوالي 25 كيلو بايت ، مقارنة بـ 5 كوبيل لنص بايثون المصدر الذي تم تجميعه.
آمل أن يكون العمل المنجز مفيدًا لشخص ما. سأكون سعيدا للمراجعات والاقتراحات.