اگر تا به حال با میکروکنترلر ها و پروگرام کردن آنها سر و کار داشته اید، احتمالاً اسم جی تگ (JTAG) را شنیده اید و با آن آشنا هستید زیرا از ابزارهایی با رابط JTAG استفاده کرده اید. پردازنده ها معمولاً برای دسترسی به بلوکهای فرعی آی سی و توابع اشکال زدایی یا شبیه سازی از JTAG استفاده می کنند. از طرفی همه FPGA ها و CPLD ها برای دسترسی به توابع برنامه نویسی خود از JTAG استفاده می کنند. در ادامه قصد داریم در مورد اینکه jtag چیست و اینکه این ابزار سخت افزاری فراگیر چطور برای تست، پروگرام کردن و دیباگینگ مورد استفاده قرار می گیرد، صحبت کنیم.
فهرست مطالب
جی تگ jtag چیست؟
JTAG که در دهه 1980 برای حل مسائل مربوط به تولید بردهای الکترونیکی توسعه یافت کوتاه شده عبارت Joint Test Action Group ، یک استاندارد IEEE (1149.1) است. امروزه از آن بیشتر به عنوان اینترفیس دیباگ، پروگرام و آزمایش استفاده می شود.
جی تگ قابلیت برنامه ریزی حافظه ها و فیوز بیت ها و پروگرام کردن چندین تراشه یا چیپ به صورت سری را دارد و لزومی ندارد که نوع چیپ ها یکسان باشند؛ به طوری که یک تراشه می تواند CPLD باشد، دیگری ARM و دیگری AVR.
اشتباهات رایج در رابطه با مفهوم jtag
یکی از گیج کننده ترین موارد در مورد یادگیری استفاده از JTAG این است که اطلاعات نادرست زیادی در مورد آن وجود دارد. در ادامه مواردی را ذکر کرده ایم تا با مفهوم درست جی تگ آشنا شوید.
- جی تگ، نام یک دستگاه خاص برای رفع اشکال سختافزار نیست!
- جی تگ، نام نرم افزاری که برای دیباگ کد نرم افزاری که روی دستگاه تعبیه شده اجرا می شود، نیست!
- جی تگ، نام یک پروتکل نیست!
- نام یک نوع کانکتور نیست!
بر خلاف مشخصاتی مانند USB یا اترنت، مشخصات JTAG حتی مشخص نمی کند که کانکتورها چگونه باید باشند. این مسئله منجر به تنوع بسیار گیج کننده کانکتورهای JTAG و منبعی بزرگ برای سردرگمی می شود. تصور کنید هر کابل USB با دیگری متفاوت باشد!
نحوه استفاده از jtag / BSR برای آزمایش یک برد
پروتکل استاندارد ارتباطی جیتگ، برای پروگرام کردن هر تراشه دیجیتالی مانند آی سی، FPGA، CPLD و … از 4 سیم استفاده می کند. این چهار سیگنال که مجموعاً به عنوان Test Access Port یا TAP شناخته می شوند، بخشی از استاندارد IEEE هستند. این استاندارد برای ارائه فناوری آزمایش مجموعه های برد مدار چاپی (PCBA) بدون نیاز به سطح دسترسی فیزیکی مورد نیاز برای آزمایش عملکردی ایجاد شده است. TAP برای تعامل با رجیسترهای جدیدی طراحی شده است که برای اجرای این روش آزمایش به دستگاهها اضافه شدهاند.
رجیستر اصلی اضافه شده به دستگاه مخصوصاً برای آزمایش جی تگ، ثبت اسکن مرزی (BSR مخفف Boundary Scan Register) نامیده می شود. همانطور که از نام آن پیداست، تک تک بیتها یا سلولهای این رجیستر در مرز دستگاه، بین هسته عملکردی آن و پینها که توسط آن به یک برد متصل میشود، قرار دارند – اغلب منظور از تست JTAG همان اسکن مرزی است.
عملکرد جی تگ به چه صورت است؟
دو راه اصلی وجود دارد که می توان از این قابلیت اسکن مرزی برای آزمایش برد استفاده کرد. روش اول، تست اتصال، پوشش خوبی را به خصوص برای خطاهای اتصال کوتاه می دهد. این صرفاً بر اساس قابلیتهای دستگاه JTAG، اتصالات و شبکههای روی برد و عملکرد منطقی روی برد است.
راه دوم این است که این پوشش را با استفاده از دستگاههای دارای جی تگ روی برد برای برقراری ارتباط با دستگاههای جانبی غیر JTAG مانند رم DDR و فلش گسترش میدهد.
استفاده از جی تگ برای پروگرام کردن
به صورت کلی از jtag برای پروگرام کردن هر نوع تراشه استفاده می شود. شاید شنیده باشید که این پروتکل 20 پین را اشغال می کند اما همیشه اینگونه نیست بلکه استاندارد رسمی جی تگ به 4 پین یا سیگنال استاندارد نیاز دارد و یک پین پنجم اختیاری را تعریف می کند تا دید بهتری به سخت افزار داشته باشید.
- ورودی داده آزمایشی (TDI)
- خروجی داده آزمایشی (TDO)
- انتخاب حالت آزمایشی (TMS)
- ورودی کلاک آزمایشی (TCK)
- ورودی بازنشانی آزمایشی (TRST*) – اختیاری است.
TDI=Test Data In : از طریق این پورت داده ها وارد جی تگ می شوند.
TDO=Test Data Out : از طریق این پورت داده ها از جیتگ خارج می شوند.
TMS=Test Mode Select : از طریق این پورت، تمام حالت های مختلف تست که در استاندارد ذکر شده است، انتخاب می شوند.
TCK=Test Clock Input : کلاک ورودی است که کاملا جدا از کلاک سیستم می باشد.
TRST=Test Reset Input : از طریق این پورت امکان راه اندازی Tap Controller فعال می شود.
در بررسی عملکرد jtag باید بگوییم که معمولاً به صورت زیر عمل می کند:
- ابتدا حالت دستورالعمل انتخاب می شود. یکی از حالت های «مسیر» وضعیت دستورالعمل به کاربر اجازه میدهد تا یک دستورالعمل را از طریق TDI ساعت کند.
- سپس دستگاه حالت، پیشروی می کند تا زمانی که ریست شود.
- انتخاب حالت داده برای اکثر دستورالعمل ها، مرحله بعدی است. در این حالت، داده ها از طریق TDI بارگیری می شوند و/یا از TDO خوانده می شوند. مسیرهای داده برای TDI و TDO مطابق با دستورالعملی که در آن کلاک شده است، پیکربندی می شود.
- هنگامی که عملیات خواندن یا نوشتن کامل شد، دستگاه حالت دوباره به حالت تنظیم مجدد پیش می رود.
کنترل کننده سخت افزاری JTAG
برقراری ارتباط با یک دستگاه لزوماً باید از نظر سخت افزاری باشد. برای این کار باید حتماً یک درایور نصب کنیم که بتواند این ارتباط را بین دستگاه ما و اینترفیس جی تگ برقرار کند. برای این کار کافی است که به سایت jtag.com سر بزنید تا دستورالعمل کامل آن را به طور دقیق دنبال کنید.
کاربردهای جی تگ
- خواندن و نوشتن از حافظه
- توقف اجرای سیستم عامل (تنظیم نقاط شکست و نقاط نظارت)
- اتصال دستور العمل ها یا داده ها در حافظه
- تزریق مستقیم دستورالعمل ها به تراشه هدف (بدون تغییر حافظه)
- استخراج سخت افزار (برای تحقیقات مهندسی معکوس یا آسیبپذیری)
- مکانیسمهای حفاظتی (بررسی رمز گذاری، بررسی رمز عبور، جمع بندی های چک و …)
واقعاً هر کاری که می خواهید را می توانید انجام دهید!
کدام ابزارهای JTAG را نیاز دارید؟
در این بخش ابزارها و دادههای طراحی مورد نیاز برای توسعه روشهای تست جی تگ را شرح میدهیم. یک برد دیجیتال معمولی با دستگاه های JTAG شامل اجزای اصلی زیر است:
- اجزای مختلف jtag مانند CPLD، FPGA، پردازنده ها، و … از طریق مسیر اسکن مرزی به هم متصل شده اند.
- اجزای غیر JTAG (خوشه ها)
- انواع دستگاه های حافظه
- اجزای فلش مموری
- اجزای شفاف مانند مقاومت های سری یا بافر ها.
اکنون به طور گسترده می دانیم که JTAG چیست و چه کاری می تواند انجام دهد. مفهوم جی تگ بسیار گسترده تر از آن چیزی است که می توان در یک پست بلاگ پوشش داد، اما امیدواریم با خواندن این موضوع به برخی از فرصت های متعددی که دسترسی جی تگ فراهم می کند، اشاره کنیم.