میکروکنترلرARM یکیاز محبوبترین میکروکنترلرهای موجود بازار ایران و حتی جهان است، میکروکنترلر و پردازندهای که گجتهای الکترونیکی را متحولکردهاست؛ شرکتهای زیادی دستبه تولید میکروکنترلر خود بااستفادهاز معماریARM زدهاند، شرکتهای بزرگی چون TI یا NXP یا ST و…؛ اما چیزیکه روشناست فراگیری میکروکنترلرهای شرکتST در ایران است که با نام STM32 شناختهمیشود!
قبلا به آموزش نحوهی برنامهنویسی میکروکنترلرهای STM32 پرداختیم. در این آموزش بررسیخواهیمکرد که از چه روشهایی میتوان میکروکنترلر ARM را برنامهریزی(پروگرام)کرد. برای آموزش از میکروکنترلر STM32F103RET6 استفادهخواهیمکرد.
روشهای ذکرشده روش عمومی هستند و بهسادگی برای انواع دیگر اینگونه میکروکنترلر قابلتکرار و استفاده است.
همانطورکه میدانید، چندراه برای پروگرامکردن میکروکنترلرARM وجود دارد. راهیکه بین همهی خانوادههای ARM مشترک است، استفادهاز رابط Jtag یا SWD است، رابط Jtag مقداری قدیمی است و در خانوادههای ARM7 ، ARM9 معمولا مورداستفاده قرار میگیرد. Jtag یک رابط استاندارد است که جهت پروگرام و خطایابی چیپهای مختلفی مورداستفاده قرار میگیرد؛ یکیاز معایب موجود در رابط Jtag تعداد پایهی مورداستفاده(۶پایه)است.
باتوجهبه رشد تکنولوژی و کوچکترشدن چیپها و بردهای الکترونیکی اختصاص این تعداد پایه برای برنامهریزی میکروکنترلر مقداری نامعقول میشود، پس در خانوادههای جدید یعنی سری Cortex علاوهبر رابط Jtag بهصورت موازی رابطدیگری بهنام SWD تعبیهشد که قادربه پروگرام و دیباگ چیپ است. رابط SWD، که درواقع مخفف عبارت serial wire debug است، تنها نیازبه ۲پایه برای برنامهریزی و پروگرام چیپ دارد.
البته همچنان رابط 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 از یک استاندارد ۲۰سیمه برای میکروکنترلرARM استفاده میکند درصورتیکه ما برای رابط SWD یک کانکتور ۵سیمه داریم، خوب همانطورکه قبلا توضیحدادیم SWD یک رابط سریال است که نیازیبه تعداد سیم زیاد ندارد و تنها با دو رشته سیم میتواند بهدرستی کار کند. برای شروعبهتر است پایههای مورداستفاده را بررسیکنیم.
زمین اولین پایهی مورداستفاده است که وجودش حتمی است، پایه بعدی درواقع تغذیه میکروکنترلر است، پروگرامر Segger برای پروگرامکردن نیاز دارد که ولتاژکاری پردازنده را تشخیصدهد تا منطق درست را برای سطح سیگنال درنظر بگیرد(بین ۱.۸ تا ۳.۳ولت)؛ بعداز آن پایه Reset ، وجود این پایه الزامی نیست، و میتوان آنرا متصلنکرد ولی اگر بهدلیلی رابط SWD را غیرفعال کردهباشیم(مثلا ریمپکردن پایهها)، تنها بااستفادهاز این پایه میتوان مجددا رابط SWD را فعالکرد. دو پایه دیگر هم پایههای مربوطبه خود رابط SWD است و باید بهصورت یکبهیک متصلشوند. اما کانکتور موجود روی پروگرامر J-Link یک کانکتور ۲۰پایه است، اما چطور باید این دو کانکتور را بهم متصلنماییم، خیلیساده است، در تصویرزیر نحوهی اتصال را مشخص کردهام:
پایههای موردنیاز، به رنگ نارنجی مشخص شدهاند، فقط دقتداشتهباشید که پایه VCC باید به پایهی ۱ متصلباشد و پایه SWO، مورداستفاده قرارنگرفته است.
نرمافزار J-Flash
برای استفادهاز نرمافزار، تنظیمات آنرا گامبهگام باتوجهه عکسهای زیر انجام میدهیم ابتدا یک پروژه جدید تعریف میکنم:
در پنجرهی بازشده نوع میکروکنترلر ARM را انتخاب میکنیم:
در لیست بازشده، ابتدا شرکت ST را انتخاب میکنیم:
بعد در لیست زیرین بهدنبال گزینه STM32F103RE بگردید و آنرا انتخابکنید:
در پنجره پروژه، نوع پروتکل را برروی SWD قراردهید و دکمه OK رو بزنید:
در پنجره نرمافزار J-Flash منویی سمت چپ وجود دارد که توضیحات و تنظیمات مربوطبه پروژه جاری را نمایش میدهد، دقتداشتهباشید که تنظیمات مربوطه مشابه تصویر زیر باشد:
بعداز منوی فایل، زیر منوی Open data File ، فایل Hex موجود در فایلهای پروژه را انتخابکنید.
برای پروگرامکردن برنامه کافیه که کلید F6 روی کیبورد را فشاردهید یا از منوی Target زیر منوی Manual Programming را انتخاب و سپس گزینه Program & Verify را انتخابکنید:
منبع: سیسوگ