آموزش بوت لودر avr در کدویژن | آموزش حرفه‌ای avr – بخش سوم

آموزش حرفه‌ای avr - بخش سوم

درود فراوان بر شما. در قسمت قبل، آموزش بوت لودر avr بصورت کامل از لحاظ پیکربندی شرح داده شد و توابع آن در نرم افزار Atmel Studio گفته شد. اما برای کار کردن با بوت لودر در کدویژن کتابخانه‌ای وجود ندارد. لذا بر آن شدم که کتابخانه موجود در Atmel Studio را برای کدویژن بازنویسی کنم. این کتابخانه را می‌توانید از این لینک دانلود کنید.

نکته: این آموزش بر مبنای آن است که آموزش قبلی را بصورت کامل فرا گرفته باشید. توضیحات توابع، ساختار حافظه و مفاهیم پایه در قسمت قبل موجود است. به همین خاطر تنها 2 مثال از کار با بوت لودر در کدویژن شرح داده می‌شوند.

وارد کردن کتابخانه بوت لودر avr در کدویژن

پس از دانلود فایل zip کتابخانه boot، آن را از حالت فشرده خارج کنید. 2 فایل نهایی یکی به نام boot.h و دیگری به نام boot.lib باید در آدرس‌های زیر قرار گیرند.

قرار دادن فایل boot.h در کدویژن
قرار دادن فایل boot.h در نرم افزار کدویژن
قرار دادن فایل boot.lib در کدویژن
قرار دادن فایل boot.lib در نرم افزار کدویژن

موردی که باید در نظر بگیرید، تنظیم فایل boot.h برای میکروکنترلر مورد نظر است. بعضی از تنظیمات بوت لودر در هر میکروکنترلری متفاوت است که باید اطلاعات زیر را از دیتاشیت میکرو استخراج کرده و در فایل boot.h ویرایش کنید. این پارامترها در فایل boot.h در تصویر زیر مشخص شده‌اند.

پارامترهای فایل boot.h

در شکل فوق 5 پارامتر مربوط به کار با بوت لودر وجود دارند که عبارت اند از: ZPCMSB, ZPAGELSB, ZPAGEMSB, SPM_PAGESIZE و ZPCLSB. این 5 پارامتر را می‌توان در شکل‌های زیر که از دیتاشیت استخراج شده‌اند به دست آورد.

پارامترهای Z در دیتاشیت

به دست آوردن پارامتر SPM_PAGESIZE

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

به دست آوردن SPM_PAGESIZE

در جدول فوق دو ستون به نام‌های Boot Size و Pages وجود دارند که به ترتیب مقدار حافظه بوت و تعداد Page های آن را نشان می‌دهند. برای به دست آوردن SPM_PAGESIZE، ابتدا یکی از ردیف ها را انتخاب کرده و حاصل تقسیم Boot Size بر Pages را به دست آوردید. دقت شود که واحد Boot Size به word گفته شده است. لذا باید در 2 ضرب شود تا مقدار به بایت به دست آید.

SPM_PAGESIZE = Boot Size / Pages = (128 * 2) / 4 = 64 byte

نکته: کتابخانه فوق در میکروکنترلرهای Atmega8، Atmega16 و Atmega32 تست شده و بدون ایراد است. اما برای میکروکنترلرهایی با حجم حافظه بیشتر از 64 کیلوبایت، نیاز به توسعه دارد.

آموزش بوت لودر avr در کدویژن

پس از وارد کردن کتابخانه در نرم افزار CodeVision، می‌توانیم همانند سایر کتابخانه‌ها بصورت زیر آن را به برنامه خود الحاق کنیم.

وارد کردن فایل boot.h در کد

تنها موردی که باید در آن دقت شود این است که برنامه نوشته شده را برای حافظه بوت لودر تنظیم کنیم. به تب Project رفته و سپس گزینه Configure را بزنید. صفحه زیر باز می‌شود.

تنظیم بوت لودر در کدویژن

در صفحه فوق، در مسیر C Compiler و Code Generation گزینه‌ای به نام Program Type وجود دارد که شامل 4 حالت بوت لودر و 1 حالت برنامه اصلی است. این 4 حالت اندازه بوت لودر را نشان می‌دهد و باید دقیقا متناسب با فیوز بیت های BOOTSZ0 و BOOTSZ1 انتخاب شود. در هر دو مثالی که در ادامه گفته خواهند شد، اندازه حافظه بوت را روی 1024w یا همان 2048 بایت تنظیم کرده‌ایم. لذا فیوز بیت های BOOTSZ باید به صورت زیر پروگرام شوند.

بیشترین مقدار بوت لودر با تنظیم BOOTSZ

مثال اول: برنامه چشمک زن ساده برای حافظه بوت لودر

برنامه‌ای می‌نویسیم که یک LED متصل به پایه PORTB.0 را به فواصل 1 ثانیه خاموش و روشن کند. می‌خواهیم این برنامه را از روی حافظه بوت اجرا کنیم. لذا فیوز بیت های BOOTSZ و BOOTRST را همانند تصویر بالا پروگرام کرده و در داخل کدویژن هم از مسیر Project و Configure در داخل تب C Compiler گزینه Program Type را بر روی 1024w قرار می‌دهیم. برنامه چشمک زن به صورت زیر است.

توجه کنید که خروجی برنامه فوق، برای بوت لودر است و فایل هگزی که تولید می‌شود، پس از پروگرام کردن میکرو، بر روی حافظه بوت قرار خواهد گرفت. چرا؟ چون Program Type بر روی 1024w تنظیم شده است (بر روی Application نیست).

مثال دوم: پروگرام کردن برنامه چشمک زن بر روی حافظه اصلی و اجرای آن

در آموزش قبلی یک برنامه چشمک زن را در دل یه برنامه بوت قرار دادیم و سپس آن را بر روی حافظه اصلی یا همان Application پروگرام کردیم. حالا می‌خواهیم با استفاده از نرم افزار CodeVision و کتابخانه اختصاصی boot همین کار را انجام دهیم. تنظیمات میکرو و نرم افزار همانند مثال قبل است. برنامه بوت لودر به صورت زیر است.

توضیح برنامه فوق

در برنامه فوق، آرایه‌ای به نام prog تعریف شده که همان چشمک زن ساده است (در فواصل 100 میلی ثانیه) و از فایل hex استخراج شده است. هدف انتقال مقادیر این آرایه در اول حافظه فلش است. در ادامه دو تابع به نام‌های program_page و erase_page تعریف کرده‌ایم که با توجه به نام آنها، برای پروگرام کردن و پاک کردن هر page استفاده می‌شوند.

در تابع main ابتدا با دستور زیر، تعداد 3 page اول حافظه پاک می‌شوند.

سپس با دستورات زیر، ابتدا 64 بایت اول آرایه prog در آدرس 0 حافظه پروگرام می‌شود. در ادامه 64 بایت دوم آرایه prog در آدرس 64 حافظه پروگرام می‌گردد و در انتها 6 بایت آخر آرایه در آدرس 128 قرار می‌گیرد.

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

در ادامه هم LED متصل به پایه B.0 به صورت آهسته 3 بار چشمک زده و در نهایت با دستورات اسمبلی زیر میکرو به اول حافظه فلش پرش می‌کند.

سخن آخر

به عنوان کلام آخر سعی بر این شد که آموزش بوت لودر avr در کدویژن بیان شود و هر 2 مثالی که گفتیم، مشابه آن را در قسمت قبلی آموزش در نرم افزار Atmel Studio می‌توانید به کار ببرید. اگر در اجرای برنامه فوق مشکل، ارور یا هرگونه سوالی بود، کامنت کنید. مچکرم.

محمد نصر

محمد نصر

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

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

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