میکروکنترلر ARM چیست؟ | به زبان ساده


میکروکنترلر ARM در بسیاری از لوازم برقی، تجهیزات الکترونیکی و پروژههای صنعتی به کار میرود. در این آموزش، با معماری ARM، ویژگیهای آن و خانواده پردازندههای ARM آشنا میشویم. البته اگر دوست دارید اصول کاربردی میکروکنترلرها را به راحتی و به شکلی جذاب یاد بگیرید، مجموعه فیلمهای آموزش استیام (STM32) را مشاهده کنید.
پردازنده ARM چیست؟
آرم هولدینگز (ARM Holdings plc) یک شرکت نیمههادی سطح اول است که محصولات آن پردازندهها، سیستمهای روی تراشه (System-on-Chips)، نرمافزارهای کامپیوتری و غیره است. معماری آرم یا ARM که مخفف Advanced RISC Machine به معنی ماشینهای RISC پیشرفته است، در سال 1990 ساخته شد RISC یا ریسک، مخفف Reduced Instruction Set Computer به معنی رایانه کمدستور و نوع معماری ساخت کامپیوتر یا ریزپردازنده است که در آن به جای استفاده از دستورالعملهای خاص سایر معماریها، از یک مجموعه دستورالعمل حداقلی و بسیار بهینهسازی شده استفاده میشود.
ریسک (RISC) اصلیترین استراتژی طراحی CPU است که در پردازندههای آن اجرا میشود.
ARM ارائه دهنده پیشرو ریزپردازندههای مبتنی بر RISC و سایر IPهای نیمههادی با بیش از 85 میلیارد تراشه مبتنی بر ARM است. ARM مانند سایر شرکتهای تولید ریزپردازنده همچون اینتل (Intel)، هیتاچی (Hitachi)، فریاسکیل (Freescale) و غیره، پردازنده یا سایر ادوات نیمههادی را تولید نمیکند بلکه، به عنوان مالکیت فکری (IP) مجوز ساخت هستههای نیمههادی را به سایر شرکتهای نیمههادی مانند اتمل (ATMEL)، فیلیپس (اکنون NXP)، سامسونگ (Samsung) و غیره میدهد. مهمترین مالکیتهای فکری ARM شامل ریزپردازندههای RISC توانپایین، کمهزینه و با کارایی بالا، سیستم روی تراشه و سایر لوازم جانبی است.
جدا از پردازندهها و مالکیت فکری هستهها، ARM ابزارهای توسعه نرمافزاری کاملی مانند Keil و DS-5 را برای توسعه سیستمهای کامل مبتنی بر میکروکنترلر ARM و سیستم روی تراشه ارائه میدهد.
امروزه پردازندههای ARM تقریباً در هر زمینهای مانند دستگاههای الکترونیکی دستی، دستگاههای برقی، رباتیک، اتوماسیون و غیره یافت میشوند. پردازندههای تولید شده از مالکیت فکری ARM در سیستمهای تعبیه شده یا توکار یا نهفته (Embedded) مانند تلویزیونهای هوشمند، ساعتهای هوشمند، تبلتها و غیره استفاده میشوند.
ویژگی های پردازنده ARM
پردازندههای ARM مبتنی بر معماری رایانه کمدستور یا ریسک (RISC) هستند، اما بر اساس الزامات سیستمهای تعبیه شده، برخی از اصلاحات نیز در معماری RISC انجام میشود. پردازندههای ARM معماری نوع انتقال داده (Load-Store) را دنبال میکنند که پردازش دادهها فقط بر روی محتویات ثباتها یا رجیسترها انجام میشود و نه مستقیماً روی حافظه. دستورالعمل پردازش دادهها در رجیسترها با دسترسی به حافظه متفاوت است.
مجموعه دستورالعمل ARM یکنواخت و طول آن ثابت است. پردازندههای آرم ۳۲ بیتی دو مجموعه دستورالعمل دارند: به طور کلی، مجموعه دستورالعمل آرم ۳۲ بیتی و مجموعه دستورالعمل Thumb با ۱۶ بیت است (Thumb شیوهای برای فشردهسازی دستورات پركاربرد 32 بيتی به صورت 16 بيتی جهت كاهش حجم برنامه، در ازای كاهش سرعت اجرای آن است).
پردازنده ARM از چندین مرحله خط لوله (Pipeline) برای سرعت بخشیدن به جریان دستورالعملها پشتیبانی میکند. در خط لوله سهمرحلهای ساده، دستورالعملها از سه مرحله پیروی میکنند: واکشی (fetch)، رمزگشایی (decode) و اجرا (execute).
برخی از ویژگیهای عمومی ARM به شرح زیر هستند:
- پردازندههای ARM از سرعت مناسب نسبت به توان مصرفی برخوردار هستند.
- طیف فرکانس ساعت (کلاک) میکروپروسسورهای ARM گسترده و از ۱ مگاهرتز تا چند گیگاهرتز است.
- از اجرای مستقیم کدهای جاوا با استفاده از Java Jazelle DBX ARM پشتیبانی میکنند.
- پردازندههای ARM به صورت سختافزاری برای اشکالزدایی (Debugging) ساخته شدهاند.
- از دستورالعملهای پیشرفته برای عملیات پردازش سیگنال دیجیتال یا DSP بهره میبرند.
خانواده های پردازنده ARM
آرم دارای چندین خانواده پردازنده است که بر اساس هسته پردازشی که با آن پیادهسازی شدهاند، تقسیم میشود. معماری پردازندههای ARM با تکامل در هر خانواده ادامه دارد. برخی از خانوادههای معروف پردازنده آرم، عبارتند از: ARM10 ،ARM9 ،ARM7 و ARM11. در جدول زیر تعدادی از خانوادههای رایج ARM در کنار معماری آنها ارائه شده است.
خانواده ARM | معماری |
ARM7TDMI | ARMv4T |
ARM9E | ARMv5TE |
ARM11 | ARMv6 |
Cortex-M | ARMv7-M |
Cortex-R | ARMv7R |
(Cortex-A (32-bit | ARMv7-A |
(Cortex-A (64-bit | ARMv8-A |
برای توصیف پیادهسازی پردازندهها در ARM از نامگذاری مشابه شکل زیر استفاده میشود:
حروف یا کلمات بعد از "ARM" برای نشان دادن ویژگیهای پردازنده استفاده میشود.
- x - خانواده یا سری
- y - واحد مدیریت/حفاظت از حافظه
- z - حافظه نهان
- T - دیکدر Thumb شانزده بیتی: پردازندههای ARM از هر دو مجموعه دستورالعمل 32 بیتی ARM و مجموعه دستورالعمل Thumb شانزده بیتی پشتیبانی میکنند. دستورالعملهای اصلی 32 بیتی ARM شامل کدهای دستور آپکدهای 32 بیتی است که به نوبه خود الگوی باینری 4 بایتی است. دستورالعملهای Thumb شانزده بیتی شامل کدهای 16 بیتی یا الگوی باینری 2 بایتی برای بهبود تراکم کد است.
- D - اشکالزدایی JTAG :JTAG یک پروتکل سریال است که توسط ARM برای انتقال اطلاعات اشکالزدایی یا دیباگ بین پردازنده و تجهیز تست استفاده میشود.
- M - ضربکننده سریع: پردازندههای قدیمی ARM از یک واحد ضربکننده کوچک و ساده استفاده میکردند. این واحد ضربکننده برای تکمیل یک ضربکنندگی به سیکل ساعت بیشتری نیاز دارد. با وجود واحد ضربکننده سریع (Fast Multiplier)، سیکلهای ساعت مورد نیاز برای ضرب به طور قابل توجهی کاهش مییابد و پردازندههای مدرن ARM قادر به محاسبه ضرب ۳۲ بیتی در یک سیکل واحد هستند.
- I - شبیهساز درونمدار (ICE) تعبیه شده ماکروسل (Macrocell): پردازندههای ARM دارای سختافزار اشکالزدایی بر روی تراشه هستند که به پردازنده اجازه میدهد breakpoints و watchpoints را تنظیم یا Set کند.
- E - دستورالعملهای پیشرفته برای DSP (فرض TDMI): پردازندههای ARM در این مُد از مجموعه دستورالعمل تعمیم یافته DSP برای برنامههای DSP با کارایی بالا پشتیبانی میکنند. با استفاده از این دستورالعملهای DSP تعمیمی، میتوان عملکرد DSP پردازندههای ARM را بدون فرکانسهای ساعت بالا افزایش داد.
- Jazelle - J (برای اجرای سریع JAVA): از پردازندههای ARM با فناوری Jazelle میتوان در اجرای سریع کدهای جاوا استفاده کرد. Jazelle DBX یا Direct Bytecode eXrection در تلفنهای همراه و سایر لوازم برقی برای اجرای جاوا با کارایی بالا بدون تأثیرگذاری بر حافظه یا باتری استفاده میشود.
- F - واحد ممیز شناور (FPU) برداری: معماری ممیز شناور (Floating Point) در پردازندههای ARM اجرای عملیات حسابی شناور را ارائه میدهد. محدوده دینامیکی و دقت ارائه شده توسط معماری ممیز شناور در پردازندههای ARM در بسیاری از برنامههای زمان واقعی (Real Time) در حوزههای صنعتی و خودروسازی استفاده میشود.
- S - نسخه Synthesizable: هسته پردازنده ARM به عنوان کد منبع (سورس کد) در دسترس است. این هسته نرمافزاری را میتوان به فرمی کامپایل کرد که توسط EDA Tools به راحتی قابل درک باشد. با استفاده از کد منبع پردازنده میتوان معماری پردازنده ARM را اصلاح کرد. نمونهای در پردازندههای خانواده ARM7، پردازنده LPC2148 مبتنی بر معماری ARM7TDMI-S است.
انواع پردازنده های ARM
پردازندههای ARM را میتوان به پردازندههای کلاسیک آرم (ARM Classic Processors)، پردازندههای توکار آرم (ARM Embedded Processors) و پردازندههای کاربردی آرم (ARM Application Processors) تقسیمبندی کرد.
پردازندههای کلاسیک ARM شامل خانوادههای ARM9 ،ARM7 و ARM11 هستند و ARM7TMDI هنوز پراستفادهترین پردازنده 32 بیتی است. پردازندههای مبتنی بر ARM7 هنوز هم در بسیاری از دستگاههای کوچک و ساده 32 بیتی استفاده میشوند.
میتوان از ARM7 یا سایر پردازندههای کلاسیک ARM برای سیستمهای تعبیه شده در مقیاس کوچک استفاده کرد که با استفاده از پردازندههای پیشرفته تعبیه شده ARM یا پردازندههای Cortex-M و پردازندههای Cortex-R ساخته میشوند. پردازندههای Cortex-M دارای مشخصات میکروکنترلری هستند، در حالی که پردازندههای Cortex-R زمان واقعیاند.
پردازندههای Cortex-M دارای انرژی کارآمد بوده و برای اجرا ساده هستند و عمدتاً برای برنامههای پیشرفته تعبیه شده توسعه یافتهاند. پردازندههای Cortex-M ARM به چندین هسته پردازنده مانند Cortex-M0 ،Cortex-M0+ ،Cortex-M3 ،Cortex-M4 و Cortex-M7 تقسیم میشوند.
سری Cortex-A بالاترین عملکرد را در بین پردازندههای ARM دارند. این پردازندهها در دستگاههای تلفن همراه، محصولات فناورانه مانند تجهیزات شبکه، لوازم برقی، سیستمهای اتوماسیون، خودروها و سایر سیستمها توکار به کار میروند.
پردازندههای Cortex-A خود به انواع پردازندههای عملکرد بالا (High Performance)، بازده بالا (High Efficiency) و بازده بسیار بالا (Ultra-high Efficiency) تقسیم میشوند. هریک از اینها نیز خود انواع هستههای متخلفی دارند.
از کجا باید شروع کرد؟
بسیاری از توسعهدهندگان سیستمهای توکار، سری LPC214X را به عنوان بهترین پردازنده برای شروع کاربردی ARM پیشنهاد میدهند.
سری LPC214X یک پردازنده مبتنی بر ARM7 با هسته پردازنده ARM7TDMI-S است. این پردازنده مبتنی بر معماری ARMv4 بوده و تغییرات آن نسبت به نسخه قبلی، افزودن دستورالعملهای Thumb شانزده بیتی است. نرمافزارهای توسعه LPC2148 به راحتی در دسترس هستند. کیل (Keil) یک محیط توسعه نرمافزاری برای پردازندههای ARM است. Keil شامل ابزارهای کاملی از جمله محیط یکپارچه توسعه نرمافزار (IDE)، کامپایلر، دیباگر و سیمولاتور است.
میکروکنترلر ARM
میکروکنترلر ARM خانواده STM32 مبتنی بر Cortex-M است. خانواده STM32 به طور کلی به چهار دسته کلی طبقهبندی میشوند که هر یک بازار خاص خودش را دارد. این چهار دسته عبارتند از: کارایی بالا، اصلی، توان بسیار کم و بیسیم. خانواده STM32 از میکروکنترلر ARM ساخت استیمایکروالکترونیکس (STMicroelectronics) است.
میکروکنترلرهای STM32 امکانات جانبی ارتباطی سریال و موازی را ارائه میدهند که میتوانند با انواع قطعات الکترونیکی از جمله سنسورها، نمایشگرها، دوربینها، موتورها و سایر تجهیزات ارتباط برقرار کنند. هر نوع میکروکنترلر ARM از خانواده STM32 دارای حافظه داخلی فلش و رم هستند.
دامنه عملکرد میکروکنترلر ARM خانواده STM32 بسیار گسترده است. برخی از ابتداییترین انواع این خانواده، سری STM32F0 و STM32F1 است که از فرکانس ساعت تنها 24 مگاهرتز شروع میشوند و در بستههایی با حداقل 16 پین در دسترس هستند.
از طرف دیگر، میکروکنترلر ARM سری STM32H7 با کارایی بسیار عالی، در بستههایی با حداکثر 240 پین موجود است. این میکروکنترلر، یک میکروکنترلر ARM تک یا دو هستهای است که از یک هسته Cortex-M7 با فرکانس 480 مگاهرتز و یک هسته Cortex-M7 با فرکانس ۲۴0 مگاهرتز اضافه برای نسخههای دو هستهای تشکیل شده است. دسته عملکرد بالا، بهترین عملکرد را در اجرای کد و انتقال دادهها ارائه میدهد. مدلهای پیشرفتهتر با واحدهای ممیز شناور (FPU) برای کاربردهای نیازمند پردازش عددی در دسترس هستند. این مدلهای پیشرفته خط بین میکروکنترلر و یک میکروپروسسور را حذف میکنند.
سرانجام، سری STM32L به طور خاص برای کاربردهای قابل حمل با توان کم (از یک باتری کوچک) طراحی شده است.
ابزارهای توسعه میکروکنترلر ARM
ابزارهای توسعه برای تهیه کد، برنامهنویسی میکروکنترلر و آزمایش و اشکالزدایی کد مورد نیاز هستند. ابزارهای توسعه شامل موارد زیر است:
- کامپایلر (Compiler)
- اشکالزدا (Debugger)
- برنامهنویس سریالی درونمداری (ICSP)
چندین ابزار توسعه نرمافزاری برای تهیه کد در میکروکنترلرهای STM32 وجود دارد. ابزارهای نرمافزاری به عنوان محیط یکپارچه توسعه نرمافزار (IDE) در دسترس هستند که تمام ابزارهای لازم را در یک محیط یکپارچه در خود دارند.
دو بسته توسعه رایج به شرح زیر هستند:
- Keil MDK ARM IDE :Keil MDK ARM یک محیط توسعه بسیار پایدار است که به صورت رایگان قابل است. با Keil میتوان یک برنامه کد را تا اندازه 32 کیلوبایت توسعه داد. برای تهیه برنامههای بزرگتر، یک نسخه مجاز پولی را خریداری کرد.
- CoIDE: یک زنجیره ابزار رایگان مبتنی بر نسخه مختصر شدهای از Eclipse IDE است که به همراه یک نسخه ARM تعبیه شده از کامپایلر GCC ساخته شده است.
چندین IDE دیگر نیز وجود دارند که برای کار با میکروکنترلرهای STM32 در دسترس هستند. جدا از ابزارهای نرمافزاری، یک برنامهنویس سریالی درونمداری (ICSP) برای پروگرام و تست کد روی میکروکنترلر ARM مورد نیاز است. ICSP باید از طریق درگاه USB میکروکنترلر را با ابزارهای نرم افزاری PC متصل کند.
میکروکنترلرهای Cortex-M از دو پروتکل برنامهنویسی پشتیبانی می کنند: JTAG و SWD. چندین ICSP وجود دارد که از این پروتکلها پشتیبانی میکنند، از جمله: Keil U-Link 2 و Segger J-Link و ST-Link.
دوره ویدیویی آموزش میکروکنترلر ARM با کامپایلر Keil
برای آشنایی بیشتر با میکروکنترلر ARM، پیشنهاد میکنیم به دوره ویدیویی «آموزش میکروکنترلر ARM با کامپایلر Keil» در این لینک مراجعه کنید. در درس اول این آموزش ۷ ساعت و ۵۳ دقیقهای، میکروکنترلرهای ARM معرفی شدهاند. درس دوم مربوط به راهاندازی اولیه LPC1768 است.
واحد GPIO، واحد NVIC و واحد ADC به ترتیب، موضوع درسهای سوم و پنجم این آموزش هستند. واحدهای ADC و Timer و PWM نیز در درسهای ششم و هفتم مورد بررسی قرار گرفتهاند. واحد DAC، واحد سریال USART و واحد RTC نیز موضوع درسهای هفتم تا نهم هستند. در نهایت، در درس دهم، چند تمرین کاربردی ارائه شده است.
اگر نوشته بالا برای شما مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند.
- مجموعه آموزشهای میکروکنترلر
- آموزش مقدماتی STM32 (میکروکنترلر ARM) به همراه پروژه های عملی (لینک)
- مجموعه آموزشهای مهندسی الکترونیک
- آموزش کاربردی ساخت کنترل کننده صنعتی با میکروکنترلر ARM STM32 (لینک)
- آشنایی با برد آردوینو — بخش اول: معرفی و کاربردها
- تایمر ۵۵۵ — راهنمای جامع (+ دانلود فیلم آموزش رایگان)
- اندازهگیری دما با Arduino — راهنمای کاربردی
^^
ابزرا -> ابزار
با تشکر. مفید بود.
با سلام؛
از بازخورد شما سپاسگزاریم. متن بازبینی و اصلاح شد.
با تشکر از همراهی شما با مجله فرادرس
ایامیکروکنترلرarm TMPM370FYAFG که به روی ماشین لباس شویی سامسونگ کارگذاشته شده قابل کپیکردن است
سلام وقت بخیر سوالی داشتم از حضور شما؟
تفاوت کریستال ۱۲ مِگ و ۳۲ مِگ در lpc1768 چیست؟
نمیدونم