اگر با میکروکنترلرها زیاد سروکار دارید و آنها را پروگرام کرده باشید به احتمال زیاد اسم JTAG را نیز زیاد شنیدهاید، اما چرا؟ چون از JTAG غالبا برای پروگرام و دیباگ تراشههای زیادی ازجمله میکروکنترلرها استفاده میشود و افرادی که درگیر پروگرام تراشههای مختلف هستند حتما اسم این پروتکل را شنیدهاند. اما JTAG چیست؟
بهطورعام ما الان JTAG را پروتکلی برای پروگرام و دیباگکردن تقریبا تمامی تراشهها میشناسیم، تراشههای مانند میکروکنترلرهای ST،AVR و… و همینطور انواع FPGAها و CPLDها. اما ما قصد داریم در این مقاله بهطورخاص کمی از تاریخچه و قابلیتهای این پروتکل بگوییم.
تاریخچه
در دهه ۱۹۸۰ میلادی به دنبال راهحلی برای استانداردسازی بردهای چندلایه بودند تا اینکه درنهایت استانداردی مرتبط با این موضوع تحتعنوان JTAG ارائه شد. اما این پروتکل گستردهتر شد و به سمت کاربردهای دیگری رفت که ما در ادامه به این کاربردها اشاره خواهیم کرد.
دیباگ
اگرچه JTAG برای اولینبار به منظورهای دیگری در رابطه با تستهای سطح برد استفاده میشد اما اکنون JTAG برای دیباگ کردن دستگاهها، آزمایش سیستمها و تشخیص خطاها طراحیشدهاست. امروزه JTAG بهعنوان اصلیترین وسیله برای دسترسی به بلوکهای مدارات مجتمع مورداستفاده قرار میگیرد و به یک مکانیزم اساسی برای دیباگ سیستمهای امبدد(embedded) تبدیلشدهاست که ممکناست دیگر کانال ارتباطی با قابلیت دیباگ نداشتهباشند. در اغلب سیستمها، دیباگ مبتنیبر JTAG از اولین کلاک پساز ریست CPU در دسترس است، که این اجازه را میدهد boot اولیه قبلاز راهاندازی هر چیزی اجرا شود. یک شبیهساز درون مدار، از JTAG بهعنوان مکانیزمی برای دسترسی به بلوکهای اشکالزدایی داخلی استفاده میکند و این مورد این اجازه را به توسعهدهندگان نرمافزار میدهد تا نرمافزار یا همان کد امبدد سیستم را در سطح کد ماشین یا سطوح بالاتر دیباگ کنند. قابلیتهای زیاد و کاربردهای فراوانی که JTAG دارد، از جمله ردیابی دستورالعملها و همچنین دسترسی به تمامی رجیسترها و حافظهها مانند RAM و FLASH این پروتکل را منحصربهفرد کرده است.
شما بااستفادهاز پروتکل JTAG میتوانید یک روند تست ایجاد کنید، چون میتوان به تمامی حافظهها و رجیسترها دسترسی داشت، بنابراین حتی درهنگام کار مدار میتوان مقادیری را تغییر داد و سیگنالهایی از مدار که مدنظرمان است را بخوانیم. این مورد هم در پردازندهها و هم در FPGAها و CPLDها صادق است.
بهعنوانمثال میتوان به دو شیوه روند تست ایجاد کنید. اما این دو شیوه و روش به چهنحوی عمل میکنند؟
ما میتوانیم برنامه خود را پروگرامکنیم و زمانی که برنامه درحال اجراست حافظهها یا سیگنالهای بخشهای مختلف مدار را در نرمافزاری که بااستفادهاز پروتکل JTAG با مدار در ارتباط است مانیتور کنیم. روش دیگر این است که ما بااستفادهاز همین پروتکل JTAG وقتی برنامه درحال اجرا است، مقادیر حافظههای داخلی را میتوانیم تغییر بدهیم و سپس نتیجه تغییرات حاصله را مانیتور کنیم. این موضوع در FPGAها نیز وجود دارد و شما میتوانید بااستفادهاز نرمافزار chipscope و ipcoreهایی که وجود دارد هر دو روند تست بالا را انجام دهید، فقط توجهکنید که در روند تست دوم قرار نیست کد جدیدی درون FPGA سنتز شود بلکه کد سنتز شده همان است و فقط مقادیر بعضی از منابع یا حافظهها تغییر خواهد کرد.(برای درک این موضوع نیاز است که با مفاهیم و چگونگی برنامهریزی FPGAها آشنا باشید)
مشخصات الکتریکی
رابط JTAG یک رابط ویژه است که به یک تراشه اضافه میشود یعنی بهصورت سختافزاری باید درون تراشه تجهیزاتی برای این پروتکل وجود داشته باشد تا بتوانیم از آن استفادهکنیم. بسته به نسخه JTAG، پینهای دو، چهار یا پنج پین اضافه میشود.
رابطهای چهار و پنج پین بهگونهای طراحی شدهاند که درصورت برآوردهشدن شرایطی خاص، چندین تراشه میتوانند بهصورت سری همانند شکل زیر به همدیگر وصل شوند و با همین توپولوژی نیز بهصورت همزمان چندین تراشهی مختلف مانند میکروکنترلر یا FPGA را پروگرام کنیم.
(Daisy-chained JTAG (IEEE 1149.1
رابط دو پین بهگونهای طراحیشدهاست که میتوان چندین تراشه را در یک توپولوژی ستاره متصلکرد. در هر دو حالت بالا، یک پروب آزمایش فقط به یک “پورت JTAG” وصل میشود تا به تمام تراشههای موجود دسترسی داشته باشد.
پینهای پروتکل jtag
- (TDI (Test Data In
- (TDO (Test Data Out
- (TCK (Test Clock
- (TMS (Test Mode Select
- TRST (Test Reset) optional
پین TRST یک پین ریست active-low برای تست میباشد. این پین معمولا آسنکرون است، اما باتوجهبه تراشه میتواند سنکرون نیز باشد. بهطورکلی برخی عملیات در JTAG وجود دارد که میتوانیم بااستفادهاز این عملیات فقط بخشهایی از پردازنده را ریست کنیم. از آنجاکه فقط یک خط داده وجود دارد پس پروتکل سریال است. کلاک ورودی پین TCK میباشد و یک بیت داده با هر لبه بالارونده کلاک، از TDI به TDO منتقل میشود. پروتکل JTAG میتواند دستورالعملهای متفاوتی را بر روی تراشه بارگذاری کند، بااستفادهاز این دستورالعملها میتواند نوع تراشه را بااستفادهاز ID درون تراشه مشخصکند، عملکرد تراشه را دستکاری کند، تراشه را در ساختار و توپولوژی Daisy-chained JTAG بایپس(bypass) کند و بسیاریاز کارهای دیگر. حداکثر فرکانس کاری TCK، بسته به اینکه چه نوع تراشههایی در توپولوژی Daisy-chained JTAG وجود دارد میتواند متفاوت باشد، به طور کلی باید کمترین فرکانس مربوط به تراشهها انتخاب شود تا عملکرد صحیحی داشته باشیم. اما معمولا فرکانس کاری عددی بین ۱۰ تا ۱۰۰مگاهرتز میباشد. همچنین فرکانس TCK باتوجهبه چیدمان برد و آدابتور JTAG میتواند متفاوت باشد. پروتکل JTAG بااستفادهاز TMS و یک ساختار State Machine، میتواند در مدهای مختلف کاری قرار بگیرد و به نواحی مختلف دسترسیداشتهباشد.
(Reduced pin count JTAG (IEEE 1149.7
یکی از عیبهای که بعضیاز افراد نسبت به JTAG خرده میگیرند، تعداد پینهای زیاد این پروتکل میباشد. اما در استانداردهایی تعداد پینها به ۲ پین تقلیل یافته است که در ادامه به معرفی آن میپردازیم.
JTAG با پینهای کاهش یافته تنها شامل دو پین است، یک پین برای کلاک و پینی دیگر برای دیتا میباشد که این مورد بخشی از استاندارد IEEE 1149.7 میباشد.
پینهای پروتکل jtag با پینهای کاهش یافته
- (TMSC (Test Serial Data
- (TCKC (Test Clock
رابط دو سیمه باعث میشود که ما بتوانیم دیوایسهای مختلف را بااستفادهاز توپولوژی ستاره بهم متصلکنیم. توپولوژی ستاره این امکان را میدهد که قسمتهایی از سیستم یا بعضیاز دیوایسها خاموش شوند، اما در توپولوژی Daisy-chained JTAG همچین امکانی وجود ندارد. هدف و تمرکز این مقاله روی این موضوع بود که کلیت و قابلیتهای پروتکل JTAG را ارائه بدهد و نه تشریح عملکرد پروتکل. امیدواریم که بتوانید از این قابلیتهای خاص پروتکل JTAG بهصورتعملی در پروژههایتان استفادهکنید.
منبع:سیسوگ