صفر تا صد Bootloader ها - قسمت اول (معرفی)


شاید تاکنون اصطلاح Bootloader را در سیستم های نهفته شنیده باشید اما با نحوه کار آن آشنایی نداشته باشید و از اهمیت وجود آن بی خبر باشید.. به طور کلی Bootloader برنامه ای ساده و کوچک است که وظیفه بارگذاری  و یا بروزرسانی برنامه اصلی را برعهده دارد.

در سیستم های کامپیوتری زمانی که یک سیستم‌عامل وجود داشته باشد، برای اینکه سیستم‌عامل بتواند اجرا بشود بعد از شناسایی سخت افزار، بخش راه‌انداز سیستم‌عامل توسط bootloader در حافظه قرار می‌گیرد تا بدین ترتیب سیستم‌عامل راه‌اندازی شده و کنترل سخت‌افزار را به‌عهده بگیرد.

در سیستم‌های Bare Metal‌نیز برای اینکه بتوان کد جدیدی را جایگزین برنامه فعلی نمود، از bootloader استفاده می‌کنند. وظیفه بوت‌لودر این است که با استفاده از یک حافظه جانبی خارجی یا یک پروتکل ارتباطی هم‌چون UART، I2C ، USB و … کد جدید را دریافت نماید و جایگزین کد فعلی کند و سپس کنترل سخت‌افزار را به برنامه اصلی بسپارد.

در این مجموعه بلاگ، تمرکز اصلی بر روی میکروکنترلرها بالاخص میکروکنترلرهای سری STM32‌ از شرکت STMicrocontroller است. در ادامه به مفهوم bootloader در این میکروکنترلرها و نوع پیاده‌سازی آن می‌پردازیم.

به طور کلی می‌توان bootloaderها  را به دو دسته تقسیم نمود. نوع اول bootloader هایی است که درون هر میکرویی از قبل وجود دارد و می‌توان از آن‌ها برای اهداف خود استفاده کرد، و نوع دوم bootloader هایی که در کنار برنامه اصلی، خودمان تهیه می‌کنیم تا وظایف مدنظرمان را برعهده بگیرد. هرکدام از این دسته‌ها مزایا و معایبی دارند که بنا به نیاز خود می‌توانید از آن‌ها بهره ببرید.




در فضای آدرس هر میکرویی یک بخشی از آن به bootloader اختصاص داده شده است. مزیت این دست bootloader ها این است که فضایی غیر از Flash اصلی پردازنده را اشغال نموده و بدین ترتیب کل فضای Flash را می‌توان به برنامه اصلی اختصاص داد .هچنین این جداسازی موجب می‌شود تا ایزولاسیونی میان bootloader و کد اصلی وجود داشته باشد که درصورت ایجاد خرابی در برنامه اصلی، bootloader در امان می‌ماند. علاوه بر این برنامه هایی از سمت سازنده میکرو به وجود آمده که به کمک آن‌ها می‌توان کد اصلی را آپدیت کرد.

اما این bootloader ها معایبی را هم دارند که این موارد موجب می‌شود تا ما گاها به سراغ ایجاد bootloader شخصی خود بریم. یکی از محدودیت ها این است که متناسب با هر bootloader ای، دسترسی های محدودی برای آپدیت کد برای ما ایجاد می‌شود.به عنوان مثال در برخی میکروها دریافت کد جدید تنها از طریق پورت سریال میکرو امکان‌پذیر است. یا اینکه bootloader از مکانیزم خاصی برای آپدیت داده استفاده می‌کند که عملا آپدیت اتوماتیک کد از راه دور یا به اصطلاح FOTA را نمی‌توان با آن محقق نمود. بنابراین برای کار با این bootloader ها نیاز است که یک ارتباط محلی مانند سریال میان پردازنده و سیستم Host‌ که کد جدید در آن قرار دارد ایجاد شود و هچنین نیاز به برنامه ای واسط درون Host است که کد را دریافت و به میکرو منتقل نماید.

شرکت ST یک فایل با نام AN2606 که در آن اطلاعات مربوط به bootloaderهای پردازنده‌های سری STM32 است را فراهم نموده که برای استفاده از bootloaderهای میکرو مطالعه آن ضروری‌ست. به علاوه برای کار با bootloader ها می‌توان از برنامه CubeProgrammer این شرکت برای بروززسانی کدهای خود استفاده نمود


علاوه بر Bootloader های اختصاصی هر میکروکنترلر که محدودیت هایی را برای شما ایجاد می‌کند، می‌توانید بر اساس نیاز خود Bootloader خود را ایجاد نمایید تا متناسب با خواسته های شما عمل کند. به عنوان مثال در یکی از پروژه هایی که پیش‌تر انجام داده‌یم، بنا به نیاز تجهیز فریم‌ور جدید باید از طریق ماژول مخابراتی برای تجهیز ارسال شده و درون حافظه EEPROM ای که در کنار میکروکنترلر قرار داشت ذخیره می‌شد. پس از ذخیره سازی آن، bootloader اجرا می‌شد، کد دریافتی را بررسی کرده و از صحت آن اطمینان حاصل کند. پس از مطمئن شدن از درستی کد، فریم‌ور برنامه اصلی را بروز رسانی کرده و به آن پرش می‌کرد. این درحالی است که در Bootloader های اختصاصی میکروکنترلرها عموما نمیتوانید از یک ماژول مخابراتی برای دریافت کد جدید استفاده نمایید. و یا از حافظه EEPROM دیتا را دریافت کرده و به صورت خودکار داده را بروز نماید. از محدودیت‌های دیگری که Bootloader های نهفته دارند، این است که امکان بررسی صحت داده دریافتی را ندارند و یا اینکه به صورت خودکار امکان بروز رسانی فریم‌ور را ندارند. بلکه نیاز به یک برنامه واسط است که درون سیستم Host‌ قرار دارد و با Bootloader ارتباط برقرار می‌کند و کد جدید را به میکروکنترلر منتقل می‌کند.



در بخش بعدی میکروکنترلرهای STM32 را بررسی کرده و مدار سخت‌افزاری را برای ارتباط با Bootloader اختصاصی آن معرفی می‌نماییم. این مدار ، با مدارهای کلاسیکی که در دیتاشیت میکروکنترلرها پیدا می‌کنید متفاوت است و قابلیت جذابی دارد که بررسی آن خالی از لطف نیست. به همین دلیل به شما توصیه می‌کنیم تا زمانی را برای بررسی آن اختصاص دهید و از زیبایی و کارآمدی آن لذت ببرید.

با ما همراه باشید …

WWW.Sensify.ir