Atmega32A Debugging using ATMEL-ICE (JTAG)

سلام عليكم 😁

إن شاء الله اليوم معانا فيديو جديد وهو عن كيفية عمل 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 المختلفة وتقييمها قبل كتابة الكود وفهم خطوات التعامل معها.
    في الصورة السابقة قمت بالتحكم في الـ GPIO PORTB وقمت بجعل جميع الـ Pins ك مخارج Outputs وقمت بتشغيل LED على PortB.0 بكل سهولة
    في الصورة السابقة قمت بالتحكم في الـ GPIO PORTB وقمت بجعل جميع الـ Pins ك مخارج Outputs وقمت بتشغيل LED على PortB.0 بكل سهولة
  • لديك التحكم الكامل في الذاكرة العشوائية RAM ومراقبة أي تغيرات تحدث لها عند الكتابة في أي عنوان Address من خلال الكود. وأيضاً يمكنك التحكم في القيم بشكل يدوي.
    الصورة توضح محتوى الذاكرة العشوائية RAM ويمكنك ان تقوم بتعديل أي قيمة بها
  • لديك إمكانية مراقبة وتتبع تنفيذ الكود. حيث أن الـ Debugger تسيطر بالكامل على الميكروكونترولر وتتحكم في الـ Program Counter.
    الصورة توضح أن الميكروكونترولر سوف ينفذ السطر رقم 19 في الخطوة القادمة
  • يمكنك أن تنتقل لتنفيذ الكود ب لغة الأسمبلي Assembly وأيضاً لغة الـ C وأن تقوم بالتنفيذ بينهم بالتبادل.
    الصورة توضح إمكانية تنفيذ الأكواد ب لغة الأسمبلي Assembly أيضاً
  • يمكنك مراقبة قيم المتغيرات في الكود بسهولة ومعرفة عنوان المتغيرات ونوعها وأيضاً مدى تأثر المتغيرات بتنفيذ آخر سطر. مثال بسيط، المتغير x عنوانه 0x0060 في الذاكرة العشوائية. يمكنك أن تراقب محتواه بسهولة وأن تقوم بتغيير قيمة المتغير.
    الصورة توضح إمكانية عرض قيم المتغيرات الحالية بمجرد وضع مؤشر الفأرة فوقها

    الصورة توضح إمكانية عرض قيم المتغيرات. لاحظ معي أن قيمة المتغير x لونها أحمر (معناها إن حدث تغيير بالقيمة). أيضاً الصورة توضح في العامود على اليمين Type عناوين المتغيرات ونوعها. عنوان المتغير x هو 0x0060 ويمكنك الاطلاع عليه في الذاكرة العشوائية RAM أيضاً.


    لاحظ معي في الصورة السابقة أن قيمة المتغير X في الـ RAM تغير لونها بالأحمر.

الآن أصبحنا نعرف ما فائدة الـ 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 أو حلقة. الصورة التالية توضح ذلك.

الصورة السابقة توضح طريقة التوصيل في حالة توصيل أكثر من Device مع بعض بما يسمى بالـ Daisy 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 DescriptionPin NameID
Test Data INPC5 – TDI1
Test Data OutPC4 – TDO2
Test Mode SelectPC3 – TMS3
Test ClockPC2 – TCK4
RESET (Optional)RESET5
5V+VCC6
GNDGND7
الجدول السابق يوضح طريقة التوصيل

الصورة التالية أيضاً توضح مخطط توصيل الـ JTAG بالـ ATMEGA32:

مخطط توصيل الـ JTAG بالـ ATMEGA32

One thought on “Atmega32A Debugging using ATMEL-ICE (JTAG)

Add yours

  1. شكرا لك ونتمنى مذيد من التوفيق حقيقة موضوع شيق جدا جدا ونتظر مذيد من المقالات والمواضيع المفيدة وربنا يوفقك للخير صح موضوع يأخذ دقائق من القراءة لاكن يأخذ معك ساعات وايام من المجهود ونقدر لك كل هذا التعب

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

Up ↑