مقدمه
شاید برای خیلیاز شما هایی که الکترونیکی هستید این سوال پیشاومدهباشه که تفاوت SWD و JTAG چیه؟ در نگاهاول شاید فکرکنید خیلی تفاوتچندانی نداره و یااینکه حالا چهفرقیمیکنه از SWD یا JTAG استفادهکرد مهماینکه با جفتشون میشه ایسی رو پروگرام کرد و عملیات دیباگ رو انجامداد. اما همیشه بههمینسادگی نیست گاهی نیازمیشه که خودتون یه پروگرامر درست کنید.
کی بهنظرتون نیاز میشه؟ فرضکنید یه پروژه میخواین انجامبدین که با FPGA هست و حالا خودتون هم باید براش پروگرامر درست کنید اونجاست که دیگه نمیدونید واقعا چیکار کنید؟
این مقاله رو هم دقیقا برای همین نوشتم که اول تفاوت و عملکردشون رو بدونید تا اگه خواستید یه پروگرامر با هزینهی کمتر درستکنید. البته لینک ساختش رو گذاشتم که بعداز خوندن این مقاله هیچجوره توی پروژههاتون از لحاظ پروگرامکد نمونید.
JTAG
از این پروتکل برای پروگرامکردن هرنوع تراشهای بهصورتکلی استفادهمیشه. بهطورمثال انواع ایسیها و یا FPGAها یا CPLDها و… کاربرد داره شاید بارها شنیدهباشید که این پروتکل ۲۰پین رو اشغال میکنه(جای خاص خودشو داره که بحثما نیست) اما همیشه اینجورینیست بلکه فقط از ۴پین استفادهمیکنه که میخوام این ۴پین رو تشریحکنم تا دید بهتری به سختافزار داشتهباشید.
خب همونطوریکه گفتم به ۴پین نیازداریم ولی سوال چرا ۵پین در جدولبالا است؟ این پین اخری اصطلاحا به TAP CONTROLLER معروف هست.
این بخش دسترسیبه بسیاریاز توابع داخلی موجود برای تستکردن وسیله سازگار با JTAG رو فراهممیکنه.
کنترلکننده سختافزاری JTAG
برای اینکه بتونیم با یک دیوایس ارتباط برقرارکنیم لازمهکه حتما بتونیم با اون دیوایس بهلحاظ سختافزاری صحبتکنیم، خب حالا این روند به چهصورتی امکانپذیره؟
باید حتما یه درایور نصبکنیم که بتونه این ارتباط رو بین دیوایس و JTAG برقرارکنه برای اینکار هم کافیه که یک سری به سایت خود JTAG بزنید.
پینهای JTAG
خب حالا رسیدیم به اینجا که اگه خواستیم یکی درستکنیم باید چطور شمارهگذاری پینها رو انجامبدیم که به مشکل نخوریم.
- پین۲ بهصورت اختیاری میتواند به VCC متصل بشود.
- پین۳ TRST
- پینهای ۴و ۶و ۸و ۱۰و ۱۲و ۱۴و ۱۶و ۱۸و ۲۰ به گراند متصل میشوند.(مدل استاندارد که تقریبا همهجا دیدید)
- پین۵ TDI
- پین۷ TMS
- پین۹ کلاک
- پین۱۱ TCK
- پین۱۳ TDO
- پین۱۵ متصلبه مدار ریستکننده دستگاه هست.
- پینهای۱۷و ۱۹ بدوناستفاده هست.
اینم از پینها، حالا یهجا هست ما نمیخوایم از همشون استفادهکنیم اصلا به کارمون نمیاد اونجا باید چیکارکنیم؟ اگه دقتکنید بعضیاز پروگرامرها که تو بازار هم زیادن درواقع از همون ۴پینی که گفتم فقط استفاده میکنند بدوناینکه مشکلی برای ایسی پیشبیاد بههمینراحتی اینم لینک ساخت یه پروگرامر کاملا کاربردی.
پروگرام چندین ایسی توسط JTAG
بزارید با یه مثال توضیحبدم فرضکنید یه برد زدین روی بردتون تا ایسی متفاوت وجود داره یکی FPGA یکیدیگه STM32Fx حالا میخواید برنامههاتون رو روش پروگرامکنید اینجا ایدهای که به ذهن اکثریتما میاد اینهکه برای هرکدومشون یه سوکت پروگرام بزاریم و درنهایت بهصورتمجزا هرکدومشون رو پروگرامکنیم اما یه راهحل سادهتری هم هست که اگه از اینطریق سختافزارها رو متصلکردهباشید دیگه نیازبه استفادهاز روش اول نخواهید داشت و درنهایت توسط یه سوکت قابلیت پروگرامکردن چندین برد رو خواهید داشت.
سوالی که پیشمیاد اینکه آیا خودش بهصورت خودکار ایسیها رو میشناسه و پروگرام میکنه؟ خیر بلکه باید ازطریق نرمافزار هرکدوم از ایسیها رو مشخصکنید و درنهایت برنامه مربوطبه سختافزار رو آپلود کنید.
SWD چیست؟
SWD مخفف Serial wire debugging هست بهعبارت سادهتر یه روش هست برای پروگرام و دیباگکردن تراشههای ARM Cortex. یهوقت با JTAG اشتباه نگیرید.
از SWD درحالحاضر برای پروگرام و دیباگ تراشههای ARM Cortex استفادهمیشه یعنی اینکه یهوقت برندارید به FPGA وصلکنید بعد توقعداشتهباشید FPGA باهاش پروگرامشه خلاصه از من گفتن بود.
رابط بین SWD و تراشه
وقتی میگیم که SWD درحالحاضر میتونه ARM Cortex رو پشتیبانی کنه حتما یه خبرایی توی خود نرمافزار و سختافزارش هست. SWD شامل ۳پین به نامهای SWDIO و SWDCLK و RESET و البته یه پین دیگه بهنام GND هست که ازطریق این پینها میتونیم با تراشه موردنظرمون ارتباط برقرارکنیم بهجرات میتونم بگم هر سختافزاری که درستکنید و یا بخرید که این پینها رو داشتهباشه بهراحتی میتونید سختافزارتون رو راهاندازی کنید( این ازلحاظ سختافزاریش)
خب حالا چطور میشه که فرایند پروگرام روی تراشه صورت میگیره؟
بهسادگی، دقیقا نرمافزارهایی که کار آپلود کد رو میکنند بخشی به اسم SWD دارند بهطورمثال برای ایسیهای شرکتST، نرمافزار و سختافزاری هست بهنام STLINK که دقیقا همین قابلیت پروگرام و دیباگ رو به شما میده البته همونطوری که گفتم برای اینکار حتما نیازبه نصب درایور دارید پس لطفا این درایور رو جدی بگیرید. (دوحالت داره یکی اینکه اگه متصلبه اینترنت باشه خودش نصبمیشه یا باید نرمافزارش رو دانلودشکنید)
اینم لینک ساخت پروگرامر
JLINK
حالا یه وقت هست دوس دارید یه دستگاهی بخرید که هم بتونه از SWD و هم از JTAG پشتیبانیکنه که مجبور نشید برای هرنوع تراشهی خاصی از پروگرامرخاص خودش استفادهکنید که توی این مواقع پیشنهادی که برای شما دارم خرید JLINK هست که توی بازار هم دقیقا با همین اسم معروفه که دارای ورژنهای متفاوتیه.
اگر زمانیکه از Jlink استفاده میکنید دچارمشکل شدید توصیهمیکنم اینجا کلیککنید.
نتیجهگیری
- SWD درحالحاضر برای پروگرام و دیباگ ARMهای سری CORTEX استفادهمیشه.
- SWD تنها از ۳سیم برای پروگرام و دیباگ استفادهمیکنه که به SWDIO و SWDCLK و RESET معروف هستند .
- SWD ازلحاظ هزینه مقرونبهصرفه است.
- سرعت SWD حدودا به 50Mhz میرسه
- JTAG صرفا برای پروگرام و دیباگ ARMها نیست بلکه میشه گفت تقریبا برای تمامی ایسیها و FPGAها و CPLD و ASICها استفادهمیشه و یا بهعبارتبهتر میشه گفت هرنوع تراشه دیجیتال رو میتونه پروگرامکنه.
- JTAG برای پروگرام و دیباگکردن از ۴سیم استفادهمیکنه.
- JTAG ازلحاظ هزینه نسبتبه SWD مقداری گرونتره اما کاربردیتره.
- JTAG قابلیت پروگرام و دیباگ چندین ایسی رو بهصورت سری داره که این قابلیت توی SWD امکانپذیر نیست.
- JTAG ازلحاظ ساخت قدیمیتر از SWD هست و خانوادههای ARM7 و ARM9 رو شامل میشه که SWD این امکان رو نداره.
سرعت JTAG حدودا به ۱۰۰Mhz میرسه - تنها نقطه ضعفی که میشه از JTAG گرفت، اینکه بگیم پایههای مورداستفادش بیشتراز SWD هست همین و بس.
با ما همراه باشید.
منبع: سیسوگ