سلام عليكم 😁
إن شاء الله اليوم معانا فيديو جديد وهو عن كيفية عمل Debugging للـ AVR Microcontroller.
مقدمة:
كما نعلم جميعاً أن الـ AVR Microcontrollers بسيطة جداً في بنيتها وأيضاً متوافرة في الأسواق بكثرة إلا أنه من النادر جداً إننا نسمع عن اتاحية عمل Debugging للـ AVR Microcontroller للأسباب التالية:
- عدم توافر الـ Debugging Tools في الأسواق المحلية وأيضاً ارتفاع اسعارها. حيث يبلغ سعر الـ ATMEL ICE حوالي 200 دولار.
- عدم توافر Debuggers مفتوحة المصدر Open Source نظراً لأن أدوات شركة Microchip غير مفتوحة المصدر.
- قلة المحتوى الخاص بالـ AVR Debugging نتيجة للأسباب السابقة أيضاً.
ما الفائدة من الـ AVR Debugging:
في المعتاد عندما نقوم بكتابة الكود Firmware للـ AVR Microcontroller كنا نقوم بكتابة الكود وعمل Compiling وبعد ذلك نقوم بعمل Flashing على الميكروكونترولر ونقوم بإختبار الكود بشكل يدوي، وفي حالة وجود خطأ في الكود لا نعلم أين الخطأ تحديداً ونقوم بالتجربة العملية بشكل متكرر حتى نصل لمكان الخطأ بدقة.
ما لا نعلمه هو أن Debugging مفيد للغاية حيث أنه يعطيك وجهة نظر مختلفة تماماً للميكروكونترولر، سوف أقوم بالشرح بإستخدام أمثلة واقعية كل الإمكانيات التالية متاحة لك:
- التحكم الكامل في الميكروكونترولر (حتى بدون ما تكتب أي أكواد) من خلال التحكم في قيم الـ Registers للميكروكونترولر. تخيل أن الـ Debugger لها كامل الصلاحيات للوصول للـ Registers وتغيير قيمها وأيضاً مراقبتها. يمكنك من خلال هذه الميزة تجربة التعامل مع الـ Peripherals المختلفة وتقييمها قبل كتابة الكود وفهم خطوات التعامل معها.
- لديك التحكم الكامل في الذاكرة العشوائية RAM ومراقبة أي تغيرات تحدث لها عند الكتابة في أي عنوان Address من خلال الكود. وأيضاً يمكنك التحكم في القيم بشكل يدوي.
- لديك إمكانية مراقبة وتتبع تنفيذ الكود. حيث أن الـ Debugger تسيطر بالكامل على الميكروكونترولر وتتحكم في الـ Program Counter.
- يمكنك أن تنتقل لتنفيذ الكود ب لغة الأسمبلي Assembly وأيضاً لغة الـ C وأن تقوم بالتنفيذ بينهم بالتبادل.
- يمكنك مراقبة قيم المتغيرات في الكود بسهولة ومعرفة عنوان المتغيرات ونوعها وأيضاً مدى تأثر المتغيرات بتنفيذ آخر سطر. مثال بسيط، المتغير x عنوانه 0x0060 في الذاكرة العشوائية. يمكنك أن تراقب محتواه بسهولة وأن تقوم بتغيير قيمة المتغير.
الآن أصبحنا نعرف ما فائدة الـ Debugging.
الأدوات المستخدمة:
- ATMEL-ICE
- يمكنك أن تستخدم أي AVR Kit متاحة لديك. مع تعديل الكيت لتوصيلات الـ JTAG (سوف اتكلم عنها لاحقاً).
- مصدر تغذية 5 فولت (حيث أن المبرمجة لا تقوم بتغذية الميكروكونترولر بالتيار).
إمكانيات الـ ATMEL-ICE:
تدعم الـ ATMEL-ICE الإمكانيات التالية:
- Programming and on-chip debugging of all AVR 32-bit MCUs on both JTAG and aWire interfaces
- Programming and on-chip debugging of all AVR XMEGA family devices on both JTAG and PDI 2-wire interfaces
- JTAG and SPI programming and debugging of all AVR 8-bit MCUs with OCD support on either JTAG or debugWIRE interfaces
- Programming and debugging of all SAM ARM Cortex-M based MCUs on both SWD and JTAG interfaces
- Programming of all tinyAVR 8-bit MCUs with support for the TPI interface
- Programming and debugging of all AVR 8-bit MCUs with UPDI
تدعم البروتوكولات الآتية:
من المميزات الرائعة للـ ATMEL-ICE هي أنها تدعم 8 بروتوكولات للـ AVR/ARM Programming and Debugging.
- JTAG.
- SWD.
- PDI.
- TPI.
- aWire,
- SPI.
- debugWIRE.
- UPDI.
طريقة التوصيل:
من خلال مراجعتي للداتاشيت الخاص بالـ ATMEGA32. وجدت أنه يمكنني عمل Debugging له من خلال JTAG Protocol. المبرمجة تدعم هذا البروتوكول.
ماهو بروتوكول الـ JTAG:
المصطلح JTAG يعني Joint Test Action Group وهو عبارة عن Standard Protocol مستخدم في الصناعة لاختبار الدوائر المطبوعة PCBs والدوائر المتكاملة Integrated Circuits (ICs) وأيضاً يستخدم في الـ Debugging. إذا كنت من مستخدمي الـ FPGA من المؤكد أنك تعرفه. يتميز الـ JTAG Protocol بإمكانية تعامله مع أكتر من Device ويتم توصيلهم بما يسمى Chain أو حلقة. الصورة التالية توضح ذلك.
Pin Mapping:
- TDI (Test Data In)
- TDO (Test Data Out)
- TCK (Test Clock)
- TMS (Test Mode Select)
- TRST (Test Reset) optional.
في حالة توصيل JTAG Device واحد فقط يمكنك أن تقوم بتوصيله بشكل مباشر. سوف نقوم بتوصيل الـ ATMEGA32 بنفس الطريقة. الـ ATMEL-ICE User Manual به شرح كامل لطريقة التوصيل.
من خلال مراجعة ATMEGA32 Pinout سوف نجد الـ JTAG Pins. الصورة التالية توضح أن الـ JTAG Pins متواجدة في الـ PORTC.
Pin Description | Pin Name | ID |
Test Data IN | PC5 – TDI | 1 |
Test Data Out | PC4 – TDO | 2 |
Test Mode Select | PC3 – TMS | 3 |
Test Clock | PC2 – TCK | 4 |
RESET (Optional) | RESET | 5 |
5V+ | VCC | 6 |
GND | GND | 7 |
الصورة التالية أيضاً توضح مخطط توصيل الـ JTAG بالـ ATMEGA32:
شكرا لك ونتمنى مذيد من التوفيق حقيقة موضوع شيق جدا جدا ونتظر مذيد من المقالات والمواضيع المفيدة وربنا يوفقك للخير صح موضوع يأخذ دقائق من القراءة لاكن يأخذ معك ساعات وايام من المجهود ونقدر لك كل هذا التعب