آموزش میکروکنترلر STM32F4 – قسمت هشتم ;
در قسمت هفتم آموزش میکروکنترلر STM32F4 به مبحث تنظیمات و بارگذار بوت و حافظه مستعار پرداختیم. در این قسمت از آموزش میکروکنترلر STM32F4 به بارگذار بوت کاربر میپردازیم. با سیسوگ همراه باشید.
بارگذار بوت کاربر
راه دیگر بارگذاری بوت این است که خود کاربر، برنامه بار گذار بوت را بنویسد که این برنامه را نیز بارگذار بوت در برنامه ((In Application Programming (IAP) مینامند. دلیل اینکه گاهی لازم میشود که برنامه بارگذار بوت اختصاصی نوشته شود این است که گاهی نیازمندیهای کاربر با برنامه بارگذار بوت اصلی میکروکنترلر برآورده نمیشود. برای مثال شاید کاربر در نظر داشته باشد گامهای دیگری نیز در بارگذار بوت قرار دهد. برای مثال در صورت قطع ارتباط با میکرکنترلر یا قطع توان الکتریکی برنامه قبلی که در جایی مانند حافظه SD قرار دارد روی میکروکنترلر بار شود.
بنابراین بارگذار بوت کاربرنویس، خودش یک برنامه جدید است که کاربر می نویسد تا کنترل بوت را مطابق نیازهای خود انجام دهد. در این روش دو پروژه جدا ساخته میشود که یکی برنامه اصلی کاربر است و دیگری برنامه بوت است. میکروکنترلر با پروژه بوت برنامهریزی میشود. حجم فایل باینری این پروژه تا جای ممکن کوچک نگه داشته میشود چون بالاسری محسوب میشود. در این پروژه پس از تنظیمات اولیه مانند PLL و مقداردهی پورتها، یک مسیر ارتباطی با دنیای خارج آغازسازی میشود. برای مثال ارتباط اترنت آغازسازی میشود و برنامه کاربر (که پروژه دیگر می باشد) از طریق ارتباط اترنت دریافت میشود و بارگذار بوت، این برنامه را روی فلش می نویسد. برنامه اصلی کاربر که توسط برنامه بارگذار بوت، به میکروکنترلر بار میشود را گاهی برنامه تصویر (image) مینامند.
روش دریافت داده میتواند مانند روش یک صفحه سرور http که فایل را بارگذاری میکند باشد. میتوان برای دریافت فایل از پروتکلهای دیگری مانند ymodem که پروتکلی برای انتقال فایل است نیز استفاده کرد. برای این منظور کاربر نیز باید با بررسی کردن یک پرچم یا پایه، کانال ارتباطی با دنیای خارج را برقرار کند و با گرفتن دادهها، آنها را در محل مناسب روی فلش بریزد. (در همه میکروکنترلرکنترلرها این حالت ممکن نیست. برخی از میکروکنترلرکنترلرها برای نوشتن روی فلش تنظیمات خاصی انجام می دهند که تنها در بوت لودر که ناحیه خاصی از حافظه قرار گرفته است ممکن می باشد.) اگر پرچم یا پایه مناسب فعال نبود برنامه کاربر باید به حالت عادی برنامه ی کاربردی بپرد. این ساختار در شکل زیر نشان داده شده است. دقت شود که خود برنامه بارگذار بوت که به این شکل نوشته شده است نیز روی فلش نوشته میشود و بنابراین باید دقت شود که آدرس برنامه ی جدید بعد از آن قرار گیرد.
بارگذار بوت برای شروع به کار میتواند سیگنال بوت را از یک انسان (یعنی بازنشانی دستی) یا از یک وسیله جانبی (یعنی سیستم میزبان) بگیرد. یا اینکه پس از بازنشانی با بررسی یک پرچم وارد برنامه بارگذار بوت شود. اولین کاری که انجام میدهد بررسی اعتبار برنامه خودش است. سپس بررسی میکند که برنامه جاری دستگاه معتبر است یا نه. با میزبان ارتباط برقرار میکند تا برنامه جدید را دریافت کند و بازنویسی فلش را انجام دهد.
الگوریتم بارگذار بوت کاربرنویس
معمولا این روش بارگذاری به نحوی است که از راه دور قصد داریم با سخت افزار در ارتباط باشیم و امکان دسترسی به سخت افزار از نزدیک برای قرار دادن میکروکنترلر در حالت بارگذاری بوت یا برنامه ریزی آن به شکل مستقیم نیست. وقتی برنامه کاربر در حالت عادی کار است و نیاز به تعویض برنامه اصلی با نسخه ای جدید است، طبیعتا کاربر با میکروکنترلر به روشی مانند اترنت در ارتباط است. کافی است پیامی به میکروکنترلر فرستاده شود که نیاز به تعویض سفت افزار (برنامه کاربردی) می باشد. در این حالت می توان یک پرچم را در فلش که ثابت است تنظیم کرد و یک بازنشانی نرم انجام داد. پس از بازنشانی با بررسی پرچم بوت، میکروکنترلر وارد فرایند بارگذاری بوت میشود و یک کانال ارتباطی مانند اترنت را آغازسازی میکند. با دریافت فایل و نوشتن آن روی فلش و در نهایت صفر کردن پرچم بوت، کار بارگذاری بوت تمام شده است و یک بازنشانی نرم میکروکنترلر را به حالت عادی آن خواهد برد و برنامه جدید پیاده میشود. دست کاربر در این برنامه باز است. برای مثال می تواند برنامه دریافتی را در حافظه ی جانبی مانند کارت SD ذخیره کند و پس از اطمینان از یکپارچگی (integrity) آن اقدام به نوشتن آن روی حافظه فلش کند.
روش های دیگر بوت مانند استفاده از RAM برای بارگذاری بوت و استفاده از فلش خارجی نیز وجود دارد که پیچیدگی بیشتری دارند. الگوریتم فرایند بارگذار بوت در بالا دیده میشود. این الگوریتم ممکن است بنا به نیاز کاربر تغییراتی کند.
تولید فایل باینری برای بوت بارگذار
فایلی که برای بارگذاری روی حافظه استفاده میشود باید فایل باینری باشد. این فایل را میتوان از خروجی کامپایلر به کمک نرمافزارهای سوم تولید کرد. یکی از این فایل fromelf.exe است که با نصب برنامه Kail این فایل نیز در C:\Keil_v5\ARM\ARMCC\Bin\ قرار دارد. دستور تبدیل به کمک این فایل به این شکل است:
1 | fromelf --bin mycode.axf --output mycode.bin |
میتوان فایل bat مخصوصی برای این کار نوشت که عملیات را خودکار انجام دهد. متن این فایل به این شکل است:
1 2 3 4 | SET FROM_ELF_PATH="C:\Keil_v5\ARM\ARMCC\Bin\fromelf.exe" %FROM_ELF_PATH% ".\STM324x9I_EVAL\mycode.axf" --bin --output ".\STM324x9I_EVAL\mycode.bin" |
حتی میتوان این عملیات را به شکل خودکار به Kail اضافه کرد که پس از کامپایل و لینک انجام شود.
بهتر است مسیر فایلfromelf را به ویندوز اضافه کنید.
مراحل تولید پروژه تصویر در Keil
برای ساختن برنامه تصویر، باید نکاتی را درباره حافظه مد نظر قرار داد. زیرا این برنامه در نقطه 0x08000000 بارگذاری نمیشود به همین دلیل در هنگام کامپایل کردن و لینک کردن باید آدرس نقطهای که در آن قرار است بار شود را داد. برای مثال در برنامه زیر که برنامه اصلی در آدرس 0x08020000 قرار دارد باید در برگه Target تغییراتی به شکل زیر داد. در ضمن کل حافظه را نیز باید کمتر کرد که از حد حافظه میکروکنترلر که 2 مگابایت است خارج نشود به همین دلیل اندازه را نیز از 200000 (شانزدهگانی) به 100000 کاهش دادهایم. (میتوان مقدار دقیق اندازه برنامه را قرار داد) باید دقت کرد که به دلیل اینکه حافظه فلش به شکل صفحه ای برای نوشتن در دسترس است، آدرس ابتدای نوشتن باید منظبق بر آغاز یکی از صفحه ها باشد. (توضیحات بیشتر در بخش فلش بیان میشود.)
مورد دیگری که باید انجام داد، تغییر آدرس بردار وقفهها در فایل sySTem_STm32f4xx.c است. در این فایل باید آفست بردار وقفه را به گونهای تنظیم کرد که به آدرس شروع برنامه جدید اشاره کند.
1 | #define VECT_TAB_OFFSET 0x020000 /*!< Vector Table base offset field. |
که منجر به آدرس جدید در دستورهای زیر خواهد شد. ( مقدار FLASH_BASE برابر 0x08000000 است)
1 2 3 | /* Configure the Vector Table location add offset address ----------*/ ... SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */ |
در قسمت نهم آموزش میکروکنترلر STM32F4 به کتابخانه HAL برای میکروکنترلرهای خانواده STm32f4xx خواهیم پرداخت. با سیسوگ همراه باشید.
با عرض سلام و خسته نباشید
من از میکروی stm32f103CB استفاده میکنم و ماژول sim808. واسه پیاده سازی OTA سمپل کدی دارید که کمک کنه به پیاده سازی.توی این مقاله کلیات و روند کار رو خیلی خوب توضیح دادید.
اوپس سمپل کد برای این ماژول و این میکرو ندارم ولی یه تقلب ساده
شما کدی که قراره آپدیت کنی رو از هر طریقی که میتونی http یا ftp دانلود کن و توی یه حافظه فلش خارجی قرار بده و توی بوت لودر از حافظه فلش شروع کن به اپدیت – اینطوری ریسکش خیلی کمتره
با عرض سلام
و درود خدمت شما 🙂