在Arduino核心MCU的Flash存儲上,通常分有兩個區(qū)域——應(yīng)用程序區(qū)(Application)和引導(dǎo)程序區(qū)(Boot)。
應(yīng)用程序區(qū)存放著用戶應(yīng)用程序,即開發(fā)者通過IDE編寫的代碼編譯生成的程序,其功能由開發(fā)者定義和實(shí)現(xiàn);
引導(dǎo)程序區(qū),通常存放有一段啟動加載程序(bootloader),該程序可以將PC發(fā)送來的應(yīng)用程序,存儲到應(yīng)用程序區(qū)中。
Arduino每次啟動后,都會先運(yùn)行bootloader程序,如果PC沒有向Arduino傳輸新的應(yīng)用程序,Arduino則會很快開始運(yùn)行現(xiàn)有的用戶應(yīng)用程序。
因此要更新Arduino上的程序,就要先將Arduino復(fù)位,讓其運(yùn)行bootloader,以備接收新上傳的應(yīng)用程序。
在Arduino UNO/Mega上串口芯片DTR引腳和AVR RST引腳間串聯(lián)了一個100nf的電容,Arduino IDE在上傳程序前,會通過發(fā)送串口DTR脈沖讓Arduino開發(fā)板復(fù)位,進(jìn)而讓Arduino運(yùn)行bootloader。然后Arduino IDE再按照規(guī)定的協(xié)議傳輸應(yīng)用程序,即可在bootloader的協(xié)助下,將應(yīng)用程序?qū)懭氲綉?yīng)用程序區(qū)中。
對于不同的Arduino開發(fā)板,其上傳與復(fù)位方式不同,如Leonardo、Due都帶有原生的USB端口,可以模擬成串口設(shè)備和PC通信。其上傳程序是通過DFU(Device Firmware Upgrade)模式進(jìn)行的。當(dāng)PC以1200波特率打開設(shè)備串口時(shí),Arduino即會切換到DFU模式,接收PC傳來的應(yīng)用程序。
承擔(dān)因您的行為而導(dǎo)致的法律責(zé)任,
本站有權(quán)保留或刪除有爭議評論。
參與本評論即表明您已經(jīng)閱讀并接受
上述條款。