ARM, STM32, آموزش, آموزش میکروکنترلر STM32F4, مقاله های سیسوگ, میکروکنترلر

آموزش میکروکنترلر STM32F4 قسمت هفتم : بوت

آموزش میکروکنترلر STM32F4 بوت

آموزش میکروکنترلر STM32F4 – قسمت هفتم ;

در قسمت ششم آموزش میکروکنترلر STM32F4 به مبحث وقفه‌ها پرداختیم. در این قسمت از آموزش میکروکنترلر STM32F4 به تنظیمات و بارگذار بوت و حافظه مستعار می‌پردازیم. با سیسوگ همراه باشید.

 

تنظیمات بوت

بارگذار بوت برنامه‌ای است که در قسمت حفاظت شده از حافظه قرار دارد و اولین برنامه‌ای است که پس از روشن شدن یا بازنشانی اجرا می‌شود. وظیفه این برنامه محدود است و معمولاً محدود به ارتباط با دنیای خارج با استفاده از پروتکل‌های ارتباطی (UART، I2C، SPI، اترنت) و دانستن نگاشت حافظه میکروکنترلر است. این برنامه با دنیای خارج، یا یک میزبان مرتبط می‌شود، فایل داده را از میزبان می‌گیرد و میکروکنترلری که در آن مستقر است، به روز می‌کند تا برنامه جدیدی که گرفته است اجرا کند.

بیشتر میکروکنترلرهای جدید توانایی نوشتن روی فلش خود را نیز دارند. فرایند نوشتن روی فلش خود، ممکن است چند ثانیه طول بکشد. وقتی بارگذاری بوت انجام شد، بارگذار باید تصویر بوت‌پذیر را اعتبارسنجی کند و کنترل را به کد بوت‌پذیر بدهد. اشاره‌گر‌ها به وقفه‌ها باید تنظیم شود. معمولاً یک بارگذار بوت یک بازنشانی نرم انجام می‌دهد تا اجازه دهد که برنامه اصلی کنترل را به دست بگیرد.

تنظیمات بوت

 

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

کانال ارتباطی، برنامه‌ای برای پاک کردن و برنامه ریختن روی فلش، و برنامه‌ای برای اعتبار سنجی و اجزای برنامه جدید. به علاوه باید بتواند خطاهای هنگام عملیات بارگذاری بوت را تشخیص دهد، گزارش دهد و اداره کند. این خطاها ممکن است قطع توان، قطع ارتباط، خطای نوشتن روی فلش باشد. برای جلوگیری از خطای نوشتن در فلش معمولاً از یک کد بررسی افزونگی چرخشی CRC استفاده می‌شود.

قبل از شروع ارتباط بیت‌های CRC صفر می‌شوند و با دریافت فایل محاسبه CRC انجام می‌شود و در صورتی که اشتباهی رخ داده بود مراحل بعدی عملیات بارگذاری بوت انجام نمی‌شود، بلکه با ارتباط با میزبان تقاضای ارسال مجدد برنامه را می‌کند.

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

 

بارگذار بوت داخلی

دو روش برای اجرای بارگذار بوت وجود دارد. یک روش استفاده از برنامه بارگذار بوت است که معمولاً در قسمتی از ROM سیستم در کارخانه و هنگام ساخته شدن میکروکنترلر قرار داده می‌شود. این برنامه با روشن شدن میکروکنترلر به شرط تنظیم بعضی از پایه‌ها یا رجیستر‌های داخلی، اجرا می‌شود. اگر پایه‌ها یا رجیسترهای داخلی برای اجرای برنامه بارگذار بوت تنظیم نشده باشد، برنامه کاربردی عادی میکروکنترلر که معمولاً در آدرس صفر فلش قرار دارد، اجرا می‌شود. با اجرای برنامه بارگذار بوت، یک کانال ارتباطی با دنیای خارج نیز برقرار می‌شود که ممکن است ارتباط سریال، spi، اترنت و … باشد. سپس طبق پروتکل خاصی که کارخانه سازنده تعیین کرده است داده‌ها به میکروکنترلر منتقل می‌شود و برنامه بارگذار بوت این داده‌ها را که برنامه جدید است در حافظه فلش می نویسد. معمولاً کارخانه سازنده یک برنامه، برای سمتِ کامپیوتر شخصی نیز، ارائه می‌دهد که این پروتکل را در آن اجرا کرده است و برنامه جدید کاربر را به کمک این برنامه به میکروکنترلر منتقل می‌کند.

بارگذار بوت داخلی

 

 

بارگذار بوت STM32f429

نگاشت حافظه این میکروکنترلر ثابت است و ناحیه کد (برنامه) از آدرس 0x0000 0000 شروع می‌شود و از طریق باس‌های ICode و DCode در دسترس است. در حالی که ناحیه داده (SRAM) از آدرس 0x2000 0000 شروع می‌شود و ازطریق باس سیستم، در دست است. پردازنده کورتکس M4، بردار بازنشانی را از باس ICode واکشی می‌کند. بنابراین تنها در ناحیه کد می‌توان حافظه بوت را در نظر گرفت. به طور معمول همان‌طور که می‌دانیم این ناحیه در حافظه فلش است. برای اینکه بتوان از ناحیه‌های دیگر مانند SRAM بوت کرد مکانیزمی به نام حافظه مستعار (Alias memory) استفاده می‌شود که بعدتر توضیح داده می‌شود. با استفاده از پایه‌های  [BOOT[1:0 می‌توان از بین سه نوع حالت بوت، انتخاب کرد.

 

حالت های بوت

 

مقدارهای این پایه‌ها در 4-امین لبه بالارونده ساعت SYSCLK، بعد از بازنشانی خوانده می‌شود. پایه BOOT0 اختصاصی است اما پایه BOOT1، پایه ورودی/خروجی هم می‌تواند باشد که پس از انجام عملیات بازنشانی و بوت می‌توان از عملکرد این پایه استفاده کرد.

وقتی میکروکنترلر از حالت آماده به کار (Standby) نیز خارج می‌شود پین‌های بوت بررسی می‌شوند و باید در حالت مورد نظر کاربر باشند وگرنه مطابق جدول بالا به حالتی که مقدار پایه‌ها می‌گوید خواهد رفت. با خروج از حالت آماده به کار، پردازنده مقدار آدرس بالای پشته را از 0x0000 0000 می‌خواند و اجرای کد را از حافظه بوت که از 0x0000 0004 شروع می‌شود آغاز می‌کند.

در حالتی که بوت از طریق SRAM انجام می‌شود باید در کد آغازسازی برنامه، با استفاده از جدول استثنائات NVIC و رجیستر دویدگی (offset)، جدول بردار را به درون SRAM جابجا کنید.

وقتی از حافظه فلش اصلی میکروکنترلر، بوت انجام می‌شود می‌توان از بانک 1 یا بانک 2 این کار را انجام داد که پیش فرض بانک 1 است. برای انتخاب بانک 2 باید بیت BFB2 را در بایت‌های گزینشی کاربر یک کرد. در این حالت، میکروکنترلر از حافظه سیستم بوت می‌شود و بارگذارنده بوت، به بانک 2 فلش برای اجرای کد می‌پرد.

 

بارگذار بوت

بارگذار بوت تعبیه شده دراین میکروکنترلر، برای بازنویسی برنامه حافظه فلش، با استفاده از رابط های زیر است:

  • USART1 پایه های PA9/10
  • USART3 پایه های PB10/11و PC10/11
  • CAN2 پایه های PB5/13
  • USB OTG FS پایه های PA11/12 در حالت وسیله (DFU روزآمد کردن سفت افزار وسیله)
  • I2C1/I2C2/I2C3/SPI1
  • SPI2/ SPI4
وسیله جانبی USART با نوسان‌ساز MHz16 داخلی کار می‌کند ولی وسیله‌های USB و CAN به نوسان‌سازهای خارجی با مضربی از MHz1 نیاز دارند (بین 4 تا MHz26). کد بارگذارنده بوت در حافظه سیستم قرار داده شده است و توسط شرکت ST در هنگام تولید برنامه‌ریزی شده است. بارگذارنده بوت به آدرس 0x1FFF76DE  درون حافظه سیستم می‌پرد و با وسیله جانبی زیر قابل اجرا است.

 

بازنگاشت فیزیکی (حافظه مستعار)

وقتی که پین‌های بوت انتخاب شدند، برنامه کاربردی می‌تواند حافظه را در ناحیه کد تغییر دهد (در این حالت کد می‌تواند از طریق باس ICode به جای باس سیستم اجرا شود) این تغییر با برنامه‌ریزی رجیستر SYSCFG_MEMRMP در کنترلگر SYSCFG انجام می‌شود.

این حافظه‌ها را می‌توان بازنگاری کرد:

  • حافظه فلش اصلی
  • حافظه سیستم
  • SRAM1 تعبیه شده (KB112)
  • بانک 1 FMC (NOR/PSRAM1)
  • بانک 1 SDRAM کنترلگر حافظه انعطاف پذیر

 

حافظه مستعار

 

رجیستر SYSCFG_MEMRMP وظیفه انجام بازنگاری حافظه را به عهده دارد. سه بیت این رجیستر برای حافظه‌ای که باید در آدرس 0x0000 0000 قابل دسترسی باشد به کار می‌روند. این بیت‌ها برای بازنگاری فیزیکی توسط نرم افزار هستند و بنابراین پایه‌های BOOT را کنار می‌گذراند.

بعد از بازنشانی، این بیت‌ها مقدار انتخاب شده توسط پایه‌های BOOT را می‌گیرند. وقتی بوت از طریق فلش اصلی انجام می‌شود و پایه‌های BOOT برابر 10 هستند یعنی BOOT1=1 و BOOT0=0 است این رجیستر مقدار 0x00 را می‌گیرد.

سایر بیت‌های این رجیستر برای تاخت زدن بانک‌های FMC و فلش به کار می‌روند. دو حالت بازنگاری FMC در آدرس 0x0000 0000 وجود دارد:

  • بانک 1 (NOR/PSRAM 1 و 2) که تنها دو ناحیه اول بانک 1  بازنگاری می‌شود.
  • بازنگاری بانک 1 FMC SDRAM

 

بوت شدن از حافظه SDRAM  و فلشِ NOR ممکن نیست. برای این منظور باید بازنگاری نرم‌افزاری استفاده شود.

 

بیت‌های 11 و 10 با نام SWP_FMC که برای تاخت زدن نگاشت حافظه‌ی FMC به کار می‌روند. این بیت‌ها توسط نرم‌افزار صفر و یک می‌شوند. برای تاخت زدن بانک 1 و 2 SDRAM با بانک 3 و 4 FMC استفاده می‌شوند تا بتوان اجرای کد را از بانک‌‌های SDRAM انجام داد بدون اینکه نیاز به بازنگاری فیزیکی در آدرس 0x0000 0000 باشد. مقدار صفر در این بیت‌ها به معنی نبود تاخت زدن حافظه‌ی FMC است و مقدار 01 به معنی تاخت زدن حافظه بانک‌های SDRAM و بانک 2 NAND و PCCARD است. به این ترتیب که بانک 1 SDRAM به بانک 2 NAND به آدرس 0x8000 0000 و بانک 2 SDRAM به آدرس PCCARD برابر با 0x9000 0000 نگاشته می‌شود. بانک 2 NAND و بانک PCCARD نیز به آدرس‌های 0xC000 0000 و 0xD000 0000 نگاشته می‌شود.

 

با این ماکروها در HAL می‌توان عملیات بازنگاری حافظه را انجام داد:

  • HAL_SYSCFG_REMAPMEMORY_FLASH
  • HAL_SYSCFG_REMAPMEMORY_SYSTEMFLASH
  • HAL_SYSCFG_REMAPMEMORY_SRAM
  • HAL_SYSCFG_REMAPMEMORY_FMC
  • HAL_SYSCFG_REMAPMEMORY_FMC_SDRAM

 

در قسمت هشتم آموزش میکروکنترلر STM32F4 به بارگذار بوت کاربر خواهیم پرداخت. با سیسوگ همراه باشید.

انتشار مطالب با ذکر نام و آدرس وب سایت سیسوگ، بلامانع است.

شما نیز میتوانید یکی از نویسندگان سیسوگ باشید.   همکاری با سیسوگ

6 دیدگاه در “آموزش میکروکنترلر STM32F4 قسمت هفتم : بوت

  1. Avatar for داوود داوود گفت:

    اصلا جالب نیست . نویسنده صرفا از گوگل ترنسلیت و دیتاشیت استفاده کرده ، کاش کسی که مطلب رو کامل درک کرده به فارسی روان مقاله رو قرار بده

    1. Avatar for Zeus ‌ Zeus ‌ گفت:

      متاسفانه نویسنده ادامه ندادن

  2. Avatar for امید امید گفت:

    لطفا مقاله هایی که با گوگل ترنسلیت ترجمه رو شده رو توی سایتتون قرار ندید با تشکر …..معلوم نیست چی نوشته . و منبع انگلیسی رو هم قرار بدید

    1. Avatar for Sisoog Os Sisoog Os گفت:

      دوست عزیز این مجموعه که تحت عنوان یک کناب توسط اقای مرادمند ترجمه و برگردان شده است و ما اجازه ایشون و با نام ایشون اینجا منتشر کردیم
      عذرخواهی میکنیم اگر در ترجمه و انتقال مفاهیم اشتباهی وجود داره

  3. Avatar for سجاد سجاد گفت:

    سلام خیلی عالی بود سپاس
    فقط این که کلمات فارسی جدید باعث ابهام میشه و درک مطلب رو سخت میکنه .

    1. Avatar photo electronic girl گفت:

      سلام ممنون دوست عزیز
      حق با شماست ولی این مجموعه آموزشی را نویسنده قبلا به طور کامل در اختیار ما قرار دادن و به همین دلیل نمیتونیم تغییرات زیادی در متن ایجاد کنیم. ولی باز هم سعی میکنیم تا جایی که متن دچار تغییر زیادی نشه کلمات را اصلاح کنیم.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *