میکرو کنترلر(microcontroller) یکی از مهمترین فناوریهای عرصه الکترونیک میباشد که تاکنون به دست بشر ساخته شده است. تاریخچه ایجاد این میکروکنترلرها به دهه ۶۰ میلادی باز میگردد. میکروکنترلر یک مدار مجتمع فشرده است که با هدف کنترل و نظارت بر عملکرد یک دستگاه یا سیستم الکترونیکی طراحی میشود. در مورد کاربرد میکروکنترلر ها میتوان گفت که این فناوری در اکثر وسایل الکترونیکی روزمره اعم از یخچال و لباسشویی و همچنین در دستگاه های تخصصی و پیچیدهتر همچون پاورهای مخابراتی و ماینر نقشی اساسی دارد چرا که یکی از ویژگی مهم میکرو کنترلرها، قابلیت برنامهریزی آنها در راستای هدف سازنده است.
پیشنهاد میشود در راستای آَشنایی بیشتر با این تکنولوژی و فهم بهتر مطالب پیش رو، ابتدا مقالهی "میکروکنترلر چیست؟" که در سایت قرار گرفته است را مطالعه بفرمایید.
با توجه به کاربرد گسترده میکروکنترلرها، سالانه میلیون ها دستگاه برپایهی این فناوری به فروش میرسد. فرض کنید سازنده قصد ارتقای سیستم و یا عیب یابی مدار خود را دارد. آیا این منطقی است که در راستای نیل به این هدف، تمام دستگاههای فروخته شده جمع آوری شده و به شرکت اولیه بازگردانده شوند؟ از نظر عقلانی چنین کاری موجب تحمیل هزینههای هنگفتی شده و عملاً امکانپذیر نمیباشد. در نتیجه جهت اجتناب از این چالش از بوت لودر در میکرو کنترلرها استفاده میشود.
بوت لودر چیست؟
بوت لودر برنامهای است که هدف اصلی آن ارتقای برنامه سیستم، بدون دخالت سختافزارهای مخصوصی همچون پروگرامر JTAG میباشد. به بیان دیگر، مزیت استفاده بوت لودرها آن است که میتوانند با طریق پروتکلهای مختلفی همچون USART ، Ethernet و CAN ارتباط برقرار کرده و در نتیجه نیاز به وجود امکانات سخت افزاری برای ارتقای سیستم به حداقل خواهد رسید. بوت لودر در راستای مدیریت رفتار و ایجاد هماهنگی در سیستم به کار گرفته میشود. بوت لودر اغلب به وسیله سازنده نوشته شده و در حافظه ای جدا از برنامه اصلی تعبیه میگردد. این عمل در راستای افزایش امنیت و کیفیت کارکرد سیسیتم پیشبینی گردیده و مانع از رخنه سایرین به درون سیستم جهت خواندن تصویر برنامه میشود و همچنین از بروز خطاهایی همچون پاک کردن و نوشتن مجدد فلش جلوگیری مینماید.
علی رغم گستردگی در انواع و پیچیدگی بوت لودرهای گوناگون، عملکرد یک سیستم حاوی بوت لودر نسبتا استاندارد میباشد.
به طور کلی برنامه یک میکرو کنترلر از چهار بخش اصلی تشکیل میشود.
1- کد انشعاب (مستطیل سبز)
2- کد اجرا (مستطیل آبی)
3- کد بوت لودر (مستطیل قرمز)
4- کد ریست (مستطیل نارنجی)
کد انشعاب، برنامه ای ساده بوده که مسیر سیستم را معین مینماید. این کد تعیین میکند که آیا سیستم باید براساس دستورالعملهای ابتدایی خود، یعنی روند اصلی عمل کرده و یا بوتلودر باید اجرا گردد.
درصورتی که کد انشعاب تشخیص دهد که نیازی به بوت لودر نیست، شرایط را جهت اعمال کد اجرا مناسب شمرده و سیستم به صورت عادی شروع به کار میکند.
در غیر این صورت، کد بوت لودر که وظیفه ارتقا و بروزرسانی سیستم را دارد، با اخذ کدهایی جدید، دیگر امکان ادامه اجرای دستورالعملهای قدیمی را به سیستم نمیدهد. بلکه برنامه جهت ارتقا باید ابتدا وارد بوتلودر بشود. درنهایت سیستم با راهاندازی مجدد (کد ریست)، مطابق دستورالعملهای خود با آپدیتهایی جدید مجددا شروع بکار کرده و اطلاعات قدیمی پاکسازی میشوند. گفتنی است پس از راهاندازی مجدد سیستم، ابتدا کد برنامه دوباره بررسی میشود و اگر براساس آخرین تغییرات بوتلودر باشد، کد اجرا شروع به فعالیت خواهد کرد.
نکته حائز اهمیت آن است که سیستم در هر لحظه، حتی در زمان اجرا نیز میتواند متناسب با دستورات جدید بوتلودر ارتقا یابد؛ بطور خلاصه در این سیستمها میتوان اجرا و ارتقا را بصورت همزمان داشت.
در سیستم های پیچیده تر، قبل از تصمیمگیری کد انشعاب، بوت لودر خودرا به طور کامل در حافظه بارگذاری مینماید تا از یکپارچگی و صحت عملکردهای اساسی سیستم مطمئن شود. از همین رو در بیشتر موارد کد انشعاب در کد بوت لودر گنجانده میشود.
روشهای رفتاری بوتلودر
به صورت کلی ارتقای سیستم از طریق بوت لودر به دو روش انجام میشود:
در روش نخست بارگذاری برنامه جدید به صورت خودکار و به وسیله خود سیستم صورت میگیرد. که یکی از مثالهای بارز آن استفاده از کارتهای اس دی (SD Card) است. در این روش کدهای بوت لودر به صورت خودکار چهارچوب جدید را شناسایی کرده و با جایگزینی آن ها با کد قبلی، سیستم را ارتقا میدهد. به عنوان مثال ماینرها که دستگاهی برای استخراج ارز هستند، از این روش پشتیبانی میکنند.
در روش دوم سیستم توانایی اجرای روند بوت لودر بصورت خودکار را نداشته و الزاما نیازمند اخذ دستور از منبعی خارجی میباشد.
منظور از منبع خارجی، نرمافزاری مبتنی بر کامپیوتر است که به بوت لودر در حالات مختلف فرمان میدهد تا چهارچوب و تصویر جدید را به سیستم اعمال کند. به عنوان مثال ابزار TNM جهت نیل به این هدف مورد استفاده قرار میگیرد.
هر بوت لودر باتوجه به پیچیدگی و یا ساده بودن طراحی خود، قادر به اعطای تعداد و نوع دستورات متفاوتی میباشد.
با این حال سه دستور پایهای که برای هر بوت لودری پیش بینی شده است و در تمام آنها مشاهده میشود به شرح زیر است:
1- پاک کردن فلش یا حذف برنامه اولیه از حافظه
2- نوشتن فلش یا اضافه کردن برنامه جدید به حافظه
3- خروج/ راهاندازی مجدد
همانطور که بالاتر گفته شد بوت لودرهای پیچیده تر قادر به اجرای دستورات بیشتری نیز هستند. به عنوان مثال:
1- قفل گشایی شامل وارد کردن کد امنیتی در راستای حذف و اضافه برنامه فلش
2- خواندن برنامه از فلش در راستای سنجش درستی برنامه
3- قفل کردن فلش با هدف جلوگیری از تغییر برنامه سیستم
و دستورات مختلف دیگری که مزایای استفاده از بوت لودرهارا افزایش میدهند.
به طور کلی بوت لودرها نقش مهمی در عملکرد قابل اعتماد و انعطافپذیر سیستمهای مبتنی بر میکرو کنترلر ایفا میکنند و امکان به روز رسانی از راه دور، عملیات ایمن و قابلیت های اشکال زدایی را فراهم میکنند.