پروژه پروگرام و ارتقای برنامه میکروهای stm32 توسط usb flash

با سلام خدمت دوستان عزیز و تولید کننده.

گفتم تولید کننده چون این پروژه که الان خدمتتون معرفی میکنم بسیار بسیار کاربردی و ضروری هستش برای تولید محصولات.

شما فرض کنید محصولی تولید کردین و رسیده دست مشتری حالا لازمه دستگاه رو آپگرید کنید.قطعا ممکن نیست که همه دستگاهارا جمع آوری کنید و مجددا پروگرام کنید، در اینجا کافیست شما یه یک فایل bin به کاربر بفرستید و کاربر آنرا به فلش انتقال دهد و به usb دستگاه متصل کند.دستگاه پروگرام و آپگرید میشود،اما چطور؟؟؟

نکته مهم:این قابلیت تنها توسط میکروهایی که دارای usb HOST هستند پشتیبانی میشود چراکه فلش نیاز به این بخش دارد به همین جهت ما از یک میکروی stm32f407 استفاده خواهیم کرد.

روش کار به این صورت است که ابتدا برنامه ای به صورت بوتلودر با حداقل حجم برای میکرو نوشته میشود که داخل برنامه آن یک دکمه فشاری به نام آپگرید تعریف شده ، یا اینکه اگر از lcd tft استفاده میکنید کدی در حد راه اندازی تاچ و lcd قرار دارد تا عملیات اپگرید توسط تاچ روی lcd انجام شود.

پس از اینکه برنامه بوتلودر نوشته شد مثلا حجم برنامه تولیدی بوتلودر 40 کیلوبایت شده است این 40 کیلوبایت در میکرو ادرس حافظه فلش میکرو را به صورت دائمی اشغال میکند و شما در ادامه نباید روی این بخش از ادرس رید و رایتی انجام دهید که با انجام تنظیماتی به صورت خودکار این کار انجام می شود.

در ادامه شما باید برنامه ای تنظیم کنید که کد را در ادامه 40 کیلوبایت بوت لودر قرار دهد برای اینکار تنظیماتی در نرم افزار کیل نیز انجام می شود.

در بخش زیر من تمامی تنظیمات بخش بوتلودر و برنامه منطبق بر بوتلودر را خدمتتون عرض میکنم:

——————–تغييرات در برنامه بوتلودر———————————————

ابتدا با کیوب یک برنامه رید و رایت فلش usb بسازید و تستش کنید(در اخر مطلب براتون قرار دادم).

داخل فايل flash.f متغيير زير بايد مطابق با ادرس انتهايي يا حجم فايل باينري بوتلودر باشد چون برنامه اصلی انتهاي برنامه اين ادرس است.

#define   APPLICATION_ADDRESS  (uint32_t)0x0800C000

حجم باينري بوتلودر من حدود 34 کيلوبايت شد اما من بيشتر حدود 48 کيلوبايت در نظر گرفتم.
براي تغييرات احتمالي در اينده در برنامه بوتلودر  که مدام نخواهم ادرس هارا عوض کنم.
بنابراين
در اينجا حجم باينري بوتلودر در نظر گرفته ما 48کيلوبايت به صورت هگز مانند زير است:

48 x 1024=dec=49152,hex=c000

حالا مقدار APPLICATION_ADDRESS را اين در نظر گرفتيم(به بخش 0800 دست نزنید).
0x0800C000

——————————تغييرات برنامه اصلي منطبق بر بوتلودر ———————————–

در تنظيمات کيل بايد دو مقدار تغيير کند
1- ادرس شروع حافظه
2- تعداد کل حافظه باقي مانده
ميکرو مورد استفاده ما stm32f407vg  و مقدار 1024 کيلوبايت حافظه فلش دارد.
و ما مقدار 48 کيلوبايت آن را براي برنامه بوتلودر استفاده کرديم که در نهايت مقدار 976 کيلوبايت ما حافظه در دسترس داريم:

976 x 1024=999424 ,hex=F4000

پس دو مقدار تنظيمات در کيل براي استارت داريم 0x0800C000 که ادرس شروع حافظه است.
و حافظه اي که در اختيار داريم 0xF4000 است.

تغيير بعدي در فايل system_stm32f4xx.c است
که بايد مقدار افست را به این صورت تنظيم کنيم

#define VECT_TAB_OFFSET 0x0800C000

تمام

حال شما در ابتدا برنامه بوتلودر را روی میکرو با stlink پروگرام کنید،

و در ادامه ، در برنامه اصلی کد زیر را در بخش تنظیمات User  کیل قرار دهید تا برای شما کد باینری تولید شود:

 

نکته:تمام این مراحل را من در پروژه برای شما انجام دادم فقط دانلود و استفاده کنید.

پس از اینکه کد باینری تولید شد، نام آن را به صورت upgrade.bin تغییر دهید و داخل فلش بریزید و دکمه PC0 را بزنید و درحالت فشرده نگه دارید و سپس میکرو را ریست کنید میکرو پس از شروع کار مجدد میبیند که پایه صفر شده وارد تابع خواندن فلش و خواندن فایل upgrade.bin می شود و فایل باینری را روی فلش خود مینویسید.

از یوزارت یک میکرو میتوانید جهت نمایش لاگ میکرو استفاده کنید و تمامی مراحل  برای شما پرینت می شود.

تمامی کد ها توسط توابع هال و کیوب و کامپایلر کیل نوشته شده است.

در کدی که در زیر براتون قرار دادم lcd tft ili9486 به طور کامل راه اندازی شده و میتونید از کدش استفاده کنید و استفاده از lcd کاملا اختیاری هستش درایورش روو به عنوان یک هدیه براتون قرار دادم هم در کد اصلی و هم در کد بوتلودر.

در کد اصلی علاوه وجود کتابخونه lcd براتون واحد فلش و uSD روهم راه اندازی کردم که عکس از روی فلش و uSD خوانده میشود و روی lcd نمایش داده میشود که در این مطلب فیلم راه اندازی آن را خواهید دید.

سوالی داشتین تلگرام در خدمتم.

امیدوارم براتون مفید باشه و پروژه رو میتونید از لینک زیر تهیه کنید:

اضافه کردن به سبدخرید

 

 

 

 

mehdi sehati

در این سایت پروژه و آموزش های انواع ماژول ها و میکروکنترلر ها و نحوه ارتباط سخت افزار با نرم افزار (برنامه نویسی اندروید برای گوشی و برنامه نویسی سی شارپ برای کامپیوتر) و برنامه نویسی پایتون و رسبری پای و ماژول های وای فای قرار میگیرد همچنین دوستان برای توضیحات بیشتر و سفارش پروژه میتوانند به آی دی تلگرام بنده مراجعه کنند

مطالب مرتبط

guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x
مدیریت سایت : مهدی صحتی