آموزش مقدماتی AVR - بخش هجدهم | فیوز بیت های atmega8 و لاک بیت ها

فیوزبیت‌ها در ATmega16

در این بخش در مورد فیوز بیت ها و لاک بیت ها صحبت میکنیم که در تمامی میکروکنترلرهای AVR وجود دارند و نقش آن ها اساسیت. با تنظیم فیوز بیت ها اعمالی نظیر تنظیم کلاک میکرو، قفل کردن میکرو در برابر کپی کردن برنامه و مدیریت حافظه بوت لودر (قسمت نوزدهم) را می‌توان انجام داد. فیوز بیت ها بخشی از حافظه RAM یا Flash میکروکنترلر نیستند و دسترسی به آنها تنها از طریق پروگرامر امکان پذیر است یعنی نمی‌توان آنها را در داخل برنامه میکرو حین اجرا تغییر داد. از طرفی دیگر اشتباه پروگرام کردن بعضی از فیوز ها ممکن است باعث از دست رفتن میکروکنترلر شود که در ادامه شرح خواهیم داد.

دسته بندی فیوز بیت ها و لاک بیت ها

در AVR سه دسته فیوز بیت و یک دسته لاک بیت وجود دارند. فیوز بیت ها به 3 قسمت Low Fuse Bits و High Fuse Bits و Extended Fuse Bits تقسیم می‌شوند که هر قسمت 1 بایت هستند. یعنی هر قسمت از 8 بیت تشکیل شده‌اند که در شکل زیر مشخص است.

فیوزبیت‌ها و لاک بیت‌ها

نکته: در تصویر فوق عدد 0 به معنای پروگرام بودن یا فعال بودن فیوز است و عدد 1 به معنای غیرفعال بودن است.

فیوز های Low

این قسمت شامل فیوز بیت های CKSEL0-3، SUT0-1، BODLEVEL و BODEN می‌باشند (ستون اول) که اکثرا در تمامی میکروکنترلرهای AVR وجود دارند.

فیوز بیت های CKSEL0 تا CKSEL3

این فیوز بیت ها تنظیم کلاک میکروکنترلر را بر عهده دارند که در بخش 4 آموزش در مورد آنها مفصل بحث شد.

فیوز بیت های SUT0 و SUT1

این 2 فیوز بیت به همراه فیوز بیت های CKSEL0 تا CKSEL3 تنظیم می‌شوند. وظیفه این فیوز بیت تنظیم زمان استارت آپ یا شروع به کار میکروکنترلر است. با توجه به توضیحات بخش 4 آموزش بسته به اینکه کلاک میکرو روی کدام منبع تنظیم شده باشد، مقادیر SUT میزان تاخیر متفاوتی ایجاد می‌کنند.

زمان تاخیر اولیه بعد از روشن شدن میکروتعداد کلاک برای شروع کار میکروفیوز بیت SUTمنبع کلاک میکروکنترلرفیوز بیت CKSEL
0ms600کلاک خارجی و اسیلاتور داخلی0000 تا 0100
4.1ms601کلاک خارجی و اسیلاتور داخلی0000 تا 0100
65ms610کلاک خارجی و اسیلاتور داخلی0000 تا 0100
0ms1800اسیلاتور RC خارجی0101 تا 1000
4.1ms1801اسیلاتور RC خارجی0101 تا 1000
65ms1810اسیلاتور RC خارجی0101 تا 1000
4.1ms611اسیلاتور RC خارجی0101 تا 1000
4ms100000کریستال فرکانس پایین1001
65ms100001کریستال فرکانس پایین1001
65ms3200010کریستال خارجی فرکانس پایین1001
4.1ms25800کریستال خارجیCKSEL0 = 0
65ms25801کریستال خارجیCKSEL0 = 0
0ms100010کریستال خارجیCKSEL0 = 0
4.1ms100011کریستال خارجیCKSEL0 = 0
65ms100000کریستال خارجیCKSEL0 = 1
0ms1600001کریستال خارجیCKSEL0 = 1
4.1ms1600010کریستال خارجیCKSEL0 = 1
65ms1600011کریستال خارجیCKSEL0 = 1
     

 به عنوان مثال اگر مقدار فیوزهای SUT برابر 01 و فرکانس میکرو بر روی 8 مگاهرتز داخلی تنظیم شده باشد (یعنی CKSEL = 0100)، در این صورت پس از ریست شدن میکرو یا اعمال ولتاژ به میکرو، به مدت 65 میلی ثانیه تاخیر ابتدایی ایجاد شده و پس از اتمام این زمان، میکرو بعد از 6 سیکل کلاک شروع به اجرای برنامه می‌کند.

فیوز بیت های BODEN و BODLEVEL

این 2 فیوز برای تعیین ریست شدن میکرو در صورت کاهش ولتاژ VCC به کار می‌روند. اگر بخواهیم با کاهش ولتاژ VCC میکرو ریست شود، باید فیوز بیت BODEN (Brown Out Detection) فعال گردد یعنی 0 شود. تنظیم ولتاژ آستانه توسط BODLEVEL تعیین می‌شود. اگر فیوز بیت BODLEVEL برابر 1 باشد، با کاهش VCC از مقدار 2.7 ولت میکروکنترلر ریست می‌شود و اگر 0 باشد، این مقدار 4 ولت خواهد بود.

فیوز های High

فیوزهای High شامل JTAGEN، SPIEN، CKOPT، EESAVE، BOOTSZ1، BOOTSZ0، BOOTRST و OCDEN است که در ستون دوم قرار دارند.

فیوز بیت OCDEN

با فعال کردن فیوز On Chip Debuging Enable) OCDEN) قابلیت دیباگ کردن یا اشکال زدایی کردن برنامه بر روی میکرو فعال می‌شود. قابلیت اشکال زدایی توسط رابط JTAG انجام خواهد شد. بنابراین اگر از پروگرامر ISP استفاده می‌کنید، فعال کردن این فیوز بی‌فایده است.

فیوز بیت JTAGEN

با فعال بودن این فیوز می‌توان از رابط JTAG برای پروگرام کردن و دیباگ کردن میکرو استفاده کرد. در این صورت 4 پایه از PORTC به این رابط اختصاص دارد و نمی‌توان به عنوان IO از آن‌ها استفاده کرد. این پایه‌ها به ترتیب TDI، TDO، TMS و TCK هستند و از پین 2 تا پین 5 میکرو را به خود اختصاص داده‌اند. فیوز بیت JTAGEN در حالت پیش فرض فعال است.

فیوز بیت SPIEN

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

فیوز بیت CKOPT

فیوز بیت Clock Option) CKOPT) اگر فعال شود، میکروکنترلر در محیط های نویزی بهتر عمل می‌کند. اگر از کریستال خارجی به عنوان منبع کلاک استفاده می‌شود، با فعال کردن این فیوز دامنه نوسانات کریستال افزایش یافته و میکرو نویزپذیری کمتری خواهد داشت.

فیوز بیت EESAVE

اگر فیوز EEPROM Save) EESAVE) پروگرام شود، موقع Erase کردن میکروکنترلر حافظه EEPROM میکرو پاک نمی‌شود. در حالت پیش فرض غیر فعال است و با پاک کردن حافظه Flash، حافظه EEPROM نیز پاک خواهد شد.

فیوز بیت های BOOTSZ0-1 و BOOTRST

این 3 فیوز مربوط به قسمت بوت لودر میکروکنترلر است. به طور مختصر، بوت لودر قسمتی از حافظه Flash است که می‌توان برنامه‌ای کوچک (فارغ از برنامه اصلی میکرو) بر روی آن نوشت که اجازه تغییر برنامه اصلی را می‌دهد. به عنوان مثال می‌توان به بوت لودر آردینو اشاره کرد که توسط رابط USART میکرو را پروگرام می‌کند. در مورد بوت لودر در قسمت بعدی آموزش بحث خواهیم کرد.

با فعال کردن فیوز بیت BOOTRST، پس از اتصال ولتاژ به میکرو یا ریست کردن آن، میکرو به ابتدای برنامه Boot Loader پرش کرده و ابتدا برنامه بوت اجرا می‌شود (نه برنامه اصلی). بنابراین اگر قصد استفاده از بوت لودر را ندارید، این فیوز بیت را در حالت پیش فرض (غیر فعال) رها کنید. دو فیوز بیت دیگر یعنی BOOTSZ0 و BOOTSZ1 مقدار حافظه بوت لودر را تنظیم می‌کنند که به صورت زیر است.

  • “00” در این حالت مقدار حافظه بوت 2048 بایت است.
  • “01” در این حالت مقدار حافظه بوت 1024 بایت است.
  • “10” در این حالت مقدار حافظه بوت 512 بایت است.
  • “11” در این حالت مقدار حافظه بوت 256 بایت است.

به عنوان مثال اگر مقدار “00” انتخاب شود، حافظه Flash به صورت زیر تقسیم بندی خواهد شد.

تقشیم بندی حافظه فلش در avr

نکته: اگر فیوز بیت BOOTRST غیر فعال باشد، مقادیر BOOTSZ0 و BOOTSZ1 بی اهمیت است و تمام حافظه فلش مختص برنامه اصلی خواهد بود.

فیوز بیت های توسعه یافته یا Extended Fuse

این دسته از فیوز ها در برخی از میکروکنترلر ها هستند و کاربرد آنچنانی ندارند. یک نمونه از آن ها فیوز بیت M103C است. در خانواده Atmega دو میکروکنترلر ATmega128 و Atmega103 وجود داشته که شباهتی زیاد و تفاوتی اندک با هم دارند. از این رو برای پروگرام کردن ATmega128 باید این فیوز را غیر فعال کرد و برای ATmega103 باید فعال شود.

لاک بیت ها

لاک بیت ها شامل 6 بیت هستند:

  • LB1 و LB2 که برای قفل کردن میکروکنترلر در برابر خواندن یا نوشتن توسط پروگرامر خارجی (پروگرامر سریال یا موازی) تنظیم می‌شوند.
  • BLB01 و BLB02 که مربوط به عدم دسترسی SPM و LPM به حافظه اصلی برنامه است.
  • BLB11 و BLB12 که مربوط به عدم دسترسی SPM و LPM به حافظه بوت لودر است.

نکته: SPM و LPM مربوط به کار با حافظه بوت لودر است و در جلسه آینده مفصل در مورد آن بحث خواهد شد. اما به صورت مختصر، SPM یعنی نوشتن اطلاعات از بوت لودر بر روی فلش و LPM یعنی خواندن اطلاعات فلش توسط بوت لودر.

لاک بیت های LB1 و LB2

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

  • “11” با این مقدار هیچگونه محدودیتی در خواندن یا نوشتن برنامه وجود ندارد (پیش فرض).
  • “10” با این مقدار دیگر نمی‌توان در حافظه فلش یا EEPROM نوشت.
  • “00” با این مقدار حافظه فلش یا EEPROM نه خوانده می‌شوند و نه قابلیت نوشتن دارند. منظور از خوانده نشدن این است که اگر بخواهیم برنامه را بخوانیم، پروگرامر مقادیری تصادفی و اشتباه را می‌خواند (میکرو محافظت شده است).

نکته: با Erase کردن میکروکنترلر تمامی لاک بیت ها غیر فعال می‌شوند.

لاک بیت های BLB01 و BLB02

این دو بیت دسترسی SPM و LPM به حافظه اصلی برنامه را کنترل می‌کند.

  • “11” هیچ گونه محدودیتی وجود ندارد.
  • “10” SPM اجازه نوشتن در برنامه اصلی حافظه را ندارد.
  • “01” LPM اجازه خواندن برنامه اصلی را ندارد.
  • “00” SPM اجازه نوشتن و LPM اجازه خواندن از برنامه اصلی را ندارد.

لاک بیت های BLB11 و BLB12

این دو بیت دسترسی SPM و LPM به حافظه بوت لودر را کنترل می‌کند.

  • “11” هیچ گونه محدودیتی وجود ندارد.
  • “10” SPM اجازه نوشتن در بوت لودر را ندارد.
  • “01” LPM اجازه خواندن بوت لودر را ندارد.
  • “00” SPM اجازه نوشتن و LPM اجازه خواندن از بوت لودر را ندارد.

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

محمد نصر
محمد نصر

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

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

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

  مزایای عضویت در رزدینو :

  • ● دسترسی به فایل های دانلودی
  • ● دریافت پشتیبانی برای محصولات
  • ● مشاهده تمام مطالب کاملا رایگان
  • ● دسترسی آسان به آپدیت محصولات
  • ● بهره مندی از تخفیف های ویژه کاربران