شاید برای خیلی از شما هایی که الکترونیکی هستید این سوال پیش اومده باشه که تفاوت SWD و JTAG چیه؟ در نگاه اول شاید فکر کنید خیلی تفاوت چندانی نداره و یا اینکه حالا چه فرقی میکنه از SWD یا JTAG استفاده کرد مهم اینکه با جفتشون میشه ایسی رو پروگرام کرد و عملیات دیباگ رو انجام داد. اما همیشه به همین سادگی نیست گاهی نیاز میشه که خودتون یه پروگرامر درست کنید.
کی به نظرتون نیاز میشه؟ فرض کنید یه پروژه میخواین انجام بدین که با FPGA هست و حالا خودتون هم باید براش پروگرامر درست کنید اونجاست که دیگه نمیدونید واقعا چیکار کنید.
این مقاله رو هم دقیقا برای همین نوشتم که اول تفاوت و عملکردشون رو بدونید تا اگه خواستید یه پروگرامر با هزینه کمتر درست کنید. البته لینک ساختش رو گذاشتم که بعد از خوندن این مقاله هیچ جوره توی پروژهاتون از لحاظ پروگرام کد نمونید.
JTAG
از این پروتکل برای پروگرام کردن هر نوع تراشه ای به صورت کلی استفاده میشه. به طور مثال انواع ایسی ها و یا FPGA ها یا CPLD ها و … کاربرد داره شاید بارها شنیده باشید که این پروتکل 20 پین رو اشغال میکنه (جای خاص خودشو داره که بحث ما نیست) اما همیشه اینجوری نیست بلکه فقط از 4 پین استفاده میکنه که میخوام این 4 پین رو تشریح کنم تا دید بهتری به سخت افزار داشته باشید.
خب همونطوری که گفتم به 4 پین نیاز داریم ولی سوال چرا 5 پین در جدول بالا است؟ این پین اخری اصطلاحا به TAP CONTROLLER معروف هست.
این بخش دسترسی به بسیاری از توابع داخلی موجود برای تست کردن وسیله سازگار با JTAG رو فراهم میکنه.
کنترل کننده سخت افزاری JTAG
برای اینکه بتونیم با یک دیوایس ارتباط برقرار کنیم لازمه که حتما بتونیم با اون دیوایس به لحاظ سخت افزاری صحبت کنیم، خب حالا این روند به چه صورتی امکان پذیره؟
باید حتما یه درایور نصب کنیم که بتونه این ارتباط رو بین دیوایس و JTAG برقرار کنه برای این کار هم کافیه که یه سری به سایت خود JTAG بزنید.
پین های JTAG
خب حالا رسیدیم به اینجا که اگه خواستیم یکی درست کنیم باید چطور شماره گذاری پین ها رو انجام بدیم که به مشکل نخوریم.
پین 2 به صورت اختیاری میتواند به VCC متصل بشود.
پین 3 TRST
پین های 4 و 6 و 8 و 10 و 12 و 14 و 16 و 18 و 20 به گراند متصل می شوند.(مدل استاندارد که تقریبا همه جا دیدید)
پین 5 TDI
پین 7 TMS
پین 9 کلاک
پین 11 TCK
پین 13 TDO
پین 15 متصل به مدار ریست کننده دستگاه هست.
پین های 17 و 19 بدون استفاده هست.
اینم از پین ها، حالا یه جا هست ما نمیخوایم از همشون استفاده کنیم اصلا به کارمون نمیاد اونجا باید چیکار کنیم؟ اگه دقت کنید بعضی از پروگرامرها که تو بازار هم زیادن در واقع از همون 4 پینی که گفتم فقط استفاده می کنند بدون اینکه مشکلی برای ایسی پیش بیاد به همین راحتی اینم لینک ساخت یه پروگرامر کاملا کاربری.
پروگرام چندین ایسی توسط JTAG
بزارید با یه مثال توضیح بدم فرض کنید یه برد زدین روی بردتون دو تا ایسی متفاوت وجود داره یکی FPGA یکی دیگه STM32Fx حالا میخواید برنامه هاتون رو روش پروگرام کنید اینجا ایده ای که به ذهن اکثریت ما میاد اینکه برای هرکدومشون یه سوکت پروگرام بزاریم و در نهایت به صورت مجزا هر کدومشون رو پروگرام کنیم اما یه راه حل ساده تری هم هست که اگه از این طریق سخت افزاها رو متصل کرده باشید دیگه نیاز به استفاده از روش اول نخواهید داشت و در نهایت توسط یه سوکت قابلیت پروگرام کردن چندین برد رو خواهید داشت.
سوالی که پیش میاد اینکه آیا خودش به صورت خودکار ایسی ها رو میشناسه و پروگرام میکنه؟ خیر بلکه باید از طریق نرم افزار هر کدوم از ایسی ها رو مشخص کنید و در نهایت برنامه مربوط به سخت افزار رو آپلود کنید.
SWD چیست؟
SWD مخفف Serial wire debugging هست به عبارت ساده تر یه روشه برای پروگرام و دیباگ کردن تراشه های ARM Cortex. یه وقت با JTAG اشتباه نگیرید.
از SWD در حال حاضر برای پروگرام و دیباگ تراشه های ARM Cortex استفاده میشه یعنی اینکه یه وقت برندارید به FPGA وصل کنید بعد توقع داشته باشید FPGA باهاش پروگرام شه خلاصه از من گفتن بود.
رابط بین SWD و تراشه
وقتی میگیم که SWD در حال حاضر میتونه ARM Cortex رو پشتیبانی کنه حتما یه خبرایی توی خود نرم افزار و سخت افزارش هست.
SWD شامل 3 پین به نام های SWDIO و SWDCLK و RESET و البته یه پین دیگه به نام GND هست که از طریق این پین ها میتونیم با تراشه مورد نظرمون ارتباط برقرار کنیم به جرات میتونم بگم هر سخت افزاری که درست کنید و یا بخرید که این پین ها رو داشته باشه به راحتی میتونید سخت افزارتون رو راه اندازی کنید( این از لحاظ سخت افزاریش)
خب حالا چطور میشه که فرایند پروگرام روی تراشه صورت میگیره؟
به سادگی، دقیقا نرم افزار هایی که کار آپلود کد رو میکنند بخشی به اسم SWD دارند به طور مثال برای ایسی های شرکت ST، نرم افزار و سخت افزاری هست به نام STLINK که دقیقا همین قابلیت پروگرام و دیباگ رو به شما میده البته همونطوری که گفتم برای این کار حتما نیاز به نصب درایور دارید پس لطفا این درایور رو جدی بگیرید.
(دو حالت داره یکی اینکه اگه متصل به اینترنت باشه خودش نصب میشه یا باید نرم افزارش رو دانلودش کنید)
حالا یه وقت هست دوس دارید یه دستگاهی بخرید که هم بتونه از SWD و هم از JTAG پشتیبانی کنه که مجبور نشید برای هر نوع تراشه خاصی از پروگرامر خاص خودش استفاده کنید که توی این مواقع پیشنهادی که برای شما دارم خرید JLINK هست که توی بازار هم دقیقا با همین اسم معروفه که دارای ورژن های متفاوتیه.
اگر زمانیکه از Jlink استفاده میکنید دچار مشکل شدید توصیه میکنم اینجا کلیک کنید
نتیجه گیری
SWD در حال حاضر برای پروگرام و دیباگ ARM های سری CORTEX استفاده میشه.
SWD تنها از سه سیم برای پروگرام و دیباگ استفاده میکنه که به SWDIO و SWDCLK و RESET معروف هستند .
SWD از لحاظ هزینه مقرون به صرفه است.
سرعت SWD حدودا به 50Mhz میرسه
JTAG صرفا برای پروگرام و دیباگ ARM ها نیست بلکه میشه گفت تقریبا برای تمامی ایسی ها و FPGA ها و CPLD و ASIC ها استفاده میشه و یا به عبارت بهتر میشه گفت هر نوع تراشه دیجیتال رو میتونه پروگرام کنه.
JTAG برای پروگرام و دیباگ کردن از 4 سیم استفاده میکنه.
JTAG از لحاظ هزینه نسبت به SWD مقداری گرونتره اما کاربردیتره.
JTAG قابلیت پروگرام و دیباگ چندین ایسی رو به صورت سری داره که این قابلیت توی SWD امکان پذیر نیست.
JTAG از لحاظ ساخت قدمی تر از SWD هست و خانواده های ARM7 و ARM9 رو شامل میشه که SWD این امکان رو نداره.
سرعت JTAG حدودا به 100Mhz میرسه
تنها نقطه ضعفی که میشه از JTAG گرفت، اینکه بگیم پایه های مورد استفادش بیشتر از SWD هست همین و بس.
سلام. مقاله عالی بود.
یک سوال.
اگه ما با JTAG بیایم با پروتکل JTAG یعنی روش پین هدر 2*10 برنامه ریزی کنیم میکرو، روش برنامه ریزیش و نرم افزارش تو کامپیوتر اون موقع فرق پیدا می کنه که بیایم به روش SWD یعنی فقط با 5 تا پین برنامه ریزی کنیم میکرو؟
سلام دوست عزیز – جواب این سوال هم بله هم خیر ! ولی بیشتر خیر
ببینید پروتکل جیتگ یه پروتکل ارتباطی است که توسط این پروگرامر نیز پشتیبانی میشه ولی مساله اصلی اینه که شما باید بدونید چه دستور هایی رو برای برقرار ارتباط با چیپ مورد نظر باید استفاده کنید (توی داکیومنت های چیپ احتمالا بشه پیداشون کرد) که برای سهولت کار شرکت segger نرم افزاری رو ارائه کرده که یه سری آیسی رو پشتیبانی میکنه – حالا اگر ایسی مورد نظر شما توی اون نرم افزار نبود خودتون باید تمام جزییات کانکت شدن رو در بیارید که کار ساده ای نیست
در مورد fpga فکر میکنم برای خوندن بیت فایل لازمه آیسی فلش کنار fpga رو بخونید و حتی نیازی به جی تگ نداشته باشید
اما احتمالا حافظه dsp رو قفل کرده باشند و امکان خودنش رو نداشته باشه
خوب بسیار عالی
ما قبلا تو سیسوگ مدار و نحوه ساخت یه پروگرامر رو گذاشتم که هم میتونید با استفاده از اون آیسی های فلش رو بخونید هم آیسی های eeprom رو -به لینک زیر سر بزنید https://8bi.ir/x6k6q
ممنون ولی پروگرامر که گذاشتین EEPROM منو ساپورت نمی کنه به هر صورت ممنون آی سی من cat25c256 هست اگه چیزی پیشنهاد داشتین واسه پروگرامش بهم بگید ممنون میشم.
0
زئوس Zeus
۲۳ اردیبهشت ۱۳۹۹
من گمان میکنم پشتیبانی میکنه !
با توجه به این که spi هست 🙂
0
علیرضا
۷ اردیبهشت ۱۳۹۹
سلام با تشکر از مطالب خوبتون…یه سوال داشتم من یه برد دارم که روی اون یک DSP(texas و یک FPGA و یک MEMORY دارم که پایه های جی تگشون روی برد اومده بیرون می خواستم ببینم این هارو میشه با پروگرامر جی تگ دیباگ کرد؟
ممنون
سلام مهندس من درحال حاظر 100تا برد دارم که برروی هرکدوم دو میکروکنترلرAVRدارم الان باTNM2000برا هرمیکرو که یه سوکت جداگانه قرار دادم (و پایه های MISO MOSI,..به سوکت متصله )پروگرام میکنم که خیلی زمانبر هسش
تو بخش “پروگرام چندین ایسی توسط JTAG” که تو مطالب گفتید میشه دقیق تر بگید که تو این حالت چندتا میکرو رو میشه همزمان پروگرام کرد؟(نمیدونم اصن من درست اون قسمت رو متوجه شدم یا نه!!تو حالت چند ایسی اگر به اون صورت که گفتید میکروهای مثلا مگا128 رو بهم وصل کنیم همه اونا همزمان پروگرام میشن؟؟)
سلام و درود دوست عزیز
بله درست متوجه شدید ؛ شما میتونید دقیقا چند چیپ مختلف رو با استفاده از رابط Jtag پروگرام کنید ؛ حتی نیاز نیست نوع چیپ ها هم مثل هم باشه ؛ یکی میتونه CPLD باشه یکی ARM و دیگری AVR 🙂
روی تعداد تا اونجا که اطلاع دارم محدودیتی وجود نداره , خودم با 3 چیپ چک کردم مشکلی نداشتم.
تست میکنم اگه بشه خیلی عالی میشه کلی تو وقتم صرفه جویی میشه
باید امروز یه برنامه ساده رو بنویسم تست کنم خبرشو میدم
( فقط من از دوتا میکروی یکسان مگا32 میخوام استفاده کنم یه برنامه چشمک زن بنویسم)
فقط من سایت jtag رفتم درایوری ندیدم میشه این مورد رو راهنمایی کنید
بعد تو قسمت”پین های jtag” که گفتید پایه های 1 و 7 بدون استفاده اس منظورتون چی بود؟ تو عکس که پایه 1 بهvcc و پایه 7 به tms وصله
فقط همین الان پروگرامر stk500 رو دارم که نمیدونم از jtag پشتیبانی میکنه یا نه؟! خودمم تو نت چک میکنم
سلام پایه TMS پایه مهمی هست برای Jtag و نمیتونه بلا استفاده باشه ؛ متن رو باید اصلاح کنم فکر میکنم
اما در خصوص stk500 مطمئن نیستم که آیا jtag رو پشتیبانی میکنه یا نه ولی فکر میکنم مدل های خاصی هست که پشتیبانی میکنن Jtag رو
حالت SWD یه پایه دیگه هم داره برای مانیتور کردن میکرو معروفه به Trace
من هم یه پروگرمر SWD چهار سیمه داشتم ولی یه لینک پیدا کردم که هکش کردم و پایه پنجم یعنی Trace رو ازش بیرون کشیدم
ممنون بابت مطلب خوبتون
ریموت کنترل امروزه کاربرد زیادی پیدا کرده است؛ از ریموتهای درب بازکن تا ریموتهای دزدگیر و کنترل روشنایی همه از یک اصول اولیه پیروی میکنند و آنهم ارسال اطلاعات بهصورت بیسیم است....
امنیت همیشه و در همهی اعصار، مقولهی مهم و قابلتوجه ای بوده و همیشه نوع بشر به دنبال امنیت بیشتر، دست به ابداعات و اختراعات گوناگونی زده است. ریموت کنترل یکی از این اختراعات است. در این مقاله، به بررسی امنیت انواع ریموتهای کنترل خواهیم پرداخت....
سلام خوب هستید؟ میگن swd نسبت به jtag برنامه ریزیش سختره. من متوجه نشدم این تفاوت یا سختیش چیه؟ میشه اینو بگید منظورش چی بود؟
سلام و درود
منم متوجه نشم یعنی چی برنامه ریزیش سخت تره، این حرف معنی خاصی نمیده
هر دو رابطی هستن برای پروگرام کردن و دیباگ کردن چیپ های مختلف
سلام. مقاله عالی بود.
یک سوال.
اگه ما با JTAG بیایم با پروتکل JTAG یعنی روش پین هدر 2*10 برنامه ریزی کنیم میکرو، روش برنامه ریزیش و نرم افزارش تو کامپیوتر اون موقع فرق پیدا می کنه که بیایم به روش SWD یعنی فقط با 5 تا پین برنامه ریزی کنیم میکرو؟
سلام دوست عزیز
نه واقعا هیچ فرقی نمیکنه و در نهایت هر دو یک کار رو انجام میدن
سلام
میشه از jlink برای پروگرم کردن هر ایسی که از پروتکل جی تگ پشتیبانی میکند استفاده کرد مثلا emmc موبایل؟
سلام دوست عزیز – جواب این سوال هم بله هم خیر ! ولی بیشتر خیر
ببینید پروتکل جیتگ یه پروتکل ارتباطی است که توسط این پروگرامر نیز پشتیبانی میشه ولی مساله اصلی اینه که شما باید بدونید چه دستور هایی رو برای برقرار ارتباط با چیپ مورد نظر باید استفاده کنید (توی داکیومنت های چیپ احتمالا بشه پیداشون کرد) که برای سهولت کار شرکت segger نرم افزاری رو ارائه کرده که یه سری آیسی رو پشتیبانی میکنه – حالا اگر ایسی مورد نظر شما توی اون نرم افزار نبود خودتون باید تمام جزییات کانکت شدن رو در بیارید که کار ساده ای نیست
مفيد و مختصر ممنون
خيلى آلى متشكر م به من كمك كرديد
خواهش میکنم
قسمت توضیح پین ها ، شماره های توضیح داده شده با شماره های مدار پورت jtag متفاوت هست و اشتباه نوشته شده،تصحیح کنید
سلام دوست عزیز
متشکرم برای تذکرتون – مطلب اصلاح شد
البته فقط پایه های جی تگ dsp و fpga روی برد هست ولی می خوام کدهاشونو بخونم اگه لطف کنید یه راهنمایی در خصوص خرید پروگرمر کنید ممنون میشم
در مورد fpga فکر میکنم برای خوندن بیت فایل لازمه آیسی فلش کنار fpga رو بخونید و حتی نیازی به جی تگ نداشته باشید
اما احتمالا حافظه dsp رو قفل کرده باشند و امکان خودنش رو نداشته باشه
حالا چون برد قدیمی هست فرض بر این گذاشتیم که قفل نشده باشه چجوری باید حافظه روی eeprom رو بخونم تاحالا با فلش و مموری کار نکردم…ممنون
خوب بسیار عالی
ما قبلا تو سیسوگ مدار و نحوه ساخت یه پروگرامر رو گذاشتم که هم میتونید با استفاده از اون آیسی های فلش رو بخونید هم آیسی های eeprom رو -به لینک زیر سر بزنید
https://8bi.ir/x6k6q
ممنون ولی پروگرامر که گذاشتین EEPROM منو ساپورت نمی کنه به هر صورت ممنون آی سی من cat25c256 هست اگه چیزی پیشنهاد داشتین واسه پروگرامش بهم بگید ممنون میشم.
من گمان میکنم پشتیبانی میکنه !
با توجه به این که spi هست 🙂
سلام با تشکر از مطالب خوبتون…یه سوال داشتم من یه برد دارم که روی اون یک DSP(texas و یک FPGA و یک MEMORY دارم که پایه های جی تگشون روی برد اومده بیرون می خواستم ببینم این هارو میشه با پروگرامر جی تگ دیباگ کرد؟
ممنون
دیباگ رو احتمالا میتونید انجام بدید ولی نه برای fpga
سلام مهندس من درحال حاظر 100تا برد دارم که برروی هرکدوم دو میکروکنترلرAVRدارم الان باTNM2000برا هرمیکرو که یه سوکت جداگانه قرار دادم (و پایه های MISO MOSI,..به سوکت متصله )پروگرام میکنم که خیلی زمانبر هسش
تو بخش “پروگرام چندین ایسی توسط JTAG” که تو مطالب گفتید میشه دقیق تر بگید که تو این حالت چندتا میکرو رو میشه همزمان پروگرام کرد؟(نمیدونم اصن من درست اون قسمت رو متوجه شدم یا نه!!تو حالت چند ایسی اگر به اون صورت که گفتید میکروهای مثلا مگا128 رو بهم وصل کنیم همه اونا همزمان پروگرام میشن؟؟)
سلام و درود دوست عزیز
بله درست متوجه شدید ؛ شما میتونید دقیقا چند چیپ مختلف رو با استفاده از رابط Jtag پروگرام کنید ؛ حتی نیاز نیست نوع چیپ ها هم مثل هم باشه ؛ یکی میتونه CPLD باشه یکی ARM و دیگری AVR 🙂
روی تعداد تا اونجا که اطلاع دارم محدودیتی وجود نداره , خودم با 3 چیپ چک کردم مشکلی نداشتم.
تست میکنم اگه بشه خیلی عالی میشه کلی تو وقتم صرفه جویی میشه
باید امروز یه برنامه ساده رو بنویسم تست کنم خبرشو میدم
( فقط من از دوتا میکروی یکسان مگا32 میخوام استفاده کنم یه برنامه چشمک زن بنویسم)
فقط من سایت jtag رفتم درایوری ندیدم میشه این مورد رو راهنمایی کنید
بعد تو قسمت”پین های jtag” که گفتید پایه های 1 و 7 بدون استفاده اس منظورتون چی بود؟ تو عکس که پایه 1 بهvcc و پایه 7 به tms وصله
فقط همین الان پروگرامر stk500 رو دارم که نمیدونم از jtag پشتیبانی میکنه یا نه؟! خودمم تو نت چک میکنم
سلام پایه TMS پایه مهمی هست برای Jtag و نمیتونه بلا استفاده باشه ؛ متن رو باید اصلاح کنم فکر میکنم
اما در خصوص stk500 مطمئن نیستم که آیا jtag رو پشتیبانی میکنه یا نه ولی فکر میکنم مدل های خاصی هست که پشتیبانی میکنن Jtag رو
حالت SWD یه پایه دیگه هم داره برای مانیتور کردن میکرو معروفه به Trace
من هم یه پروگرمر SWD چهار سیمه داشتم ولی یه لینک پیدا کردم که هکش کردم و پایه پنجم یعنی Trace رو ازش بیرون کشیدم
ممنون بابت مطلب خوبتون
خواهش میکنم دوست عزیز
نظر لطفتونه
ممنون عالی بود مدتی بود میخواستم تو سایت های خارجی این مطلب رو پیدا کنم اولا که وقتش نبود دوما فکر نکنم به این کاملی مطلبی پیدا میکردم.