AVR, توصیه شده, میکروکنترلر

بوت لودر bootloader جهت میکرو AVR

Sisoog Bootloader

بوت لودر Bootloader چیست؟

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

برای نمونه شما پروژه ای را تحویل کارفرما میدهید, و تعداد زیادی از اون را هم تولید میکنید.

بعد از مدتی تصمیم میگیرید که سیستم هاتون آپدیت بشند و یا اینکه یک باگ در سیستم مشاهده میکنید که تصمیم میگیرید که اون را رفع کنید!

نگید که قراره همه دستگاهها بازگشت داده بشند و یا اینکه قراره شما یک فایل هگز به کارفرما بدید و بگید برو با این پروگرمر به این شکل دستگاهها را آپدیت کن!

(و احیانا کارفرمای عزیز نیز اگر پول زیادی برای سخت افزار شما داده باشه میتونه فردا به راحتی از این سیستم یک کپی داشته باشد و تولید انبوه کنه 🙂   ( البته این صرفا یک شوخی و احتمال ضعیف هست ).

خب, دقیقا اینجا هست که بوت لودر برای شما میتواند رویایی ترین قابلیت میکرو شود.

از نظر تقسیم بندی و ساختار بوت لودر شامل سه قسمت مهم می باشد.

  • پشتیبانی میکرو کنترلر شما و قابلیت بوت لودر در میکرو شما, برای نمونه میکروهای 8051 از این قابلیت پشتیبانی نمیکرد. ( یعنی این قسمت یک قابلیت سخت افزاری در میکرو شما میباشد)
  • نرم افزاری که بر روی بوت لودر میکرو شما نوشته میشه ( تقریبا مشابه برنامه ای است که در برنامه نویسی اون میکرو استفاده میکنید)
  • نرم افزاری که قرار است اطلاعات برنامه را بر روی میکرو شما ارسال نماید (نرم افزار کامپیوتری یا میکروکنترلری مشابه)

بهترین مثالهایی که بصورت عمومی میتوان برای بحث بوت لودر زد:

بوت لودری هست که بر روی بردهای آردوینو Arduino استفاده میشود, این برنامه قابلیت این را دارد که توسط یک پورت کام شناخته شده اطللاعات برنامه را دریافت نموده و در داخل فلش میکرو شما ذخیره نماید بدون اینکه نیاز باشد پروگرامر خاصی به میکرو شما وصل گردد.

در دنیای دیجیتال میتوان بایوس کامپیوتر را هم شبیه بوت لودر تجسم کرد, برنامه ای بسیار ساده که وظیفه دارد بستری مناسب فراهم کند که برنامه اصلی ( مثلا ویندوز..) بر روی اون نصب بشه.

 

بوت لودر Bootloader چطور عمل میکند؟

قسمت بوت لودر در میکروکنترلر, آدرسی متفاوت از برنامه اصلی دارد و غالبا نیز حجم کمی از فلش به این قسمت (بوت لودر) اختصاص داده میشود.

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

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

برنامه نوشته شده در این قسمت باید شامل موارد زیر باشد:

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

 

بوت لودر و پروگرمر چه تفاوتی با هم دارند؟

 

از نظر ساختار معماری میتوان گقت این دو قسمت, آدرسی کاملا متفاوت در میکروکنترلر شما دارند و این امکان در بوت لودر وجود دارد که میتواند به فلش برنامه اصلی دسترسی پیدا نموده و آن را پاک و بازنویسی نماید.

از نظر قابلیتی نیز این امکان را میدهد که مبتنی بر نوع ارتباط در نظر گرفته شده در سخت افزار شما امکان پروگرام کردن در آینده را به سیستم خود اضافه نمایید.

مثلا از طریق بوت لودر و درگاه سریال, I2C , 1Wire و حتی مثلا از طریق GSM Modem و از راه دور توانایی پروگرام کردن را خواهید داشت و این قابلیت مهم بوت لودر هست بدون در نظر گرفتن سخت افزار اضافی میتوانید امکان پروگرام کردن میکرو خود و آپدیت آن را در آینده داشته باشید.

امنیت برنامه در بوت لودر

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

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

 

محاسن و کاربردهای بوت لودر Bootloader:

همانطور که در بالا ذکر شد مهمترین محاسن بوت لودر موارد زیر میباشد:

  • امکان حذف پروگرام جهت پروگرام های بعدی ( شبیه بردهای آردوینو)
  • امکان اینکریپت Encrypt کردن اطلاعات فلش برای واگذاری و ارسال فایل آپدیت به افراد دیگر
  • امکان آپدیت کردن میکرو از درگاههای متفاوت از جمله سریال , بلوتوث , وای فای WIFI , GPRS و …..

نکته مهم:

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

مثلا در صورتیکه شما یک پکت از درگاه سریال ارسال می کنید توسط CRC پکت ارسالی و دریافتی را از نظر درست بودن بررسی نمایید.

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

مطمئن باشید که برنامه فرستاده شده از نظر کارکرد درست است! برای نمونه شما اگر برنامه اشتباهی ارسال کنید دستگاه این برنامه را جایگزین خواهد نمود و علنا برنامه اصلی درستی به کار نخواهد افتاد تا سیستم شما امکان بروز اوری و تصحیح داشته باشد.

در دستگاههای حساس ساختار بوت لودر شما میتواند همزمان از چند بستر امکان بروزآوری داشته باشد: مثلا از بستر سریال, از بستر GPRS  و یا حافظه خارجی مثل مموری کارت… که این امکان را میدهد در صورت بوجود اومدن مشکل بتوان از یک بستر دیگر عملیات بروز آوری انجام گیرد.

 

 

بوت لودر bootloader مخصوص AVR برای کد ویژن CodeVision Avr

در زیر سعی داریم یک نمونه بوت لودر که میتوان بر روی اکثر مدل های AVR اجرا نمود را به همراه سورس کدویژن codevision و برنامه تحت ویندوز تفسیر کنیم.

در ابتدا می ریم سراغ برنامه ای که باید روی میکرو AVR ریخته بشه و نحوه پروگرام اون و نکات مربوط را ذکر میکنیم.

به عنوان مثال نیز سعی میکنیم در زیر یک برنامه بوت لودر تست بر روی سخت افزار  ATMEGA128 و بر روی USRAT1 ریخته و آن پیوست نماییم.

لازم به ذکر است که منبع اصلی برنامه میکرو این پروژه از سایت MicroSyl.com عاریه گرفته شده است و با تغییراتی در نحوه ارتباط و همچنین منطبق کردن آن با کدویژن و نوشتن برنامه اختصاصی تحت ویندوز Sisoogloader در وب سایت سیسوگ منتشر میگردد.

 

codevision bootloader

ساختار فلش و بوت لودر در میکروهای AVR

در ایتدا باید بدونیم که لازم هست در قسمت فیوز بیت ها یک سری تغییرات را اعمال کنیم تا میکرو ما هنگام  ریستارت اول سراغ بوت لودر برود  و برنامه اونجا را اجرا نماید  و صد البته باید حتما در برنامه بوت لودر آدرس دهی مناسبی داشته باشیم تا بعد از اتمام کار بوت لودر میکرو سراغ برنامه اصلی برود که با دستور  زیر این کار انجام می گردد:

 

پس طیق صحبت بالا ابتدا ما بیت BOOTRST را فعال میکنیم تا میکرو به محض ریستارت شدن میکرو وارد اجرای برنامه در قسمت بوت لودر شود

 

BOOTRST BOOTloader

 

سپس لازم است که سایز بوت لودر را توسط BootSZ0 , BootSZ1 تعیین کنیم طبق جدول زیر:

BootSZ Bootloader Bootloader

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

 

AVR Bootloader

 

خب اجازه بدید الان برنامه میکرو را هم یک بررسی کوتاه داشته باشیم..

در برنامه پیوست شده شما باید در فایل Bootloader.h نوع میکرو خود را انتخاب کنید. که ما نیز میکرو تست خودمون یعنی  ATMEGA128 را انتخاب نموده ایم.

 

سپس لازم است که تنظیمات سریال را تنظیم کنید از جمله باودریت و فرکانس …

در زیر  تابع MAIN  برنامه را مشاهده میکنید:

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

سپس طبق یک تراکنش که شامل یک تبادل اطلاعات با برنامه ویندوز Sisoogloader هست میتوانید برنامه اصلی را به صورت صفحه به صفجه بر روی میکرو بریزید.

تابع WriteFlashPage عکلیات پروگرام صفحه به صفحه را انجام میدهد.

 

 

در زیر نیز نمایی از برنامه ویندوز  SisoogLoader را مشاهده میکنید.

Sisoogloader Windows App

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

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

 

 

دانلود برنامه ویندوز بوت لودر SisoogLoader

Sisoogtloader-AVR.zip

دانلود بوت لودر سیسوگ مخصوص کد ویژن

Sisoog-Bootloadr-AVR-Codevision.zip

 

با توجه به استقبال کاربران و درخواست آنها

سورس نرم افزار ویندوز بوت لودر SisoogLoader که به زبان C# نوشته شده به این پست اضافه گردید.

این برنامه با ویژوال استادیو 2013 کامپایل گردیده است.

Sisoog-Loader.zip

 

 

 

 

 

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

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

76 دیدگاه در “بوت لودر bootloader جهت میکرو AVR

  1. Avatar for نخعی نخعی گفت:

    سلام
    تمامی این فرآیند ها و نرم افزار روی اتمل استودیو هم قابل پیاده سازی هستند یا فقط مختص کدویژن هستند؟

  2. Avatar for hamed malek hamed malek گفت:

    سلام با تشکر از اموزش خوبتون ای کاش در مورد نحوه چگونگی کدگذاری روی فایل hex و چگونگی اضافه کردن این قابلیت کد گزاری روی بوت لودر میکرو هم توضیح میدادید باتشکر

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

      این رمزنگاری میتونه از تعویض چند تا بیت ساده در یک بایت شروع بشه تا الگوریتمهای امن مثل AES128 یا ..
      شما فایل را رمزنگاری میکنید و یک فایل جدید اسمش دیگه هگز نیست را به کسی که قرار دستگاه اپدیت کنه میدید

      مسئله اینه که شما هر Code ای که روی فایل انجام میدید باید برعکسش را در میکرو انجام بدید و مطمئن هم بشید که خروجی درست خواهد بود

  3. Avatar for مریم مریم گفت:

    سلام . ببخشید در مورد arduino mega R3 با ای سی 2560 ، من زمانی که بوت لودر رو می ریزم روی میکروم و بعد با IDE پروگرام می کنم بار اول برنامه آردوینو ریخته می شود ولی بار دوم ارور می دهد و باید دوباره بوت لودر رو بریزم تا بشه دوباره میکرو رو پروگرام کنم . ممنون می شم اگر بتونین راهنماییم کنین تا مشکلم حل بشه.

    1. Avatar for Zeus Zeus گفت:

      سلام دوست عزیز
      از چه بوت لودری استفاده میکنید و از چه طریقی پروگرام میکنید برد رو ؟

      1. Avatar for مریم مریم گفت:

        با سلام
        بوت لودر از مسیر نصب آردوینو برداشته شده و با پروگرامر hattel ریخته می شود.
        C:\Program Files (x86)\Arduino\hardware\arduino\avr\bootloaders\stk500v2
        –stk500boot_v2_mega2560 —
        فیوز بیت از مسیر نصب آردوینو برداشته شده و با پروگرامر hattel تنظیم می شود.
        C:\Program Files (x86)\Arduino\hardware\arduino\avr
        –boards–
        بعد پروگرامر جدا شده و بوسیله rxtx پایه آردوینو uno (میکرو uno برداشته می شود) و از طریق usb پروگرام انجام می گردد.
        البته از طریق دیگری مشکلم حل شده (ساخت برنامه ای که بوت لودر هم دارد و فلش آن روی میکرو با hattel ) ولی چرا این روش جواب نمی ده برام سواله وچون قبلا روی uno جواب داده.
        با سپاس فراوان بابت وقتی که گذاشتید. موفق باشید.

        1. Avatar for Zeus Zeus گفت:

          سلام
          الان این موردی که شما باهاش مواجه شدید مقداری عجیبه و من فکر کنم یه جای کار قلقی وجود دارد
          شما برنامه تون رو با چه کامپایلری میسازید ؟‌از خود آردوینو استفاده میکنید ؟
          البته شاید فیوز بیت ها تنظیمات خاصی نداشته باتشن که من در مورد این میکرو نمیدونم باید برم دیتاشیتش رو مطالعه کنم

          1. Avatar for مریم مریم گفت:

            سلام
            بله ، از خود ide آردوینو استفاده می کنم.

        2. Avatar for سید علی... سید علی... گفت:

          باسلام
          ببخشید با استفاده از USB باید فایل hex رو به میکرو اعمال کرد یا چیز دیگه ای رو؟

  4. Avatar for moein moein گفت:

    سلام
    ممنون از توضیحات کامل و خوبتون
    اکثر جاها فقط فایل هگز میکرو هست ولی شما کلی وقت گذاشتید و سورسش رو با کد ویژن قرار دادید
    ولی کاش برای میکرو پر کاربردی مثل mega 8 هم جواب میداد…
    برنامه برای mega8 کلی خطا میگیره
    نظرات رو خوندم #define IVCE 0 هم اضافه کردم به اول برنامه main ولی مشکل حل نشد

    1. Avatar for zeus zeus گفت:

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

  5. Avatar for یزدخواستی یزدخواستی گفت:

    سلام و خسته نباشید
    چیزی که تو قضیه بوت لودر اهمیت داره اینه که بتونیم از راه دور میکرو رو پروگرام کنیم میشه یه مقاله بذارید مخصوص کدویژن که یا با وای فای یا با بلوتوت این کارو انجام داد آیا میشه این برنامه ویندوز رو از طریق وای فای به میکرو جهت عملیات بوت متصل کرد؟
    آیا میشه با چیپ های simcom و از طریق GPRS برنامه هگز ر گرفت و روی میکرو اعمال کرد لطفا مقاله بذارید تشکر
    میکرو من atmega128 و نرم افزارم کدویژن هستش

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

      سلام دوست عزیز روند بوتلودر همین هست فقط شما باید بتونید فایل را دانلود کنید و بقیه مسیر میتونه شبیه این چیزی باشه که الان منتشر شده

  6. Avatar for اکبر اکبر گفت:

    سلام خسته نباشید من هر میکروavrرو با آردینو بوتلودر انجام میدم پیغام error while burning bootloderمینویسه لظفآ راهنمایی فرمایید ممنون میشم

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

      سلام فکر کنم مشکل از پروگرمر شما باشه

  7. Avatar for حسین حسین گفت:

    سلام ممنون بابت مطلب مفیدتون.
    میشه لطفا یه مقاله در مورد اپدیت وایرلس میکرو stm با ماژول sim بذارید؟ یا اگه اموزشی در این رابطه میشناسید معرفی کنید؟

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

      سلام انشاله سعی مون را خواهیم کرد

  8. Avatar for علی تقی نژاد علی تقی نژاد گفت:

    سلام وقت بخیر.ممنون از مطالب خوبتون. من یک برنامه BLINK برای قسمت بوت لودر نوشتم که وقتی سیستم رو ریست میکنم یک ال ای دی شروع کنه به چشمک زدن و 10 تا چشمک بزنه و بعد جامپ بشه به اول حافظه فلش. فیوز بیت ها به شرح زیر است.
    BOOTSZ0=0;BOOTSZ1=0;BOOTRST=0;BODEN=0;SUT=0;CKOPT=0
    کدویژن استفاده میکنم و از درستی برنامه blink هم مطمین هستم. از قسمت configure و program type گزینه مربوط به بوت لودر 4096 word رو انتخاب میکنم.
    از پروگرامر هاتل استفاده میکنم و آدرس رو در کادر مربوط f000 تا ffff انتخاب میکنم و پروگرامر هم برنامه رو پروگرام میکنه ولی نمیدونم چرا وقتی میکرو ریست میکنم قسمت بوت لودر اجرا نمیشه.
    همین برنامه رو وقتی از configure و program type گزینه application رو انتخاب میکنم و از آدرس 0000 تا ffff پروگرام میکنم برنامه به درستی جواب میده!
    خدمت شما عرض کنم که برنامه رو وقتی برای بوت لودر مینویسم قسمت چشمک زدن تو حلقه while نیست.فقط میگم ده بار چشمک بزنه و بعد جامپ بشه اول حافظه فلش. نمیدونم مشکل از کجاست؟

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

      سلام پروژتون را یه جا اپلود کنید بفرستید تا یک بررسی کنیم

      1. Avatar for علی تقی نژاد علی تقی نژاد گفت:

        سلام مجدد
        فایل شامل دوتا برنامه است که یک برنامه مربوط به بوت لودر و از آدرس F000 تا FFFF نوشته میشه و دیگری برنامه فلش application هستش که از آدرس 0 تا EFFF نوشته میشه . پروگرامرم هاتل هستش و از کادر بالا که مربوط به آدرس فلش هست، آدرس هایی که ذکر کردم رو وارد میکنم. پروژه بوت لودرم از قسمت CONFIGURE و PROGRAM TYPE گزینه bootloder 4095 فعاله و برتامه فلش گزینه application . تشکر
        https://www.dropbox.com/s/vrs08idpz4vxhwf/BOOT%20LOADER%20TEST.rar?dl=0

  9. Avatar for محمد محمد گفت:

    سلام ممنون از مطالب خوب و کاربردی که میزارید.
    شما در روند تنظیم فیوز بیت ها ، BOOTRST و BOOTSIZE هارو تغییر دادین که اولی باعث شروع برنامه از قسمت بوت لودر هنگام ریستارت و دومی برای تنظیم میزان حافظه بوت لودر بود . من هنوز متوجه نشدم که تنظیمات بالا چرا باعث تغییر برنامه بوت لودر میشه؟ یعنی میکرو از کجا میفهمه این برنامه مخصوص بوت لودر هست و از آدرس X تا آدرس Y باید نوشته بشه؟
    منظورم اینه که میکرو چجوری فرق بین برنامه بوت لودر و برنامه عادی برای فلش رو متوجه میشه؟

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

      خب خودتون توضیح دادید
      با تنظیم فیوز بیت ها برنامه مبپره برنامه بوت لودر را اجرا میکنه
      در اونجا ما میبنیم اگر روال اپدیت فریمور فعال هست خب میریم اپدیت انجام میدیم اگر نه میریم به برنامه اصلی
      برنامه بوت لودر دقیقا برنامه ای هست شبیه برنامه میکرو و شما دسترسی رایت برنامه روی فلش اصلی را هم دارید
      هر کدام از قسمت های میکرو میتونه فعال بشه و شما استفاده کنید

      1. Avatar for محمد محمد گفت:

        ممنون پس طبق فرمایش شما اگر من موقع پروگرام کردن میکرو اشتباهی بیت BOOTRST رو فعال کنم ، برنامم در قسمت بوت لودر نوشته میشه درسته؟

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

          When the BOOTRST Fuse is programmed, the device will jump to the Boot Loader address at
          reset,
          اگر این را فعال کنید برنامه موقع ریست میره و ا سمت بوت لودر لود میشه ولی برای اینکه تعیین کنید کجا ریخته بشه مثلا توی کدویژن تو قسمت کانفیگ تو قسمت Program Type نوع بوت لودر را انتخاب میکنید

          1. Avatar for محمد محمد گفت:

            احتمالا من جایی رو دارم اشتباه درک میکنم و هنوز دید درستی نسبت به قضیه پیدا نکردم.
            اگر قرار باشه برنامه ای برای بوت لودر نوشته بشه باید دقیقا در اول حافظه بوت لودر قرار بگیره.مثلا اگر BOOTSZ0,BOOTSZ1 یک و یک باشن باید این برنامه ای که نوشتین از آدرس FE00 تا FFFF قرار بگیره. اینکه شما چجوری این برنامه رو در این آدرس قرار میدین رو هنوز درک نکردم. نمیدونم این تنظیمات رو سمت پروگرامر باید قرار بدیم یا کاره دیگه ای باید انجام بدیم.اگر سمت پروگرامر هست که من از هاتل استفاده میکنم ممنون میشم توضیحاتشو بدین.
            کلا هم یک فیوز بیت BOOTRST و BOOTSZ داریم که اولی برای شروع برنامه از اول برنامه بوت هست و دومی برای سایز بوت لودر و ربطی به آدرس قرار گیری برنامه نداره.
            ببخشید من زیاد سوال پرسیدم تو این بخش . قطعا از حوصله شما هم خارج شده این سوال ها . عذرخواهم. اگر تمایلی به پخش این سوال نداشتین ممنون میشم با ایمیل در ارتباط باشین.

          2. Avatar for زئوس Zeus زئوس Zeus گفت:

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

  10. Avatar for محمد علی محمد علی گفت:

    سلام وقتتون بخیر
    من یک مسیله رو متوجه نشدم . شما گفتین “ابتدا فایل را کاملا دریافت کنید سپس کل فایل ریخته شده را از نظر صحت اطلاعات دریافتی چک نمایید”.
    منظور از کل فایل چیه؟ یعنی اول همه اطلاعاتی که میخوایم روی حافظه فلش قرار بگیره رو دریافت کنم بعد بریزم روی حافظه ؟

    سوال دوم: بعد از آپلود کردن بوت لودر جدید ، برای پروگرام چطوری باید میکرو ریست بشه؟ منظورم اینه که چطوری میکرو متوجه کنیم که برنامه جدید قراره ریخته بشه تا ریست کنه و به حافظه بوت بره! نرم افزاری باید این کار رو انجام بدیم؟

    سوال سوم: فرض کنیم من بوت لودر جدید رو ریختم ولی بعدش پشیمون شدم ” :))) ” چطوری میتونم بوت لودری که قبلا بوده رو روش آپلود کنم؟

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

      سلام دوست عزیز
      در مورد سوال اول بله این کار به دلیل این هست که هیچ مشکلی در مسیر آپدیت پیش نیاد و برنامه شما احیانا از بین نره کلا , البته اگر راهکارهای خاصی را هم داشته باشید بخصوص اینکه اگر مشکلی در فایل بود ساختار استارت دوباره برنامه را داشته باشید میتونید این کار را انجام ندید
      دوم : میتونید نرم افزاری باشه یا سخت افزاری باشه
      سوم : البته مواردی که ما گفتیم اپدیت بوت لودر نبود اپدیت برنامه اصلی بود و خب قاعدتا وقتی شما برنامه خودتون را ریختید برنامه قبلی مثل یک برنامه جدید قابل دستیابی هست

      1. Avatar for محمد علی محمد علی گفت:

        ممنون از پاسختون .
        شما نوشتین که حافظه بوت لودر محدودیت داره. فرض کنید من میخوام یک برنامه فلش برای ATMEGA 128 آپلود کنم که حجمی حدود 120 کیلو بایت داره. منظورتون اینه که من تمام این 120 کیلو بایت رو دریافت کنم و در صورت صحیح بودن شروع کنم به نوشتن در حافظه فلش ؟ این حجم دیتا که در حافظه بوت لودر جا نمیشه.
        سوال سومم رو فکر میکنم نتونستم خوب بپرسم. کدی که در بالا بررسیش کردین قراره به جای برنامه ای که به صورت دیفالت در حافظه بوت لودر میکرو هست قرار بگیره؟ یعنی حافظه بوت لودر میکرو رو پاک میکنیم و این کد رو جاش قرار میدیم؟

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

          بله جا نمیشه و شما بهتره از یک فلش خارجی استفاده کنید
          البته گفتم شاید بتونید روال ها و ارتباطات را داخل همون بوت لودر قرار بدید و اگر هم وسط کار مشکلی پیش بیاد خب از اول پیش میره مثل همین بوت لودری که الان ما سمپلش را قرار دادیم
          پروتکلهای متفاوت جهت پروگرام کردن AVR داخل Bootloader ای که ما در موردش صحبت میکنیم نیست و شما همیشه میتونید از اون هم استفاده کنید

      2. Avatar for محمد علی محمد علی گفت:

        ممنون از پاسختون
        منظورم از سوال سومم رو نتونستم درست برسونم. میکرو کنترلر به صورت دیفالت یک برنامه در بوت لودر خودش داره درسته؟چیزی که من برداشت کردم اینه که شما برنامه که در بالا توضیحش دادین رو قراره به جای برنامه بوت لودر دیفالت میکرو قرار بدین. یعنی برنامه قبلی که در حافظه بوت لودر بود رو پاک کنین و این برنامه جدید که نوشتین رو قرار بدین.
        حالا سوالم رو مجدد میپرسم.
        سوال اول:میکرو mega 128 ای داریم که قراره 128 کیلو بایت برنامه فلش بهش بدیم. بوت لودر مگه چقدر حافظه داره که من تمام حجم فایل فلش رو دریافت کنم و بعد از اوکی بودن اطلاعات دریافتی شروع کنم به نوشتن در حافظه فلش؟

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

          خدمتتون عرض کردم اینکه شما حتما به حافظه خارجی در صورتیکه سناریو دریافت کامل را اجرا میکنید نیاز دارید و داخل خود میکرو احتمالا نمیتونید
          و مجدد میگم اجباری نیست و میتونید نباشه ولی باید روال بازگشت به اول وجود داشته باشه

  11. Avatar for بهنام خراسانی بهنام خراسانی گفت:

    سلام درود فراوان، مهندس جان امکانش هست که از طریق اردوینو روی atmega8 تا atmega128 بوت لودر کرد؟

    1. Avatar for زئوس Zeus زئوس Zeus گفت:

      فکر میکنم امکانش باشه – باید بیشتر سرچ کنید.

  12. Avatar for وحید ستاری وحید ستاری گفت:

    با سلام و تشکر از مطالب بسیار مفیدتون
    من یه مشکلی دارم لطفا راهنمایی بفرمایید،
    وقتی میخوام عملیات پاک کردن و نوشتن روی فلش رو انجام بدم، در پروتئوس با این خطا مواجه میشم
    “PC=0x76B8 [AVR CPU] SELFPRGEN is cleared by time-out”
    و اینکه عملیات ارسال صفحه به صفحه از کامپیوتر رو در کدویژن خودم بصورت دستی شبیه سازی کردم به اینصورت که فقط میخوام صفحه اول رو پاک و رایت کنم
    دیتای صفحه اول رو هم اینجوری دادم
    “C9400030C9430060C9400000C9400000C9400000C9400000C9400000C9400000C9400000C9400000C9400000C9417060C9400000C942C030C9400000C9400000C9400000C9400000C9400000C9400000C9400006400C80090012003F8FFFCFFFEFFFFFF0000000000000000411F000054502D4C494E4B5F463741373642303931343931363132373838373231003139322E3136382E312E31303100342E300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023257328257329230D0A00245273704765744366672C002B4349505354414D41433A0041540D0A004154970000000000000000000000”
    دقیقا لاین اولی هستش که نرم افزاری که شما گذاشتید همین پست تولید میکنه و میفرسته سمت میکرو تا میکرو به اولین صفحه رایت کنه
    و اینکه شماره صفحه رو هم بصورت دستی صفر دادم تا اولین صفحه رایت کنه
    ولی وقتی به اولین کد اسمبل میرسه واسه پاک کردن فلش یا رایت، هشداری که در بالا ذکر کردم رو میده
    و اینکه در شبیه سازی نگا میکنم اصلا حافظه فلش رو نه پاک میکنه و نه رایت
    لطفا به راهنمایی بکنید

    1. Avatar for زئوس Zeus زئوس Zeus گفت:

      فکر نمیکنم قابلیت شبیه سازی پورتئوس بوت لودر رو پشتیبانی بکنه !!!

  13. Avatar for vahid vahid گفت:

    سلام و منون بابت مطلبتون برنامه sisoogloder رو در ویندوز10 اجرا می کنم باز نمیشه میشه راهنمایی کنید . توی ویندوز 7 مشکلی نداره

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

      این نرم افزار با C شارپ نوشته شده به احتمال زیاد یک سری فایلهایی هست که باید نصب بشه که برنامه اجرا بشه
      چه پیغام خطایی میده؟

  14. Avatar for امیرسینا امیرسینا گفت:

    سلام. ممنون از آموزش خوبتون. خیلی دنبال یه آموزش ساده و گویا میگشتم. فقط دو تا نکته:
    ۱- سه تا لینک آخر مقاله (برنامه ویندوز، بوت لودر، سورس برنامه ویندوز) اشکال داره. با کروم ارور Failed – Network error و با Free Download Manager ارور Remote server closed connection میده. به هر سه تا مخصوصا آخری نیاز دارم؛ چون دارم یه برنامه GUI با ویژوال استودیو برای ارتباط UART با میکرو میسازم ولی از اونجایی که تو ویژوال استودیو تازه‌کار هستم، کلا قاطی کردم! لطفا لینک‌ها رو تعمیر کنید.
    ۲- هر چند که CodeVision و Atmel Studio هر دو به زبان C هستن و کمی فرق دارن ولی کاش آموزش‌ها با Atmel Studio باشه.
    بحث Encrypt کردن هم جالب بود. اگه میشه یه مقدار بیشتر توضیح بدین.
    با تشکر.

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

      سلام دوست عزیز
      لینک ها اوکی شدند ممنون میشم بررسی فرمائید
      دیگه تبدیل کدویژن به ویژوال استادیو دیگه با خودتون 🙂

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

  15. Avatar for امین امین گفت:

    سلام
    من با پروگرمر tnm کد آماده را روی برد میریزم و تمامی مراحل را مشابه توضیحات شما انجام میدم ولی وقتی برنامه را اجرا میکنم تارگت شناخته نمیشود و عملا کار نمیکند میخواستم بدونم ممکنه مشکل از نوع پروگرمر باشه مثلا نیازه که حتما با stk500 پروگرم اولیه رو انجام بدم؟
    چون تمام فیوز بیت ها هم درست ست کردم و خیلی عجله دارم لطفا راهنمایی کنید با تشکر

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

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

      1. Avatar for امین امین گفت:

        ممنون بابت پاسخگویی
        من هم با atmega 128 کار میکنم و bootrst را enable (یعنی 0) قرار میدم سایز بوت لودر هم که روی ماکسیمم مقدار و همون حالت دیفالت قرار داره
        بعید میدونم مشکل از فیوز بیت ها باشه.چیز دیگه ای بنظرتون نمیاد که مشکل از اون باشه؟

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

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

          1. Avatar for امین امین گفت:

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

          2. Avatar for Sisoog OS Sisoog OS گفت:

            پیش فرض روی یوزارت صفر هست
            اگر همه موارد اوکی هست
            لحظه ای که میکرو ریستارت میشه میکروی شما چند کاراکتر ارسال میکنه
            که یکی از اونها کاراکتر زیر هست
            ببنید این را باد ریت مناسب تو کامپیوتر درست دریافت میکنید
            TxChar(‘>’);

  16. Avatar for نوید نوید گفت:

    سلام وقت بخیر.
    میشه بگین این عکس های زیبا برای هر مطلبتون رو کی تهیه میکنه؟؟؟؟؟
    این همه هنر واقعا جالبه

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

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

  17. Avatar for کاظم کاظم گفت:

    سلام میشه درباره بوت لودر stm32 هم مطلب بزارید ! نحوه کدنویسیش و اجراش

    1. Avatar for زئوس Zeus زئوس Zeus گفت:

      سلام دوست عزیز
      در دستور کار قرار داره این مساله 🙂

  18. Avatar for korosh korosh گفت:

    عالی مفید بود

    1. Avatar for زئوس Zeus زئوس Zeus گفت:

      خواهش میکنیم دوست عزیز

  19. Avatar for امین امین گفت:

    سلام ممنون از زحمت وتلاش شما و آموزش این مبحث مهم

    1. Avatar for زئوس Zeus زئوس Zeus گفت:

      خواهش میکنم دوست عزیز 🙂

  20. Avatar for پوریا پوریا گفت:

    سلام
    بابت مطالب عالی سایتتون ازتون تشکر می کنم
    سوالی که دارم اینه که خواستم تنظیمات این بوت لودر را برای mega8 انجام بدم ولی با ارور های کامپایلر مواجه شدم می شه راهنمایی کنید
    با تشکر

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

      سلام دوست عزیز
      پروژتون را که تغییر دادید یه جا اپلود کنید و لینکش را بزارید تا خدمتتون بگم

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

          دوست عزیز با قرار دادن
          #define IVCE 0
          این مشکل حل میشه
          البته بعد از این مشکل به علت اینکه بنده نرم افزار را مبتنی بر سکتورهای 256 بایتی قرار داده ام ( بحث رمز نگاری مطرح بود) کمی زمانبر هست که بر روی Mega8 نیز اوکی کنم
          پیشنهادم این هست که از منبع اصلی که در متن هم به اون اشاره کردم استفاده کنید

  21. Avatar for پوریا پوریا گفت:

    سلام تشکر از برنامه خوبتون
    بنده هم از مگا 128a استفاده میکنم و پروگرمرم TNM2000 هست منتهی هر کار میکنم تارکت رو پیدا نمیکنه و عملااا بوت رو پیدا نمیکنه تا کانکت شم
    لطفا راهنمایی بفرمایید

    1. Avatar for زئوس Zeus زئوس Zeus گفت:

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

  22. Avatar for دهقان دهقان گفت:

    سلام. آیا امکانش هست که سورس برنامه ویندوز بوت لودر SisoogLoader را بدید .

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

      سلام
      سعی میکنیم دوست عزیز هفته آینده سورس ویندوز را منتشر کنیم

  23. Avatar for ehsan ehsan گفت:

    سلام خسته نباشید، چیزی که من متوجه شدم page number توسط برنامه ویندوز مشخص میشه. می خواستم بدونم ایا کل ریجستر z ((ادرس wordها و ادرس page ها)) رو مشخص میکنه یا فقط قسمت ادرس دهی page رو؟دقیقا برنامه ویندوز برای میکرو چی ارسال میکنه؟ سوال بعدی اینه که چطوری میشه یه counter گذاشت که خود میکرو page ها رو دونه دونه write کنه؟ مثلا اگه متغییر pageadress رو 2 تا 2 تا اضافه کنم جای دیگه برنامه به مشکل نمیخورم؟
    من میخوام میکرو رو با mmc/sd card توسط کدویژن پروگرم کنم چیزی تو اینترنت پیدا نکردم گفتم بشینم برنامه شمارو تغییر بدم، لطفا اگه میتونید کمک کنید

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

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

      ما سعی میکنم در اولین فرصت یک سری اطلاعات مربوط به تبادل شدن سریال سیستم با میکرو را خدمتتون اعلام کنیم
      شما لازمه برای اینکه میکرو را توسط MMC پروگرم کنید لازمه موارد زیر را عملیاتی کنید
      اول اینکه در برنامه بوت لودر MMC را اینیت کنید و همچنین اگر لازمه فت فایل سیستم را
      سپس فایل مورد نظر را اگر وجود داشت پیدا کرده و شروع کنید صفجه صفجه بخونید و دیگه تبادل اطلاعات شبیه انچه که در سریال میبنید وجود نخواهد داشت

      1. Avatar for HOSI HOSI گفت:

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

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

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

  24. Avatar for hosi hosi گفت:

    ممنون .
    عزیز اگه ما بخوایم با یکی میکرو دیگه دیتا به صورت سریال بفرستیم باید چیکار کنیم.
    مثلا دیتا روی مموری بریزیم یا اینکه با یک ماژول مثل nrf دیتا میکرو اول بریزه و روی میکرو دوم بریزه باید چیکار کنیم
    نرم افزار کامپیوتری اول چی میفرسته .

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

      خواهش میکنم دوست عزیز
      کل فرایند بوت لودر سعی شده توضیح داده بشه
      کلیت کاری هم که لازمه شما انجام بدید این هست که توسط اون ارتباط سخت افزاری پکت ها را دریافت کنید و به تابع write_page فرستاده و منتظر باشید که برنامه جایگزین بشه
      هیچ فرقی نمیکنه شما از چه بستری تمایل دارید اون را اپدیت کنید
      بله متاسفانه کل تبادل را فرصت نشد در یک فایل مجزا پیوست نماییم ولی اگر یکبار پورت سریال را هم اسنیف کنید میتونید به تمام پکتهای دریافت و ارسال شده دسترسی پیدا کنید
      البته داخل برنامه هم همه چیز تقریبا مشخص هست

  25. Avatar for ehsan ehsan گفت:

    سلام، ممنون بابت زحماتتون

    1. Avatar for زئوس Zeus زئوس Zeus گفت:

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

    2. Avatar for سوران سوران گفت:

      تشکر از پست مفیدتون. درباره ota(over the air programming)هم اگر یک مقاله منتشر بفرمایید خیلی مورد استقبال قرار خواهد گرفت. تشکر

      1. Avatar for زئوس Zeus زئوس Zeus گفت:

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

        1. Avatar for vahid vahid گفت:

          با سلام و تشکر از مطالب مفیدتون من با استفاده از این فایل برای میکرو mega64 و mega 128 بوت لودر درست کردن و به درستی کار می کنند ولی به تازگی نیاز شده است که برای mega 2560 بوت لودر بسازم ولی هنگامی که این میکرو انتخاب می کنم این خطا داده میشه
          can not open #include file:iom256v.h
          لطفا دوستان اگه تجربه ای دادن راهنمایی بفرمایند

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

            سلام دوست عزیز
            در قسمتی که خطا را میده یه جای اون خط این را قرار بدید

            #include mega2560.h
            فکر میکنم مشکلتون حل بشه

          2. Avatar for vahid vahid گفت:

            با سلام مشکل حل شد در فایل bootLoader.h قسمت دیفاین میکرو 2560 این تغییرات رو دادم مشکل حل شد #include “iom2560v.h” رو به #include “Mega2560.h” تغییر دادم و این دیفاین رو هم اضافه کردم #define IVCE 0 سپس تابع check_source_reset رو با توجه به اینکه رجیستر چک کردن منابع ریست در این میکرو نامش متفاوت است تغییر دادم و مشکل حل شد گفتن تجربه ام رو اینجا ذکر کنم برای بقیه دوستان

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

            سلام ممنون از شما دوست عزیز

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

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