آموزش مقدماتی 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 سال سابقه کار در حوزه الکترونیک و همینطور برنامه‌نویسی میکروکنترلر به صورت پیشرفته دارم. سعی میکنم هر روز چیزهای جدید یاد بگیرم و خوشحال میشم با شما به اشتراک بگذارم.

20 پاسخ

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

    1. سلام. مچکرم از لطفتون.
      بله در نظر داریم در آینده مطالب کامل تر و بهتری روی سایت قرار بدیم.

  2. سلام وقت بخیر .. یه آموزش هم بزارید جهت ویرایش کد HEX و تبدیل کردن به کد آردینو .. ممنون میشم بنده خیلی خیلی مبتدیم ولی علاقمند به این حوزه هستم ممنون میشم که یه آموزش به زبان ساده بزارید ..

    1. سلام. امکان تبدیل فایل hex به C یا هیچ زبان دیگه‌ای وجود ندارد.

  3. با سلام
    مهندس سوالی دارم،اگر فرکانس دستگاهی که با atmega8 کار میکنه بالا بره
    آنوقت مشکل از سخت افزار هست یا از نرمافزار؟
    ممنون

    1. سلام. قاعدتاً باید یه سری علائم وجود داشته باشه که مطمئن بشیم فرکانس بالا رفته. بالا رفتن فرکانس یا بخاطر تغییرات در فیوزبیت اتفاق میفته یا اینکه فرکانس اعمالی به میکرو که از خارج تأمین می‌شده، تغییر کرده.

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

    1. بله با پروگرام کردن lb1 و lb2 هیچ پروگرامری نمی‌تواند برنامه میکرو را استخراج کند. با erase کردن میکرو علاوه بر برنامه مقدار لاک بیت ها هم ریست می‌شود.

    2. سلام مهندس جان فیوزبیت های اتمگا8باکریستال خارجی8مگاهرتزبه چه صورت باید باشه درprg isp

  5. سلام مهندس
    ببخشد اگر بخواهیم به میکرو کریستال خارجی ۱۶ مگ وصل کنیم چیو باید تنظیم کرد؟

    1. سلام مهندس ایسی atmega328p U دارم میخوام کریستال خارجی ۲۰مگا بهش وصل کنم برنامه پروگرامر ISP هستش کدوم فیوز بیت ها باید فعال و کدوم غیر فعال بشه.لطفا راهنمایی کنید.

      1. درود بر شما. مقدار فیوزبیت های CKSEL رو بر روی اعداد 1111 تنظیم کنید.

    2. سلام.میشه برای تنظیم اسیلاتور داخلی باید فیوز بیت تغیر داد.
      ی گروهی چیزی داری ما هم اد کنی ممنون.

      1. با سلام با تغییر فیوز بیت ها شما فرکانس کاری میکرو را تغییر خواهید داد. اگر تسلط کافی به فیوز بیت ها ندارید به آن ها دست نزنید! از مطالب آموزش قبلی استفاده نمایید

  6. سلام عرض ادب
    مهندس کدام لاک بیت ها باز باشن میشه برنامه رو کامل برداشت؟
    ممنون میشم راهنمایی کنید

  7. سلام وقت بخیر
    برای انتخاب کریستال 8 مگاهرتز خارجی برای ATmega8a فیوزبیت های داخل progisp رو باید روی چند تنظیم کنیم؟

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

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

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

✔️ دسترسی به فایل های دانلودی

✔️ دریافت پشتیبانی برای محصولات

✔️ مشاهده تمام مطالب کاملا رایگان

✔️ دسترسی آسان به آپدیت محصولات

✔️ بهره مندی از تخفیف های ویژه کاربران