LM3S之boot loader學(xué)習(xí)筆記-1
彭會(huì)鋒
( 首先聲明,此系列文章編寫(xiě)參考了很多資料,其中一些內(nèi)容是原版內(nèi)容的引用和整理,并加入了一些自己的見(jiàn)解,我已經(jīng)盡量標(biāo)明引用部分,如有未全部標(biāo)注部分,還望見(jiàn)諒! )
? ? ? 最近項(xiàng)目需要能夠?qū)夥到y(tǒng)監(jiān)控器和dsp代碼進(jìn)行在線升級(jí),為此特意學(xué)習(xí)了下lm3s的bootloader 編寫(xiě),程序已經(jīng)編寫(xiě)調(diào)試完畢,特寫(xiě)一下相關(guān)的知識(shí)點(diǎn)總結(jié),也供各位進(jìn)行相關(guān)參考!
參考網(wǎng)址:
http://wapapp.baidu.com/wh2152/item/2e9ee419bb416a3bb93180ec? LM4F232的bootloader過(guò)程
http://blog.sina.com.cn/s/blog_5f18cbd10100da5t.html ?揭開(kāi)BOOT?LOAD升級(jí)過(guò)程的神秘面紗
http://wenku.baidu.com/view/e610a30fba1aa8114431d9cc.html ?BootLoader應(yīng)用說(shuō)明
?
后面這兩組是為了加深對(duì)存儲(chǔ)器映射的理解的文章:
http://blog.sina.com.cn/s/blog_5f18cbd10100da6f.html ?如何讓靜態(tài)局部和全局變量或數(shù)組存在指定地址的Flash
http://blog.sina.com.cn/s/blog_5f18cbd10100d4xr.html ?Keil平臺(tái)中如何讓程序在RAM中跑起來(lái)?
bootloader作用
? ? ? " BootLoader是 位于Flash起始地址處的一小段代碼 ,占據(jù)空間大小依據(jù)Boot所實(shí)現(xiàn)的功能而不同。如果沒(méi)有BootLoader,硬件啟動(dòng)成功后,將直接運(yùn)行用戶(hù)應(yīng)用程序(Application)。反之,BootLoader的啟動(dòng)代碼(Start-up Code)將先被執(zhí)行,進(jìn)行一系列的初始化操作后,根據(jù)預(yù)先設(shè)定的條件,選擇執(zhí)行用戶(hù)應(yīng)用程序(Application)或升級(jí)控制程序(Updater)。
? ? ??系統(tǒng)在實(shí)際應(yīng)用過(guò)程中,如果需要更新軟件功能,那么為了避免重新拆裝設(shè)備,可以借助“在線升級(jí)”方式。目前,在線升級(jí)是很多系統(tǒng)都必需的一個(gè)功能,對(duì)于LM3S系列微控制器來(lái)說(shuō),利用Flash控制器接口即可實(shí)現(xiàn)系統(tǒng)在線升級(jí)。Boot程序接收新的代碼編譯文件,然后調(diào)用Flash操作函數(shù)將新的代碼編程到Flash 扇區(qū)中,即可實(shí)現(xiàn)系統(tǒng)的在線升級(jí)。 依照我查找的資料來(lái)看, 嵌入式中很大部分編寫(xiě)bootloader是為了升級(jí)程序之用的。" ( 參考“LM3S 系列單片機(jī)遠(yuǎn)程升級(jí)應(yīng)用筆記” )
? ? ? 首先介紹bootloader程序的編寫(xiě), lm3s系列bootloader編寫(xiě)可以采用兩種方法:
? ? ? 1 rom中自帶bootloader
? ? ? lm3s系列芯片中在ROM中固化了很多的程序,其中就包括bootloader,可以通過(guò)rom中的bootloader通過(guò)串口(UART)\SSI\I2C\ETHERNET控制程序傳輸,然后使用flash讀寫(xiě)函數(shù)將程序?qū)懭雈lash中,從而實(shí)現(xiàn)程序燒寫(xiě)升級(jí)
? ? ?2 flash燒寫(xiě)自己編寫(xiě)的bootloader
? ? ?bootloader也可以用戶(hù)自行編寫(xiě),其實(shí)bootloader也是一段程序而已,用戶(hù)完全可以自己編寫(xiě),這樣的靈活性更大,可以針對(duì)自己的設(shè)計(jì)進(jìn)行有針對(duì)性的更改,我這次的設(shè)計(jì)也是自行編寫(xiě),其實(shí)寫(xiě)完了回頭再看就是基于我以前程序的縮減版!
? ? ?為了能夠?qū)ootloader能夠首先從整體上有一個(gè)認(rèn)識(shí),我先給出bootloader、應(yīng)用程序以及其他一些東西在芯片flash中的一些分布,以期能夠從整體上對(duì)bootloader有個(gè)完整的認(rèn)知:
? ??
? ? ? 由上圖可知,從flash空間占用來(lái)說(shuō),bootloader位于flash的起始位置,然后才是應(yīng)用程序flash占用,所以程序上電也是先運(yùn)行bootloader程序,然后在bootloader跳轉(zhuǎn)程序控制下決定是運(yùn)行bootloader引導(dǎo)程序還是用戶(hù)應(yīng)用程序!
? ? ?為了實(shí)現(xiàn)bootloader升級(jí)程序的功能,我們就需要自己編寫(xiě)bootloader控制邏輯,下面是我的bootloader的控制邏輯流程圖 (其實(shí)看完流程圖,你大概就知道bootloader的功能和具體實(shí)現(xiàn)有了初步了解) :
?
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
