بوت لودر 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 در وب سایت سیسوگ منتشر میگردد.
در ایتدا باید بدونیم که لازم هست در قسمت فیوز بیت ها یک سری تغییرات را اعمال کنیم تا میکرو ما هنگام ریستارت اول سراغ بوت لودر برود و برنامه اونجا را اجرا نماید و صد البته باید حتما در برنامه بوت لودر آدرس دهی مناسبی داشته باشیم تا بعد از اتمام کار بوت لودر میکرو سراغ برنامه اصلی برود که با دستور زیر این کار انجام می گردد:
1 | #asm("jmp 0x0000"); // Run application code |
پس طیق صحبت بالا ابتدا ما بیت BOOTRST را فعال میکنیم تا میکرو به محض ریستارت شدن میکرو وارد اجرای برنامه در قسمت بوت لودر شود
سپس لازم است که سایز بوت لودر را توسط BootSZ0 , BootSZ1 تعیین کنیم طبق جدول زیر:
در کل نتیجه اعمال فیوز بیت ها بر روی سخت افزار تست ما را در زیر مشاهده مینمایید.
خب اجازه بدید الان برنامه میکرو را هم یک بررسی کوتاه داشته باشیم..
در برنامه پیوست شده شما باید در فایل Bootloader.h نوع میکرو خود را انتخاب کنید. که ما نیز میکرو تست خودمون یعنی ATMEGA128 را انتخاب نموده ایم.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | //#define MEGATYPE Mega8 //#define MEGATYPE Mega16 //#define MEGATYPE Mega64 #define MEGATYPE Mega128 //#define MEGATYPE Mega32 //#define MEGATYPE Mega162 //#define MEGATYPE Mega169 //#define MEGATYPE Mega8515 //#define MEGATYPE Mega8535 //#define MEGATYPE Mega163 //#define MEGATYPE Mega323 //#define MEGATYPE Mega48 //#define MEGATYPE Mega88 //#define MEGATYPE Mega168 //#define MEGATYPE Mega165 //#define MEGATYPE Mega3250 //#define MEGATYPE Mega6450 //#define MEGATYPE Mega3290 //#define MEGATYPE Mega6490 //#define MEGATYPE Mega406 //#define MEGATYPE Mega640 //#define MEGATYPE Mega1280 //#define MEGATYPE Mega2560 //#define MEGATYPE MCAN128 //#define MEGATYPE Mega164 //#define MEGATYPE Mega328 //#define MEGATYPE Mega324 //#define MEGATYPE Mega325 //#define MEGATYPE Mega644 //#define MEGATYPE Mega645 //#define MEGATYPE Mega1281 //#define MEGATYPE Mega2561 //#define MEGATYPE Mega404 //#define MEGATYPE MUSB1286 //#define MEGATYPE MUSB1287 //#define MEGATYPE MUSB162 //#define MEGATYPE MUSB646 //#define MEGATYPE MUSB647 //#define MEGATYPE MUSB82 //#define MEGATYPE MCAN32 //#define MEGATYPE MCAN64 //#define MEGATYPE Mega329 //#define MEGATYPE Mega649 //#define MEGATYPE Mega256 |
سپس لازم است که تنظیمات سریال را تنظیم کنید از جمله باودریت و فرکانس …
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | //***************************************************************************** // MCU Frequency //***************************************************************************** #define XTAL 7372800 //***************************************************************************** // Bootload on UART x //***************************************************************************** #define UART 0 //#define UART 1 //#define UART 2 //#define UART 3 //***************************************************************************** // BaudRate //***************************************************************************** #define BAUDRATE 115200 |
در زیر تابع MAIN برنامه را مشاهده میکنید:
که در ابتدا سعی میشه تنظیمات مربوط به سریال و انجام بشه که مربوط به ارتباط بیرونی خواهد بود و سپس میتوانید حتی با چک کردن نوع سورس ریستارت ساختار مناسب آپدیت برنامه اصلی را مشخص کنید.
سپس طبق یک تراکنش که شامل یک تبادل اطلاعات با برنامه ویندوز Sisoogloader هست میتوانید برنامه اصلی را به صورت صفحه به صفجه بر روی میکرو بریزید.
تابع WriteFlashPage عکلیات پروگرام صفحه به صفحه را انجام میدهد.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 | void main(void) { char i,Rxd_[20]; PULLUPPORT = PULLUPPIN; // Pull up on RX line //_UBRRH = ((XTAL / (16 * BAUDRATE)) - 1)>>8; _UBRRL = (XTAL / (16 * BAUDRATE)) - 1; //set baud rate; _UCSRB = 0x18; // Rx enable Tx Enable _UCSRC = 0x86; // Asyn,NoParity,1StopBit,8Bit #ifdef RS485DDR RS485DDR |= RS485TXE; // RS485 Tranceiver switch pin as output RS485PORT &= ~RS485TXE; // RS485 in Rx mode #endif for(i=0;i<20;i++) Rxd_[i]=0; //------------------------------------------------- //Setting Depend to new Project SettingThis(); //------------------------------------------------- switch(Check_Source_Reset()) { case 1: //Debug_putf("Power_on_Reset"); TxChar('Z');TxChar('1'); TxChar(0X0A);TxChar(0X0D); break; case 2: //Debug_putf("External_Reset_Reset"); TxChar('Z');TxChar('2'); TxChar(0X0A);TxChar(0X0D); break; case 3: //Debug_putf("Brown_Out_Reset"); TxChar('Z');TxChar('3');TxChar(0X0A);TxChar(0X0D); break; case 4: //Debug_putf("Watchdog_Reset"); TxChar('Z');TxChar('4'); TxChar(0X0A);TxChar(0X0D); break; } _UBRRL = (XTAL / (16 * BAUDRATE)) - 1; //set baud rate; _UCSRB = 0x18; // Rx enable Tx Enable _UCSRC = 0x86; // Asyn,NoParity,1StopBit,8Bit RxChar(); TxChar('>'); Rxd_[0]=RxChar();//delay_ms(20); if (Rxd_[0] == '<') { Rxd_[1]=RxChar(); Rxd_[2]=RxChar(); Rxd_[3]=RxChar(); Rxd_[4]=RxChar(); Rxd_[5]=RxChar(); Rxd_[6]=RxChar(); if(Rxd_[1]=='S' && Rxd_[2]=='I' && Rxd_[3]=='S' && Rxd_[4]=='O' && Rxd_[5]=='O') { if(Rxd_[6]=='G') Normal_file=1; else Normal_file=0; TxChar(PageSize); TxChar(DeviceID); TxChar(FlashSize); TxChar(BootSize); TxChar(EEpromSize); TxChar('!'); while (1) { WDR(); Ack_Khnowledge1=0XAA; Ack_Khnowledge2=0XBB; GetPageNumber(); PORTB.5=!PORTB.5; if (RealPageAddress == 0xffff) break; if (WriteFlashPage()) TxChar('!'); else TxChar('@'); } PORTB.5=0; #ifdef EEPROM EEpromLoad(); #endif #ifdef LOCKBIT LockBit(); #endif } } #ifdef RAMPZ_FLAG RAMPZ = 0; #endif #ifdef INTVECREG MCUCR = (1<<IVCE); MCUCR = 0x00; #endif delay_ms(20); #asm("jmp 0x0000"); // Run application code } |
در زیر نیز نمایی از برنامه ویندوز SisoogLoader را مشاهده میکنید.
لازم به ذکر است که قابلیت کدگذاری فایلهای هگز نیز که توسط تیم سیسوگ به سیستم اضافه شده بود نیز به علت پیچیده شدن برنامه حذف گردیده است.
همچنین لازم است که برنامه اصلی از طریق درگاه سریال بر روی میکرو ریخته شود و برای اینکار لازم است در برنامه ویندوز فایل هگز را انتخاب نمایید و سپس پورت و باودریت مناسب را انتخاب کنید و میکرو را ریستارت نمایید تا روال آپدیت بصورت اتوماتیک انجام گیرد.
دانلود برنامه ویندوز بوت لودر SisoogLoader
دانلود بوت لودر سیسوگ مخصوص کد ویژن
Sisoog-Bootloadr-AVR-Codevision.zip
با توجه به استقبال کاربران و درخواست آنها
سورس نرم افزار ویندوز بوت لودر SisoogLoader که به زبان C# نوشته شده به این پست اضافه گردید.
این برنامه با ویژوال استادیو 2013 کامپایل گردیده است.
سلام
تمامی این فرآیند ها و نرم افزار روی اتمل استودیو هم قابل پیاده سازی هستند یا فقط مختص کدویژن هستند؟
سلام با تشکر از اموزش خوبتون ای کاش در مورد نحوه چگونگی کدگذاری روی فایل hex و چگونگی اضافه کردن این قابلیت کد گزاری روی بوت لودر میکرو هم توضیح میدادید باتشکر
این رمزنگاری میتونه از تعویض چند تا بیت ساده در یک بایت شروع بشه تا الگوریتمهای امن مثل AES128 یا ..
شما فایل را رمزنگاری میکنید و یک فایل جدید اسمش دیگه هگز نیست را به کسی که قرار دستگاه اپدیت کنه میدید
مسئله اینه که شما هر Code ای که روی فایل انجام میدید باید برعکسش را در میکرو انجام بدید و مطمئن هم بشید که خروجی درست خواهد بود
سلام . ببخشید در مورد arduino mega R3 با ای سی 2560 ، من زمانی که بوت لودر رو می ریزم روی میکروم و بعد با IDE پروگرام می کنم بار اول برنامه آردوینو ریخته می شود ولی بار دوم ارور می دهد و باید دوباره بوت لودر رو بریزم تا بشه دوباره میکرو رو پروگرام کنم . ممنون می شم اگر بتونین راهنماییم کنین تا مشکلم حل بشه.
سلام دوست عزیز
از چه بوت لودری استفاده میکنید و از چه طریقی پروگرام میکنید برد رو ؟
با سلام
بوت لودر از مسیر نصب آردوینو برداشته شده و با پروگرامر 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 جواب داده.
با سپاس فراوان بابت وقتی که گذاشتید. موفق باشید.
سلام
الان این موردی که شما باهاش مواجه شدید مقداری عجیبه و من فکر کنم یه جای کار قلقی وجود دارد
شما برنامه تون رو با چه کامپایلری میسازید ؟از خود آردوینو استفاده میکنید ؟
البته شاید فیوز بیت ها تنظیمات خاصی نداشته باتشن که من در مورد این میکرو نمیدونم باید برم دیتاشیتش رو مطالعه کنم
سلام
بله ، از خود ide آردوینو استفاده می کنم.
باسلام
ببخشید با استفاده از USB باید فایل hex رو به میکرو اعمال کرد یا چیز دیگه ای رو؟
سلام
ممنون از توضیحات کامل و خوبتون
اکثر جاها فقط فایل هگز میکرو هست ولی شما کلی وقت گذاشتید و سورسش رو با کد ویژن قرار دادید
ولی کاش برای میکرو پر کاربردی مثل mega 8 هم جواب میداد…
برنامه برای mega8 کلی خطا میگیره
نظرات رو خوندم #define IVCE 0 هم اضافه کردم به اول برنامه main ولی مشکل حل نشد
خواهش میکنیم دوست عزیز
این سورس باید بگم برای بیش از ۱۰ سال پیش هست و واقعا اصلاحش از توان ما خارجه
فکر میکنم باید وقت بذاریم و بوت لودر مناسب و امروزی تری طراحی کنیم 🙂
سلام و خسته نباشید
چیزی که تو قضیه بوت لودر اهمیت داره اینه که بتونیم از راه دور میکرو رو پروگرام کنیم میشه یه مقاله بذارید مخصوص کدویژن که یا با وای فای یا با بلوتوت این کارو انجام داد آیا میشه این برنامه ویندوز رو از طریق وای فای به میکرو جهت عملیات بوت متصل کرد؟
آیا میشه با چیپ های simcom و از طریق GPRS برنامه هگز ر گرفت و روی میکرو اعمال کرد لطفا مقاله بذارید تشکر
میکرو من atmega128 و نرم افزارم کدویژن هستش
سلام دوست عزیز روند بوتلودر همین هست فقط شما باید بتونید فایل را دانلود کنید و بقیه مسیر میتونه شبیه این چیزی باشه که الان منتشر شده
سلام خسته نباشید من هر میکروavrرو با آردینو بوتلودر انجام میدم پیغام error while burning bootloderمینویسه لظفآ راهنمایی فرمایید ممنون میشم
سلام فکر کنم مشکل از پروگرمر شما باشه
سلام ممنون بابت مطلب مفیدتون.
میشه لطفا یه مقاله در مورد اپدیت وایرلس میکرو stm با ماژول sim بذارید؟ یا اگه اموزشی در این رابطه میشناسید معرفی کنید؟
سلام انشاله سعی مون را خواهیم کرد
سلام وقت بخیر.ممنون از مطالب خوبتون. من یک برنامه 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 نیست.فقط میگم ده بار چشمک بزنه و بعد جامپ بشه اول حافظه فلش. نمیدونم مشکل از کجاست؟
سلام پروژتون را یه جا اپلود کنید بفرستید تا یک بررسی کنیم
سلام مجدد
فایل شامل دوتا برنامه است که یک برنامه مربوط به بوت لودر و از آدرس F000 تا FFFF نوشته میشه و دیگری برنامه فلش application هستش که از آدرس 0 تا EFFF نوشته میشه . پروگرامرم هاتل هستش و از کادر بالا که مربوط به آدرس فلش هست، آدرس هایی که ذکر کردم رو وارد میکنم. پروژه بوت لودرم از قسمت CONFIGURE و PROGRAM TYPE گزینه bootloder 4095 فعاله و برتامه فلش گزینه application . تشکر
https://www.dropbox.com/s/vrs08idpz4vxhwf/BOOT%20LOADER%20TEST.rar?dl=0
سلام ممنون از مطالب خوب و کاربردی که میزارید.
شما در روند تنظیم فیوز بیت ها ، BOOTRST و BOOTSIZE هارو تغییر دادین که اولی باعث شروع برنامه از قسمت بوت لودر هنگام ریستارت و دومی برای تنظیم میزان حافظه بوت لودر بود . من هنوز متوجه نشدم که تنظیمات بالا چرا باعث تغییر برنامه بوت لودر میشه؟ یعنی میکرو از کجا میفهمه این برنامه مخصوص بوت لودر هست و از آدرس X تا آدرس Y باید نوشته بشه؟
منظورم اینه که میکرو چجوری فرق بین برنامه بوت لودر و برنامه عادی برای فلش رو متوجه میشه؟
خب خودتون توضیح دادید
با تنظیم فیوز بیت ها برنامه مبپره برنامه بوت لودر را اجرا میکنه
در اونجا ما میبنیم اگر روال اپدیت فریمور فعال هست خب میریم اپدیت انجام میدیم اگر نه میریم به برنامه اصلی
برنامه بوت لودر دقیقا برنامه ای هست شبیه برنامه میکرو و شما دسترسی رایت برنامه روی فلش اصلی را هم دارید
هر کدام از قسمت های میکرو میتونه فعال بشه و شما استفاده کنید
ممنون پس طبق فرمایش شما اگر من موقع پروگرام کردن میکرو اشتباهی بیت BOOTRST رو فعال کنم ، برنامم در قسمت بوت لودر نوشته میشه درسته؟
When the BOOTRST Fuse is programmed, the device will jump to the Boot Loader address at
reset,
اگر این را فعال کنید برنامه موقع ریست میره و ا سمت بوت لودر لود میشه ولی برای اینکه تعیین کنید کجا ریخته بشه مثلا توی کدویژن تو قسمت کانفیگ تو قسمت Program Type نوع بوت لودر را انتخاب میکنید
احتمالا من جایی رو دارم اشتباه درک میکنم و هنوز دید درستی نسبت به قضیه پیدا نکردم.
اگر قرار باشه برنامه ای برای بوت لودر نوشته بشه باید دقیقا در اول حافظه بوت لودر قرار بگیره.مثلا اگر BOOTSZ0,BOOTSZ1 یک و یک باشن باید این برنامه ای که نوشتین از آدرس FE00 تا FFFF قرار بگیره. اینکه شما چجوری این برنامه رو در این آدرس قرار میدین رو هنوز درک نکردم. نمیدونم این تنظیمات رو سمت پروگرامر باید قرار بدیم یا کاره دیگه ای باید انجام بدیم.اگر سمت پروگرامر هست که من از هاتل استفاده میکنم ممنون میشم توضیحاتشو بدین.
کلا هم یک فیوز بیت BOOTRST و BOOTSZ داریم که اولی برای شروع برنامه از اول برنامه بوت هست و دومی برای سایز بوت لودر و ربطی به آدرس قرار گیری برنامه نداره.
ببخشید من زیاد سوال پرسیدم تو این بخش . قطعا از حوصله شما هم خارج شده این سوال ها . عذرخواهم. اگر تمایلی به پخش این سوال نداشتین ممنون میشم با ایمیل در ارتباط باشین.
سلام دوست عزیز
خوب حدس شما درسته و همینطوره – ببینید وقتی برنامه رو برای بوت لودر مینویسید فایل هگز خروجی از اون آدرس شروع میشه و همونطور که میدونید فایل هگز شامل آدرس هست و جز این که اونو لود کنید نیاز به کار دیگه ای نیست.
حالا آدرس از کجا میآد از تنظیمات کامپایلر :) شما به کامپایلر میگید میخواید برنامه بوت لودر بنویسید و آدرسش فلانه – و دیگه همه کارها رو خود کامپایلر انجام میده .
به همین سادگی
سلام وقتتون بخیر
من یک مسیله رو متوجه نشدم . شما گفتین “ابتدا فایل را کاملا دریافت کنید سپس کل فایل ریخته شده را از نظر صحت اطلاعات دریافتی چک نمایید”.
منظور از کل فایل چیه؟ یعنی اول همه اطلاعاتی که میخوایم روی حافظه فلش قرار بگیره رو دریافت کنم بعد بریزم روی حافظه ؟
سوال دوم: بعد از آپلود کردن بوت لودر جدید ، برای پروگرام چطوری باید میکرو ریست بشه؟ منظورم اینه که چطوری میکرو متوجه کنیم که برنامه جدید قراره ریخته بشه تا ریست کنه و به حافظه بوت بره! نرم افزاری باید این کار رو انجام بدیم؟
سوال سوم: فرض کنیم من بوت لودر جدید رو ریختم ولی بعدش پشیمون شدم ” :))) ” چطوری میتونم بوت لودری که قبلا بوده رو روش آپلود کنم؟
سلام دوست عزیز
در مورد سوال اول بله این کار به دلیل این هست که هیچ مشکلی در مسیر آپدیت پیش نیاد و برنامه شما احیانا از بین نره کلا , البته اگر راهکارهای خاصی را هم داشته باشید بخصوص اینکه اگر مشکلی در فایل بود ساختار استارت دوباره برنامه را داشته باشید میتونید این کار را انجام ندید
دوم : میتونید نرم افزاری باشه یا سخت افزاری باشه
سوم : البته مواردی که ما گفتیم اپدیت بوت لودر نبود اپدیت برنامه اصلی بود و خب قاعدتا وقتی شما برنامه خودتون را ریختید برنامه قبلی مثل یک برنامه جدید قابل دستیابی هست
ممنون از پاسختون .
شما نوشتین که حافظه بوت لودر محدودیت داره. فرض کنید من میخوام یک برنامه فلش برای ATMEGA 128 آپلود کنم که حجمی حدود 120 کیلو بایت داره. منظورتون اینه که من تمام این 120 کیلو بایت رو دریافت کنم و در صورت صحیح بودن شروع کنم به نوشتن در حافظه فلش ؟ این حجم دیتا که در حافظه بوت لودر جا نمیشه.
سوال سومم رو فکر میکنم نتونستم خوب بپرسم. کدی که در بالا بررسیش کردین قراره به جای برنامه ای که به صورت دیفالت در حافظه بوت لودر میکرو هست قرار بگیره؟ یعنی حافظه بوت لودر میکرو رو پاک میکنیم و این کد رو جاش قرار میدیم؟
بله جا نمیشه و شما بهتره از یک فلش خارجی استفاده کنید
البته گفتم شاید بتونید روال ها و ارتباطات را داخل همون بوت لودر قرار بدید و اگر هم وسط کار مشکلی پیش بیاد خب از اول پیش میره مثل همین بوت لودری که الان ما سمپلش را قرار دادیم
پروتکلهای متفاوت جهت پروگرام کردن AVR داخل Bootloader ای که ما در موردش صحبت میکنیم نیست و شما همیشه میتونید از اون هم استفاده کنید
ممنون از پاسختون
منظورم از سوال سومم رو نتونستم درست برسونم. میکرو کنترلر به صورت دیفالت یک برنامه در بوت لودر خودش داره درسته؟چیزی که من برداشت کردم اینه که شما برنامه که در بالا توضیحش دادین رو قراره به جای برنامه بوت لودر دیفالت میکرو قرار بدین. یعنی برنامه قبلی که در حافظه بوت لودر بود رو پاک کنین و این برنامه جدید که نوشتین رو قرار بدین.
حالا سوالم رو مجدد میپرسم.
سوال اول:میکرو mega 128 ای داریم که قراره 128 کیلو بایت برنامه فلش بهش بدیم. بوت لودر مگه چقدر حافظه داره که من تمام حجم فایل فلش رو دریافت کنم و بعد از اوکی بودن اطلاعات دریافتی شروع کنم به نوشتن در حافظه فلش؟
خدمتتون عرض کردم اینکه شما حتما به حافظه خارجی در صورتیکه سناریو دریافت کامل را اجرا میکنید نیاز دارید و داخل خود میکرو احتمالا نمیتونید
و مجدد میگم اجباری نیست و میتونید نباشه ولی باید روال بازگشت به اول وجود داشته باشه
سلام درود فراوان، مهندس جان امکانش هست که از طریق اردوینو روی atmega8 تا atmega128 بوت لودر کرد؟
فکر میکنم امکانش باشه – باید بیشتر سرچ کنید.
با سلام و تشکر از مطالب بسیار مفیدتون
من یه مشکلی دارم لطفا راهنمایی بفرمایید،
وقتی میخوام عملیات پاک کردن و نوشتن روی فلش رو انجام بدم، در پروتئوس با این خطا مواجه میشم
“PC=0x76B8 [AVR CPU] SELFPRGEN is cleared by time-out”
و اینکه عملیات ارسال صفحه به صفحه از کامپیوتر رو در کدویژن خودم بصورت دستی شبیه سازی کردم به اینصورت که فقط میخوام صفحه اول رو پاک و رایت کنم
دیتای صفحه اول رو هم اینجوری دادم
“C9400030C9430060C9400000C9400000C9400000C9400000C9400000C9400000C9400000C9400000C9400000C9417060C9400000C942C030C9400000C9400000C9400000C9400000C9400000C9400000C9400006400C80090012003F8FFFCFFFEFFFFFF0000000000000000411F000054502D4C494E4B5F463741373642303931343931363132373838373231003139322E3136382E312E31303100342E300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023257328257329230D0A00245273704765744366672C002B4349505354414D41433A0041540D0A004154970000000000000000000000”
دقیقا لاین اولی هستش که نرم افزاری که شما گذاشتید همین پست تولید میکنه و میفرسته سمت میکرو تا میکرو به اولین صفحه رایت کنه
و اینکه شماره صفحه رو هم بصورت دستی صفر دادم تا اولین صفحه رایت کنه
ولی وقتی به اولین کد اسمبل میرسه واسه پاک کردن فلش یا رایت، هشداری که در بالا ذکر کردم رو میده
و اینکه در شبیه سازی نگا میکنم اصلا حافظه فلش رو نه پاک میکنه و نه رایت
لطفا به راهنمایی بکنید
فکر نمیکنم قابلیت شبیه سازی پورتئوس بوت لودر رو پشتیبانی بکنه !!!
سلام و منون بابت مطلبتون برنامه sisoogloder رو در ویندوز10 اجرا می کنم باز نمیشه میشه راهنمایی کنید . توی ویندوز 7 مشکلی نداره
این نرم افزار با C شارپ نوشته شده به احتمال زیاد یک سری فایلهایی هست که باید نصب بشه که برنامه اجرا بشه
چه پیغام خطایی میده؟
سلام. ممنون از آموزش خوبتون. خیلی دنبال یه آموزش ساده و گویا میگشتم. فقط دو تا نکته:
۱- سه تا لینک آخر مقاله (برنامه ویندوز، بوت لودر، سورس برنامه ویندوز) اشکال داره. با کروم ارور Failed – Network error و با Free Download Manager ارور Remote server closed connection میده. به هر سه تا مخصوصا آخری نیاز دارم؛ چون دارم یه برنامه GUI با ویژوال استودیو برای ارتباط UART با میکرو میسازم ولی از اونجایی که تو ویژوال استودیو تازهکار هستم، کلا قاطی کردم! لطفا لینکها رو تعمیر کنید.
۲- هر چند که CodeVision و Atmel Studio هر دو به زبان C هستن و کمی فرق دارن ولی کاش آموزشها با Atmel Studio باشه.
بحث Encrypt کردن هم جالب بود. اگه میشه یه مقدار بیشتر توضیح بدین.
با تشکر.
سلام دوست عزیز
لینک ها اوکی شدند ممنون میشم بررسی فرمائید
دیگه تبدیل کدویژن به ویژوال استادیو دیگه با خودتون 🙂
سعی کردیم در متن توضیح کافی داده بشه
شما قرار نیست فایل هگز برنامتون را دست کسی بدید که بره دستگاه را اپدیت کنید
با این کار شما میتونید یه فایل رمزنگاری شده را بهش بدید که این فایل در خود میکرو بازگشایی میشه
سلام
من با پروگرمر tnm کد آماده را روی برد میریزم و تمامی مراحل را مشابه توضیحات شما انجام میدم ولی وقتی برنامه را اجرا میکنم تارگت شناخته نمیشود و عملا کار نمیکند میخواستم بدونم ممکنه مشکل از نوع پروگرمر باشه مثلا نیازه که حتما با stk500 پروگرم اولیه رو انجام بدم؟
چون تمام فیوز بیت ها هم درست ست کردم و خیلی عجله دارم لطفا راهنمایی کنید با تشکر
سلام لازمه حتما فیوز بیت ها هم درست پروگرم بشه
در ضمن این برنامه مخصوص میکرو گفته شده هست
ممنون بابت پاسخگویی
من هم با atmega 128 کار میکنم و bootrst را enable (یعنی 0) قرار میدم سایز بوت لودر هم که روی ماکسیمم مقدار و همون حالت دیفالت قرار داره
بعید میدونم مشکل از فیوز بیت ها باشه.چیز دیگه ای بنظرتون نمیاد که مشکل از اون باشه؟
فکر کنم فیوز بیت باید روی کریستال خارجی باشه که مقدارش هم تا جایی که یادم هست
7.3728 مگاه هرتز هست
من از کریستال 16 مگ استفاده کردم که توی کد هم تغییر دادم قسمت مربوط رو و روری 16 مگ گذاشتم فیوزبیت هم روی کریستال خارجی گذاشتم و درسته
پیش فرض روی یوزارت صفر هست
اگر همه موارد اوکی هست
لحظه ای که میکرو ریستارت میشه میکروی شما چند کاراکتر ارسال میکنه
که یکی از اونها کاراکتر زیر هست
ببنید این را باد ریت مناسب تو کامپیوتر درست دریافت میکنید
TxChar(‘>’);
سلام وقت بخیر.
میشه بگین این عکس های زیبا برای هر مطلبتون رو کی تهیه میکنه؟؟؟؟؟
این همه هنر واقعا جالبه
سلام دوست عزیز از حسن توجه شما ممنونم
وقتی یک کار تیمی اونم با کلی مهندس خوش ذوق شروع بشه نتیجش میشه همین 🙂
سلام میشه درباره بوت لودر stm32 هم مطلب بزارید ! نحوه کدنویسیش و اجراش
سلام دوست عزیز
در دستور کار قرار داره این مساله 🙂
عالی مفید بود
خواهش میکنیم دوست عزیز
سلام ممنون از زحمت وتلاش شما و آموزش این مبحث مهم
خواهش میکنم دوست عزیز 🙂
سلام
بابت مطالب عالی سایتتون ازتون تشکر می کنم
سوالی که دارم اینه که خواستم تنظیمات این بوت لودر را برای mega8 انجام بدم ولی با ارور های کامپایلر مواجه شدم می شه راهنمایی کنید
با تشکر
سلام دوست عزیز
پروژتون را که تغییر دادید یه جا اپلود کنید و لینکش را بزارید تا خدمتتون بگم
سلام
http://s8.picofile.com/file/8335549868/Atmega8_BootLoader.rar.html
دوست عزیز با قرار دادن
#define IVCE 0
این مشکل حل میشه
البته بعد از این مشکل به علت اینکه بنده نرم افزار را مبتنی بر سکتورهای 256 بایتی قرار داده ام ( بحث رمز نگاری مطرح بود) کمی زمانبر هست که بر روی Mega8 نیز اوکی کنم
پیشنهادم این هست که از منبع اصلی که در متن هم به اون اشاره کردم استفاده کنید
سلام تشکر از برنامه خوبتون
بنده هم از مگا 128a استفاده میکنم و پروگرمرم TNM2000 هست منتهی هر کار میکنم تارکت رو پیدا نمیکنه و عملااا بوت رو پیدا نمیکنه تا کانکت شم
لطفا راهنمایی بفرمایید
لطفا وضعیت و نحوه پروگرام کردن فیوز بیت ها رو بررسی کنید
احتمالا مشکل از اونجا باشه
سلام. آیا امکانش هست که سورس برنامه ویندوز بوت لودر SisoogLoader را بدید .
سلام
سعی میکنیم دوست عزیز هفته آینده سورس ویندوز را منتشر کنیم
سلام خسته نباشید، چیزی که من متوجه شدم page number توسط برنامه ویندوز مشخص میشه. می خواستم بدونم ایا کل ریجستر z ((ادرس wordها و ادرس page ها)) رو مشخص میکنه یا فقط قسمت ادرس دهی page رو؟دقیقا برنامه ویندوز برای میکرو چی ارسال میکنه؟ سوال بعدی اینه که چطوری میشه یه counter گذاشت که خود میکرو page ها رو دونه دونه write کنه؟ مثلا اگه متغییر pageadress رو 2 تا 2 تا اضافه کنم جای دیگه برنامه به مشکل نمیخورم؟
من میخوام میکرو رو با mmc/sd card توسط کدویژن پروگرم کنم چیزی تو اینترنت پیدا نکردم گفتم بشینم برنامه شمارو تغییر بدم، لطفا اگه میتونید کمک کنید
سلام
متشکرم از شما
در ابتدای برنامه از صفحه صفر برنامه ویندوز اولین پیچ را ارسال میکنه
در صورتیکه تاییدیه از سمت میکرو مبنی بر اینکه اون صفجه از نظر بایتهای تاییدکننده درست باشه و اینکه به درستی پکت را گرفته دریافت کنه یک شماره به سمت بالا میرود و این روند ادامه دار خواهد بود
ما سعی میکنم در اولین فرصت یک سری اطلاعات مربوط به تبادل شدن سریال سیستم با میکرو را خدمتتون اعلام کنیم
شما لازمه برای اینکه میکرو را توسط MMC پروگرم کنید لازمه موارد زیر را عملیاتی کنید
اول اینکه در برنامه بوت لودر MMC را اینیت کنید و همچنین اگر لازمه فت فایل سیستم را
سپس فایل مورد نظر را اگر وجود داشت پیدا کرده و شروع کنید صفجه صفجه بخونید و دیگه تبادل اطلاعات شبیه انچه که در سریال میبنید وجود نخواهد داشت
ممنون از جوابتون . با بوت لودر و mmc کار کردم ولی حدف من اینه که توسط یک میکرو یک میکرو دیگه پروگرام کنم
حالا به روش بوت لودر و یا ISP
دوست عزیز شما برای اینکه از قابلیت بوت لودر استفاده کنید چاره ای ندارید برای یکبار حداقل میکرو خود را توسط یک پروگرامر , پروگرم کنید
حال این برنامه به شما کمک میکند در اینده نیازی با پروگرمر نداشته باشید
ولی اگر قصد دارید که عملیات پروگرم کردم مستقیم را توسط یک سخت افزار دیگر انجام دهید اون یک مبحث دیگری است.
ممنون .
عزیز اگه ما بخوایم با یکی میکرو دیگه دیتا به صورت سریال بفرستیم باید چیکار کنیم.
مثلا دیتا روی مموری بریزیم یا اینکه با یک ماژول مثل nrf دیتا میکرو اول بریزه و روی میکرو دوم بریزه باید چیکار کنیم
نرم افزار کامپیوتری اول چی میفرسته .
خواهش میکنم دوست عزیز
کل فرایند بوت لودر سعی شده توضیح داده بشه
کلیت کاری هم که لازمه شما انجام بدید این هست که توسط اون ارتباط سخت افزاری پکت ها را دریافت کنید و به تابع write_page فرستاده و منتظر باشید که برنامه جایگزین بشه
هیچ فرقی نمیکنه شما از چه بستری تمایل دارید اون را اپدیت کنید
بله متاسفانه کل تبادل را فرصت نشد در یک فایل مجزا پیوست نماییم ولی اگر یکبار پورت سریال را هم اسنیف کنید میتونید به تمام پکتهای دریافت و ارسال شده دسترسی پیدا کنید
البته داخل برنامه هم همه چیز تقریبا مشخص هست
سلام، ممنون بابت زحماتتون
سلام
خواهش میکنم دوست عزیز
خوشحالیم که مطالب مورد توجه قرار گرفته است
تشکر از پست مفیدتون. درباره ota(over the air programming)هم اگر یک مقاله منتشر بفرمایید خیلی مورد استقبال قرار خواهد گرفت. تشکر
سلام دوست عزیز
این مورد هم در لیست مطالبی قرار گرفت که قراره در موردشون مطلب منتشر کنیم.
با سلام و تشکر از مطالب مفیدتون من با استفاده از این فایل برای میکرو mega64 و mega 128 بوت لودر درست کردن و به درستی کار می کنند ولی به تازگی نیاز شده است که برای mega 2560 بوت لودر بسازم ولی هنگامی که این میکرو انتخاب می کنم این خطا داده میشه
can not open #include file:iom256v.h
لطفا دوستان اگه تجربه ای دادن راهنمایی بفرمایند
سلام دوست عزیز
در قسمتی که خطا را میده یه جای اون خط این را قرار بدید
#include mega2560.h
فکر میکنم مشکلتون حل بشه
با سلام مشکل حل شد در فایل bootLoader.h قسمت دیفاین میکرو 2560 این تغییرات رو دادم مشکل حل شد #include “iom2560v.h” رو به #include “Mega2560.h” تغییر دادم و این دیفاین رو هم اضافه کردم #define IVCE 0 سپس تابع check_source_reset رو با توجه به اینکه رجیستر چک کردن منابع ریست در این میکرو نامش متفاوت است تغییر دادم و مشکل حل شد گفتن تجربه ام رو اینجا ذکر کنم برای بقیه دوستان
سلام ممنون از شما دوست عزیز