میکروکنترلر ARM را چطور پروگرام کنیم؟

0
176
ARM
ARM

میکروکنترلرARM یکی‌از محبوب‌ترین میکروکنترلرهای موجود بازار ایران و حتی جهان است، میکروکنترلر و پردازنده‌ای که گجت‌های الکترونیکی را متحول‌کرده‌است؛ شرکت‌های زیادی دست‌به تولید میکروکنترلر خود بااستفاده‌از معماریARM زده‌اند، شرکت‌های بزرگی چون TI یا NXP یا ST و…؛ اما چیزی‌که روشن‌است فراگیری میکروکنترلرهای شرکتST در ایران است که با نام STM32 شناخته‌می‌شود!

قبلا به آموزش نحوه‌ی برنامه‌نویسی میکروکنترلرهای STM32 پرداختیم. در این آموزش بررسی‌خواهیم‌کرد که از چه روش‌هایی میتوان میکروکنترلر ARM را برنامه‌ریزی(پروگرام)کرد. برای آموزش از میکروکنترلر STM32F103RET6 استفاده‌خواهیم‌کرد.

روش‌های ذکرشده روش عمومی هستند و به‌سادگی برای انواع دیگر اینگونه میکروکنترلر قابل‌تکرار و استفاده است.

 

همانطورکه می‌دانید، چندراه برای پروگرام‌کردن میکروکنترلرARM وجود دارد. راهی‌که بین همه‌ی خانواده‌های ARM مشترک است، استفاده‌از رابط Jtag یا SWD است، رابط Jtag مقداری قدیمی است و در خانواده‌های ARM7 ، ARM9 معمولا مورداستفاده قرار میگیرد. Jtag یک رابط استاندارد است که جهت پروگرام و خطایابی چیپ‌های مختلفی مورداستفاده قرار میگیرد؛ یکی‌از معایب موجود در رابط Jtag تعداد پایه‌ی مورداستفاده(۶پایه)است.

رابط Jtag
رابط Jtag

 

باتوجه‌به رشد تکنولوژی و کوچکترشدن چیپ‌ها و بردهای الکترونیکی اختصاص این تعداد پایه برای برنامه‌ریزی میکروکنترلر مقداری نامعقول می‌شود، پس در خانواده‌های جدید یعنی سری Cortex علاوه‌بر رابط Jtag به‌صورت موازی رابط‌دیگری به‌نام SWD تعبیه‌شد که قادربه پروگرام و دیباگ چیپ است. رابط SWD، که درواقع مخفف عبارت serial wire debug است، تنها نیازبه ۲پایه برای برنامه‌ریزی و پروگرام چیپ دارد.

serial wire debug
serial wire debug

 

البته همچنان رابط Jtag برروی چیپ‌های جدید، دردسترس است (مگر چیپ‌هایی که تعداد پایه‌ی لازم را نداشته‌باشند)، یکی‌از مزایای Jtag، اتصال چند چیپ به یک رابط است، بدین‌شکل که اگر برروی یک برد دو یا چند پردازنده قرارداشته‌باشد، برای برنامه‌ریزی و دیباگ هریک از آنها نیاز نیست یک رابط جداگانه درنظر گرفته‌شود و امکان اتصال سریال چند پردازنده به یک رابط Jtag فراهم‌است، این امکان در ربط SWD دردسترس نیست.

اتصال سریال چند پردازنده به یک رابط Jtag
اتصال سریال چند پردازنده به یک رابط Jtag

 

به غیراز رابط‌های استاندارد توضیح‌داده‌شده، شرکت‌های مختلف، روش‌های ثانویه‌ای را دردسترس قرارداده‌اند ، به‌عنوان نمونه اغلب چیپ‌های تولید NXP و STM امکان برنامه‌ریزی‌شدن ازطریق پورت سریال را دارا می‌باشد. یا میکروکنترلرهای SAM محصول شرکت Atmel امکان برنامه‌ریزی ازطریق USB را دارا میباشند. درواقع شرکت‌های تولیدکننده یک برنامه بوت‌لودر منحصربه‌خود را درون حافظه‌ای(غیرقابل پاک‌شدن) در چیپ بارگذاری کرده‌اند که با دستور‌العملی(توضیح‌داده‌شده در منوال چیپ) خاص توسط پردازنده فراخوانی و اجرا می‌شود، بوت لودر موصوف این امکان را میدهد که بدون داشتن یک پروگرامر گران‌قیمت و بااستفاده‌از یک رابط سریال(Uart) یا USB میکروکنترلر را برنامه‌ریزی کنید.

این حافظه غیرقابل پاک‌شدن است پس نگران پاک‌شدن آن درهنگام برنامه‌ریزی چیپ نباشید.

 

Boot Rom
Boot Rom

 

پروگرام‌کردن میکروکنترلر ARM ازطریق رابط SWD

برای پروگرام‌کردن ازطریق رابط SWD نیاز است که ابتدا پروگرامر موردنظر این رابط را دراختیار داشته‌باشید. بااستفاده‌از این رابط قادرخواهیدبود علاوه‌بر پروگرام‌کردن برد، برنامه نوشته‌شده را دیباگ نمایید.
تعداد پروگرامرهایی که رابط SWD را پشتیبانی می‌کنند زیاد هستند و به‌راحتی می‌توان از همه آنها استفاده‌کرد، ولی آنچه عمومیت بیشتری بین کاربران ایرانی دارد، پروگرامر J-Link محصول شرکت Segger است. پروگرامر J-Link درواقع یک پروگرامر حرفه‌ای میباشد که قادربه پشتیبانی طیف گسترده‌ای از پردازنده‌ها است و از رابط‌های Jtag و SWD به‌خوبی پشتیبانی میکند. این آموزش بااستفاده‌از J-Link V8 و نرم‌افزار J-Flash V6.14 تهیه‌شده‌است و ممکن‌است در ورژن‌های دیگر سخت‌افزار و نرم‌افزار، جزییات مقداری متفاوت باشند.

بخش اول اتصالات میکروکنترلر ARM

پروگرامر J-Link از یک استاندارد ۲۰سیمه برای میکروکنترلرARM استفاده میکند درصورتی‌که ما برای رابط SWD یک کانکتور ۵سیمه داریم، خوب همانطورکه قبلا توضیح‌دادیم SWD یک رابط سریال است که نیازی‌به تعداد سیم زیاد ندارد و تنها با دو رشته سیم میتواند به‌درستی کار کند. برای شروع‌بهتر است پایه‌های مورداستفاده را بررسی‌کنیم.

 اتصالات میکروکنترلر ARM
اتصالات میکروکنترلر ARM

 

زمین اولین پایه‌ی مورداستفاده است که وجودش حتمی است، پایه بعدی درواقع تغذیه میکروکنترلر است، پروگرامر Segger برای پروگرام‌کردن نیاز دارد که ولتاژکاری پردازنده را تشخیص‌دهد تا منطق درست را برای سطح سیگنال درنظر بگیرد(بین ۱.۸ تا ۳.۳ولت)؛ بعداز آن پایه Reset ، وجود این پایه الزامی نیست، و میتوان آنرا متصل‌نکرد ولی اگر به‌دلیلی رابط SWD را غیرفعال کرده‌باشیم(مثلا ریمپ‌کردن پایه‌ها)، تنها بااستفاده‌از این پایه میتوان مجددا رابط SWD را فعال‌کرد. دو پایه دیگر هم پایه‌های مربوط‌به خود رابط SWD است و باید به‌صورت یک‌به‌یک متصل‌شوند. اما کانکتور موجود روی پروگرامر J-Link یک کانکتور ۲۰پایه است، اما چطور باید این دو کانکتور را بهم متصل‌نماییم، خیلی‌ساده است، در تصویرزیر نحوه‌ی اتصال را مشخص کرده‌ام:

Jtag SWD Connector
Jtag SWD Connector

 

پایه‌های مورد‌نیاز، به رنگ نارنجی مشخص شده‌اند، فقط دقت‌داشته‌باشید که پایه VCC باید به پایه‌ی ۱ متصل‌باشد و پایه SWO، مورداستفاده قرارنگرفته است.

نرم‌افزار J-Flash

برای استفاده‌از نرم‌افزار، تنظیمات آنرا گام‌به‌گام باتوجه‌ه عکس‌های زیر انجام میدهیم ابتدا یک پروژه جدید تعریف میکنم:

ایجاد پروژه
ایجاد پروژه

 

در پنجره‌ی بازشده نوع میکروکنترلر ARM را انتخاب میکنیم:

انتخاب نوع میکروکنترلر ARM
انتخاب نوع میکروکنترلر ARM

 

در لیست بازشده، ابتدا شرکت ST را انتخاب میکنیم:

انتخاب شرکت ST
انتخاب شرکت ST

 

بعد در لیست زیرین به‌دنبال گزینه STM32F103RE بگردید و آنرا انتخاب‌کنید:

انتخاب STM32F103RE
انتخاب STM32F103RE

 

در پنجره پروژه، نوع پروتکل را برروی SWD قراردهید و دکمه OK رو بزنید:

انتخاب نوع پروتکل
انتخاب نوع پروتکل

 

در پنجره نرم‌افزار J-Flash منویی سمت چپ وجود دارد که توضیحات و تنظیمات مربوط‌به پروژه جاری را نمایش میدهد، دقت‌داشته‌باشید که تنظیمات مربوطه مشابه تصویر زیر باشد:

نرم‌افزار J-Flash
نرم‌افزار J-Flash

 

بعداز منوی فایل، زیر منوی Open data File ، فایل Hex موجود در فایل‌های پروژه را انتخاب‌کنید.

انتخاب فایل Hex
انتخاب فایل Hex

 

برای پروگرام‌کردن برنامه کافیه که کلید F6 روی کیبورد را فشاردهید یا از منوی Target زیر منوی Manual Programming را انتخاب و سپس گزینه Program & Verify را انتخاب‌کنید:

پروگرام‌کردن برنامه
پروگرام‌کردن برنامه

 

 

منبع: سیسوگ

برای این مقاله نظر بگذارید:

لطفا دیدگاه خود را بنویسید
لطفا نام خود را وارد کنید