میکروکنترلر ARM یکی از محبوب ترین میکروکنترلر های موجود بازار ایران و حتی جهان است ، میکروکنترلر و پردازنده ای که گجتهای الکترونیکی را متحول کرده است ؛ شرکت های زیادی دست به تولید میکروکنترلر خود با استفاده از معماری ARM زده اند ، شرکت های بزرگی چون TI یا NXP یا ST و…. ؛ اما چیزی که روشن است فراگیری میکروکنترلر های شرکت ST در ایران است که با نام STM32 شناخته میشود! قبلا در سیسوگ به آموزش نحوه برنامه نویسی میکروکنترلرهای STM32 پرداختیم. در این آموزش بررسی خواهیم کرد که از چه روش هایی میتوان میکروکنترلر ARM را برنامه ریزی (پروگرام) کرد. برای آموزش از میکروکنترلر STM32F103RET6 استفاده خواهیم کرد.
همانطور که میدانید ، چند راه برای پروگرام کردن میکروکنترلر ARM وجود دارد. راهی که بین همه خانواده های ARM مشترک است، استفاده از رابط Jtag یا SWD است ، رابط Jtag مقداری قدیمی است و در خانواده های ARM7 ، ARM9 معمولا مورد استفاده قرار می گیرد. Jtag یک رابط استاندارد است که جهت پروگرام و خطایابی چیپ های مختلفی مورد استفاده قرار می گیرد ؛ یکی از معایب موجود در رابط Jtag تعداد پایه مورد استفاده (6 پایه) است.
با توجه به رشد تکنولوژی و کوچک تر شدن چیپ ها و برد های الکترونیکی اختصاص این تعداد پایه برای برنامه ریزی میکروکنترلر مقداری نا معقول میشود ، پس در خانواده های جدید یعنی سری Cortex علاوه بر رابط Jtag به صورت موازی رابط دیگری به نام SWD تعبیه شد که قادر به پروگرام و دیباگ چیپ است. رابط SWD ، که در واقع مخفف عبارت serial wire debug است ، تنها نیاز به 2 پایه برای برنامه ریزی و پروگرام چیپ دارد.
البته همچنان رابط Jtag بر روی چیپ های جدید ، در دسترس است (مگر چیپ هایی که تعداد پایه لازم را نداشته باشند) ، یکی از مزایای Jtag ، اتصال چند چیپ به یک رابط است ، بدین شکل که اگر بر روی یک برد دو یا چند پردازنده قرار داشته باشد ، برای برنامه ریزی و دیباگ هر یک از آنها نیاز نیست یک رابط جداگانه در نظر گرفته شود و امکان اتصال سریال چند پردازنده به یک رابط Jtag فراهم است ، این امکان در ربط SWD در دسترس نیست.
به غیر از رابط های استاندارد توضیح داده شده ، شرکت های مختلف ، روش های ثانویه ای را در دسترس قرار داده اند ، به عنوان نمونه اغلب چیپ های تولید NXP و STM امکان برنامه ریزی شدن از طریق پورت سریال را دارا می باشد. یا میکروکنترلر های SAM محصول شرکت Atmel امکان برنامه ریزی از طریق USB را دارا می باشند.
در واقع شرکت های تولید کننده یک برنامه بوت لودر منحصر به خود را درون حافظه ای (غیر قابل پاک شدن) در چیپ بارگذاری کرده اند که با دستور العملی (توضیح داده شده در منوال چیپ) خاص توسط پردازنده فراخوانی و اجرا می شود ، بوت لودر موصوف این امکان را می دهد که بدون داشتن یک پروگرامر گران قیمت و با استفاده از یک رابط سریال ( Uart ) یا USB میکروکنترلر را برنامه ریزی کنید.
پروگرام کردن میکروکنترلر ARM از طریق رابط SWD
برای پروگرام کردن از طریق رابط SWD نیاز است که ابتدا پروگرامر مورد نظر این رابط را در اختیار داشته باشید. با استفاده از این رابط قادر خواهید بود علاوه بر پروگرام کردن برد ، برنامه نوشته شده را دیباگ نمایید.
تعداد پروگرامر هایی که رابط SWD را پشتیبانی میکنند زیاد هستند و به راحتی میتوان از همه آنها استفاده کرد ، ولی آنچه عمومیت بیشتری بین کاربران ایرانی دارد ، پروگرامر J-Link محصول شرکت Segger است. پروگرامر J-Link در واقع یک پروگرامر حرفه ای می باشد که قادر به پشتیبانی طیف گسترده ای از پردازنده ها است و از رابط های Jtag و SWD به خوبی پشتیبانی می کند. این آموزش با استفاده از J-Link V8 و نرم افزار J-Flash V6.14 تهیه شده است و ممکن است در ورژن های دیگر سخت افزار و نرم افزار ، جزییات مقداری متفاوت باشند.
بخش اول اتصالات میکروکنترلر ARM
پروگرامر J-Link از یک استاندارد 20 سیمه برای میکروکنترلر ARM استفاده می کند در صورتی که ما برای رابط SWD یک کانکتور 5 سیمه داریم ، خوب همانطور که قبلا توضیح دادیم SWD یک رابط سریال است که نیازی به تعداد سیم زیاد ندارد و تنها با دو رشته سیم می تواند به درستی کار کند. برای شروع بهتر است پایه های مورد استفاده را بررسی کنیم
زمین اولین پایه مورد استفاده است که وجودش حتمی است ، پایه بعدی در واقع تغذیه میکروکنترلر است ، پروگرامر Segger برای پروگرام کردن نیاز دارد که ولتاژ کاری پردازنده را تشخیص دهد تا منطق درست را برای سطح سیگنال در نظر بگیرد (بین 1.8 تا 3.3 ولت) ؛ بعد از آن پایه Reset ، وجود این پایه الزامی نیست ، و می توان آن را متصل نکرد ولی اگر به دلیلی رابط SWD را غیر فعال کرده باشیم (مثلا ریمپ کردن پایه ها) ، تنها با استفاده از این پایه می توان مجددا رابط SWD را فعال کرد. دو پایه دیگر هم پایه های مربوط به خود رابط SWD است و باید به صورت یک یه یک متصل شوند.
اما کانکتور موجود روی پروگرامر J-Link یک کانکتور 20 پایه است ، اما چطور باید این دو کانکتور را به هم متصل نماییم ، خیلی ساده است ، در تصویر زیر نحوه اتصال را مشخص کرده ام:
پایه های مورد نیاز ، به رنگ نارنجی مشخص شده اند ، فقط دقت داشته باشید که پایه VCC باید به پایه 1 متصل باشد و پایه SWO ، مورد استفاده فرارنگرفته است.
نرم افزار J-Flash
برای استفاده از نرم افزار ، تنظیمات آن را گام به گام با توجه به عکس های زیر انجام می دهیم
ابتدا یک پروژه جدید تعریف میکنم
در پنجره باز شده نوع میکروکنترلر ARM را انتخاب میکنیم
در لیست باز شده ، ابتدا شرکت ST را انتخاب میکنیم
بعد در لیست زیرین به دنبال گزینه STM32F103RE بگردید و آن را انتخاب کنید
در پنجره پروژه ، نوع پروتکل را بر روی SWD قرار دهید و دکمه OK رو بزنید
در پنجره نرم افزار J-Flash منویی سمت چپ وجود دارد که توضیحات و تنظیمات مربوط به پروژه جاری را نمایش می دهد ، دقت داشته باشید که تنظیمات مربوطه مشابه تصویر زیر باشد
بعد از منوی فایل ، زیر منوی Open data File ، فایل Hex موجود در فایل های پروژه را انتخاب کنید.
برای پروگرام کردن برنامه کافیه که کلید F6 روی کیبرد را فشار دهید یا از منوی Target زیر منوی Manual Programming را انتخاب و سپس گزینه Program & Verify را انتخاب کنید.
با سلام راجب تنظیمات فیوز بیت میکروکنترلر arm هم میشه توضیح بدید.واقعیت امر ما یه برد رو میکرو رو عوض کردیم و فایل هگز رو روش ریختیم ولی برد کار نمیکنه.میخواستم اگه ممکنه راهنمایی کنید با نرم افزار jflash چطور میتونم تنظیمات مربوط به فیوز بیت ها رو اعمال کنم
سلام. میکروکنترلر های arm فیوزبیت ندارند. فیوزبیت برای میکروکنترلر های avr هست.
سلام و درود فراوان
عالی بود
سلام و وقت بخیر
در مورد پروگرام کردن میکرو توسط بوت لودر از طریق حافظه فلش خارجی و نوشتن بوت لودر اختصاصی میتونین بنده رو راهمنایی کنین؟
سلام و درود بر شما
اگر مشکلتون رو مطرح کنید تا جایی که بتوانم در خدمتتون خواهم بود
سلام وقتتون بخیر
برای پروگرام کردن ARM سری Atmel چه روش هایی وجود داره؟
میتونید از رابط های jtag یا swd استفاده کنید
حتی میتوانید از stlink هم با کمک openocd استفاده کنید
سلام برایARM
Cortex-M4چه نرم افزاربرنامه نویسی پیشنهاد میکنید؟
من به شخصه از gcc استفاده میکنم ولی میتونید از keil یا iar هم استفاده کنید
نرم افزار خوب زیاد هست.
سلام با jfalsh پروگرام کردم میگه کانکت نیست میکرو connecting to cpu via connect under reset failed . میگه البته انو با توابع هال نوشتم .
یک سمپل دانلود کردم اونو با spl نوشته بودن پروگرام شد ولی این با کیل هم پروگرام نمیشه
پروگرام شدن یا نشدن میکرو اصلا کاری به این نداره که شما برنامه با چی نوشتی
باید دنبال مشکل جای دیگه بگردید.
سلام
من یه ای سی lm3s817 دارم که لاک است
برای خواندن نرم افزار ان چه پیشنهادی دارید
مرسی
خوب اگه لاک هست که نمیشه خودندش :/
اصلا برای این که نشه خوند آیسی رو لاک میکنن دیگه
ایا با تبدیل کردن پروگرمر jlink به swd میتوان به جای استفاده از jflash از طریق خود keil عمل پروگرمر کردن را انجام دهیم؟
حتی بدون تغییر به swd هم میتونید به شکل مستقیم در نرم افزار keil هم پروگرام هم آپدیت کنید.
سلام
در پروگرام کردن با st link هم پین 3.3ولت به جهت تشخیص ولتاژ کاری میکرو به کار میره؟
بعضی جاها با وصل کردن این پین به تغذیه ۳۰۳ ولت مدار بدون اینکه لازم باشه تغذیه خارجی را وصل کنم، میکرو پروگرام میشه و بعضی جاها که فکر میکنم سایر اجزا مدار جریان بیشتری میکشید، حتما لازم بود تغذیه خارجی را هم وصل کنم تا st linkمیکرو را بشناسد. با این توضیحات من همیشه فکر میکردم این پین تغذیه است که در صورت داشتن تغذیه خارجی بهتر است حتی وصل نشود تا ولتاژش با ولتاژی که توسط تغذیه خارجی ایجاد میشود تداخل نکنند.
درسته ولی در نظر داشته باشید که در برخی مدل های کلون پایه ای وجود داره که 3.3 خروجی میده یعنی برق رو تامین میکنه و باید تفاوت قائل بشید بین پایه ورودی و خروجی ولتاژ
سلام
یه پیشنهاد هم من دارم :
من خودم در یک پروژه برای اینکه فضا زیاد اشغال نشه به جای استفاده از Jtag از طریق پورت سریال و بوت لودر پروگرام کردم
یه نرم افزار هم سایت ST برای همین کار قرار داده به نام Flash Loader Demonstrator
امیدوارم کمکی کنه …
سلام
بسیار عالی ؛ البته من هم توی پروژه های زیادی از این روش استفاده کردم
البته SWD به اندازه Uart پایه لازم داره و قابلیت دیباگ هم به شما میده 🙂