本文原創(chuàng)作者: 少占魚(yú)大神
關(guān)于8051的bootloader實(shí)現(xiàn)方式
一,基本硬件需求
要實(shí)現(xiàn)IAP功能,需要51單片機(jī)可以在程序里修改代碼空間的Flash,或者至少可以修改用戶程序區(qū)的Flash,新出的51大部分都能滿足這個(gè)要求
二,空間劃分
一般bootloader位于單片機(jī)代碼空間的起始地址,用戶程序在后面。這個(gè)需要根據(jù)實(shí)際的需求來(lái)決定,bootloader功能簡(jiǎn)單,就少占用一些,bootloader功能復(fù)雜的就多占用一些。除此之外,一般還要根據(jù)Flash的頁(yè)為界線劃分。附帶的工程模板里,bootloader使用0x0000-0x0fff區(qū)間,用戶程序使用0x1000以后的空間。
三,中斷的處理
51單片機(jī)的中斷入口一般位于0地址開(kāi)始的區(qū)間,無(wú)法修改,但是根據(jù)上面的空間劃分方式,這個(gè)區(qū)間位于bootloader的范圍,是不能隨意更改的。所以代碼里用了一個(gè)軟件的方式對(duì)中斷入口做了重映射處理,后面將結(jié)合具體的代碼介紹實(shí)現(xiàn)方式。
四,Bootloader的處理
1, 建立工程的時(shí)候,選擇把Startup.a51添加到工程
2, 在Startup.a51里添加如下代碼:
ORG 0003H
LJMP 2003H
ORG 000BH
LJMP 200BH
ORG 0013H
LJMP 2013H
ORG 001BH
LJMP 201BH
ORG 0023H
LJMP 2023H
………………………….
根據(jù)具體型號(hào)的中斷數(shù)量和地址,添加中斷跳轉(zhuǎn)代碼,格式為ORG XXH LJMP 2000+XXH,這樣做,是為了將中斷映射到用戶程序區(qū)的0x2000開(kāi)始的空間,在用戶程序里,還要做一些對(duì)應(yīng)的設(shè)置,后面將介紹。
3, Bootloader的處理流程。Bootloader的主要作用一般是開(kāi)機(jī)初始化,自檢和升級(jí)用戶程序,以及引導(dǎo)用戶程序。因?yàn)樯厦嬉呀?jīng)把中斷映射到用戶程序空間,所以bootloader里最好就不要用中斷了。
五,用戶程序的處理。
1, 用戶程序的Startup.a51無(wú)特殊需求,可以根據(jù)需要選擇添加到工程,然后自己做修改,也可以不添加到工程,由編譯器連接一個(gè)默認(rèn)的startup.a51
2, 用戶程序的所有普通函數(shù)和中斷函數(shù)也沒(méi)有特殊要求,可以按正常的方式編寫(xiě)
3, 用戶程序的工程設(shè)置。因?yàn)橛脩舫绦虿辉偈菑?地址開(kāi)始,所以需要在工程設(shè)置里做定位處理:設(shè)置用代碼的范圍,定位用戶代碼入口地址。具體設(shè)定如下圖:
因?yàn)橛脩舸a規(guī)劃到0x1000以后的空間,所以設(shè)置code range從0x1000開(kāi)始
為了讓bootloader能準(zhǔn)確跳到用戶程序入口,所以需要將C_C51STARTUP定位到0x1000位置。(C_STARTUP位于startup.a51里,它才是程序的真正入口,而不是main函數(shù);另外,入口也并不是必須定位在這個(gè)位置,只要位于用戶代碼空間就可以)
4, 中斷映射。在bootloader里,將中斷入口定位在了0x2000開(kāi)始的空間,在用戶程序里,也必須做一個(gè)對(duì)應(yīng)的設(shè)置。方法如下:
這樣處理之后,便完成了中斷的映射。當(dāng)中斷發(fā)生時(shí),會(huì)先進(jìn)入位于bootloader里的硬件中斷入口,然后在那里跳轉(zhuǎn)到0x2000開(kāi)始的一個(gè)軟件重定義的向量表,再跳轉(zhuǎn)到中斷入口函數(shù)。和沒(méi)有bootloader的方式比起來(lái),這樣做會(huì)多一次LJMP跳轉(zhuǎn),但是一般情況下影響不大。
關(guān)于bootloader存放位置:
備注:其實(shí),最好是將bootloader程序放到最后,這樣,應(yīng)用程序起始地址,中斷地址等不用設(shè)置,默認(rèn)程序從0x0000h開(kāi)始執(zhí)行,然后用函數(shù)指針跳轉(zhuǎn)到bootloader 程序起始地址,讓其先執(zhí)行。通過(guò)bootloader內(nèi)部程序選擇是否升級(jí)應(yīng)用程序還是直接跳轉(zhuǎn)回應(yīng)用程序區(qū)執(zhí)行。
若升級(jí),就讀寫(xiě)flash的應(yīng)用程序部分。若不升級(jí),就跳轉(zhuǎn)回應(yīng)用程序繼續(xù)運(yùn)行。
BOOTLOADER 程序舉例:
#include
//用戶程序起始地址
#define USER_APP_ADDR 0x1000
char power_on_test(void);
char check_upgrade_request(void);
char upgrade(void);
void main(void)
{
//定義一個(gè)函數(shù)指針,用于跳轉(zhuǎn)到用戶程序
void (*boot)() = USER_APP_ADDR;
//bootloader里不能開(kāi)啟中斷
EA = 0;
//添加系統(tǒng)初始化代碼
if(power_on_test()){//開(kāi)機(jī)自檢
upgrade();
}
else if
(check_upgrade_request()){//檢查是否有升級(jí)需求
upgrade();
}
//如果不需要升級(jí),或者升級(jí)已經(jīng)完成,執(zhí)行下面的代碼進(jìn)入用戶程序
(*boot)();
//正常情況下不會(huì)運(yùn)行到這里,以防萬(wàn)一
while(1);
}
char power_on_test(void)
{
//添加開(kāi)機(jī)自檢代碼,如果自檢錯(cuò)誤,進(jìn)入升級(jí)模式
return 0;
}
char check_upgrade_request(void)
{
//添加檢查用戶是否有升級(jí)要求的代碼,例如輸入命令或按下按鍵,如果有,則進(jìn)入升級(jí)模式
return 0;
}
char upgrade(void)
{
//添加傳輸升級(jí)文件和升級(jí)用戶程序區(qū)的代碼
return 1;
}
用戶程序:
#include
//main函數(shù)無(wú)特殊要求
void main(void)
{
while(1);
}
//中斷函數(shù)無(wú)特殊需求,可根據(jù)需求隨意添加
void UART_ISR(void) interrupt 4
{
return;
}
工程配置如下
六,關(guān)于升級(jí)文件
升級(jí)文件的傳輸可以根據(jù)需要使用任何方式,例如串口,網(wǎng)絡(luò),USB,存儲(chǔ)卡等。升級(jí)文件的傳輸可以做在bootloader里,也可以做在用戶程序里,或者兩種方式都有。一般來(lái)說(shuō),bootloader的代碼比較簡(jiǎn)單,不適合做復(fù)雜的傳輸方式。如果傳輸方式比較復(fù)雜,可以在用戶程序里傳輸升級(jí)文件,暫存到一個(gè)外部存儲(chǔ)器,然后跳轉(zhuǎn)到bootloader,讓bootloader從外部存儲(chǔ)器讀出并升級(jí)用戶程序。升級(jí)的時(shí)候要注意用戶代碼的范圍。
為了傳輸?shù)目煽啃?,升?jí)文件一般還會(huì)添加一個(gè)文件頭,里面包含一些基本的文件信息,例如長(zhǎng)度,校驗(yàn)等,這些可以通過(guò)編寫(xiě)一些簡(jiǎn)單的工具來(lái)完成。
另外,推薦一些升級(jí)文件的傳輸方式,做bootloader的時(shí)候可以考慮
1 ,串口??梢钥紤]使用XMODEM協(xié)議傳輸升級(jí)文件,因?yàn)檫@是一個(gè)比較標(biāo)準(zhǔn)的傳輸協(xié)議,很多現(xiàn)成的軟件可以支持,例如Windows下自帶的超級(jí)終端就可以實(shí)現(xiàn)(XP以后的系統(tǒng)沒(méi)有超級(jí)終端,但是也有一些別的軟件可以代替,例如SecureCRT)
2, USB主機(jī)??梢杂肬盤(pán)方式升級(jí)。升級(jí)文件取一個(gè)特定文件名,放在特定位置,主機(jī)讀取到文件后自動(dòng)升級(jí)
3, USB從機(jī)。可以讓從機(jī)虛擬成一個(gè)U盤(pán),PC把文件復(fù)制到這個(gè)虛擬U盤(pán)就完成升級(jí)。這樣就不需要編寫(xiě)專門(mén)的升級(jí)軟件
4, 以太網(wǎng)。
a)TFTP,這是標(biāo)準(zhǔn)的文件傳輸命令,Windows自帶,而且協(xié)議簡(jiǎn)單
b)Web。用網(wǎng)頁(yè)的方式,界面有好直觀,用網(wǎng)頁(yè)瀏覽器就可以實(shí)現(xiàn),也不用單獨(dú)開(kāi)發(fā)專用的升級(jí)軟件。
上一篇:P10點(diǎn)陣屏C51單片機(jī)程序
下一篇:51單片機(jī)lcd1602d電子時(shí)鐘設(shè)計(jì)
推薦閱讀
史海拾趣
隨著全球化趨勢(shì)的加速推進(jìn),BAHCO也在積極拓展全球市場(chǎng)。目前,公司已在多個(gè)國(guó)家和地區(qū)設(shè)立了分支機(jī)構(gòu)或銷售網(wǎng)絡(luò),實(shí)現(xiàn)了全球范圍內(nèi)的業(yè)務(wù)覆蓋。未來(lái),BAHCO將繼續(xù)加大在研發(fā)、生產(chǎn)、銷售等方面的投入力度,不斷提升產(chǎn)品質(zhì)量和服務(wù)水平。同時(shí),公司還將積極探索新的商業(yè)模式和合作方式,以適應(yīng)不斷變化的市場(chǎng)環(huán)境并實(shí)現(xiàn)可持續(xù)發(fā)展。
這些故事雖然不直接涉及BAHCO在電子行業(yè)的發(fā)展,但它們展示了BAHCO在工具制造領(lǐng)域的輝煌歷程和不斷進(jìn)取的精神。作為一家擁有百年歷史的知名企業(yè),BAHCO憑借其卓越的品質(zhì)、創(chuàng)新精神和全球市場(chǎng)布局,成功地在工具制造業(yè)中占據(jù)了重要地位。未來(lái),隨著技術(shù)的不斷進(jìn)步和市場(chǎng)需求的不斷變化,相信BAHCO將繼續(xù)保持其領(lǐng)先地位并迎來(lái)更加美好的發(fā)展前景。
BOOKLY公司在技術(shù)創(chuàng)新的基礎(chǔ)上,積極拓展市場(chǎng)。通過(guò)與各大電子產(chǎn)品制造商建立合作伙伴關(guān)系,BOOKLY的產(chǎn)品迅速進(jìn)入全球市場(chǎng)。公司還積極參與國(guó)際電子展覽和技術(shù)交流會(huì),展示其最新研發(fā)成果,吸引了眾多合作伙伴和投資者的關(guān)注。通過(guò)不斷的市場(chǎng)拓展和合作,BOOKLY逐漸成為了電子行業(yè)的領(lǐng)軍企業(yè)。
背景:隨著全球?qū)Νh(huán)境保護(hù)意識(shí)的增強(qiáng),F(xiàn)orce Technologies Ltd積極響應(yīng)號(hào)召,將綠色環(huán)保理念融入企業(yè)發(fā)展中。
發(fā)展:公司投入巨資研發(fā)環(huán)保型電子產(chǎn)品和制造工藝,致力于減少生產(chǎn)過(guò)程中的廢棄物排放和能源消耗。同時(shí),公司還積極推動(dòng)供應(yīng)鏈的綠色化轉(zhuǎn)型,與供應(yīng)商共同制定環(huán)保標(biāo)準(zhǔn)和措施。這些努力不僅提升了公司的社會(huì)形象,還為其贏得了更多消費(fèi)者的信賴和支持。
面對(duì)日新月異的電子行業(yè),3D PLUS公司始終保持創(chuàng)新精神,不斷推動(dòng)3D技術(shù)的升級(jí)。公司研發(fā)團(tuán)隊(duì)成功研發(fā)出全方位彩色人體掃描儀,這一設(shè)備能夠在極短的時(shí)間內(nèi)實(shí)現(xiàn)360度人像掃描,且清晰度極高,為互聯(lián)網(wǎng)人體應(yīng)用提供了強(qiáng)有力的支持。此外,公司還不斷在軟件、算法等方面進(jìn)行優(yōu)化,提升3D技術(shù)的精度和效率,滿足市場(chǎng)的不斷需求。
DATATRONICS深知產(chǎn)品質(zhì)量是企業(yè)生存和發(fā)展的基石。因此,公司投入大量資源用于建立和完善質(zhì)量管理體系,確保每一款產(chǎn)品都符合國(guó)際標(biāo)準(zhǔn)和客戶要求。同時(shí),DATATRONICS還注重品牌形象的塑造,通過(guò)一系列營(yíng)銷活動(dòng)和公益活動(dòng),提高了品牌知名度和美譽(yù)度。
COTO TECHNOLOGY的故事始于1917年,當(dāng)時(shí)它在美國(guó)羅德島州的普羅維登斯以Coto Coil Incorporated的名字誕生,專注于線圈繞組的設(shè)計(jì)與制造。這個(gè)初創(chuàng)公司憑借對(duì)技術(shù)的深入理解和對(duì)質(zhì)量的執(zhí)著追求,逐漸在電子行業(yè)中嶄露頭角。它的線圈繞組產(chǎn)品以高精度、高穩(wěn)定性而受到市場(chǎng)的青睞,為公司的初步發(fā)展奠定了堅(jiān)實(shí)的基礎(chǔ)。
《阿凡達(dá)》中人類在遙遠(yuǎn)的潘多拉星球上可以在廣闊的地域之間高速傳輸數(shù)據(jù)和通信,用得可能將是未來(lái)的4G或5G技術(shù),雖然CES沒(méi)有對(duì)此高科技給出的切實(shí)解決答案,但多家企業(yè)正在不斷努力,遠(yuǎn)程高速數(shù)據(jù)通信也即將到來(lái)。 美國(guó)運(yùn)營(yíng)商Sprint在CES上推 ...… 查看全部問(wèn)答∨ |
FPGA的多路可控脈沖延遲系統(tǒng)設(shè)計(jì) FPGA的多路可控脈沖延遲系統(tǒng)設(shè)計(jì) 采用數(shù)字方法和模擬方法設(shè)計(jì)了一種最大分辨率為0.15 ns級(jí)的多路脈沖延遲系統(tǒng),可以實(shí)現(xiàn)對(duì)連續(xù)脈沖信號(hào)的高分辨率可控延遲;采用Flash FPGA克服了現(xiàn)有SRAM FPGA系統(tǒng)掉電后程序丟失的缺點(diǎn),提高了系統(tǒng)反應(yīng)速度。本系 ...… 查看全部問(wèn)答∨ |
應(yīng)用程序或DLL為無(wú)效的Windows映像。請(qǐng)?jiān)跈z測(cè)一遍您的安裝盤(pán)。程序無(wú)法下載到CE環(huán)境里 問(wèn)題如標(biāo)題,程序沒(méi)有辦法下載到CE環(huán)境里,和這個(gè)無(wú)效的DLL鏡像有關(guān),怎么解決呢?… 查看全部問(wèn)答∨ |
|
SPI收發(fā)數(shù)據(jù),高低位字節(jié)順序! 目前在做一個(gè)項(xiàng)目,是基于51單片機(jī)和SPI模塊通訊的。 我的問(wèn)題是: 1、這個(gè)SPI模塊要求發(fā)送數(shù)據(jù)時(shí),每個(gè)字節(jié)必須是高位在前,地位在后。一個(gè)字節(jié)中哪些位是高位,哪些位是地位?比如一個(gè)二進(jìn)制數(shù)據(jù):11110000.如果按照它的要求的話,我應(yīng)該先發(fā)11 ...… 查看全部問(wèn)答∨ |
win7系統(tǒng)中無(wú)法安裝usb-blaster 最近我在win7的操作系統(tǒng)中一直無(wú)法安裝usb-blaster驅(qū)動(dòng)程序,導(dǎo)致我無(wú)法在quartus II軟件中下載程序,如圖F:\\picture\\no hardware.jpg 但是我在安裝usb-blaster驅(qū)動(dòng)程序的時(shí)候,系統(tǒng)彈出對(duì)話框F:\\picture\\drivers.jpg,我懷疑是因 ...… 查看全部問(wèn)答∨ |
09級(jí)的學(xué)生不應(yīng)該參加國(guó)賽嗎? 本帖最后由 paulhyde 于 2014-9-15 08:53 編輯 今天老師對(duì)我們說(shuō),建議09級(jí)的同學(xué)不要參加國(guó)賽,如果等到下一屆,就得等兩年,那時(shí)候就大四了,也就沒(méi)有那個(gè)時(shí)間參加了! 可是老師給我們的答案是很多的競(jìng)賽在等你,為什么偏偏選擇國(guó)賽呢 ...… 查看全部問(wèn)答∨ |
|
請(qǐng)問(wèn)一下 我的步進(jìn)電機(jī)有四根線 分別為橙黃黑灰 能確定橙黃是一組,黑灰是一組 ,但是不知道怎么判斷 是A正還是A負(fù),這個(gè)不知道有關(guān)系沒(méi)? 還想問(wèn)一下 亮相四線步進(jìn)電機(jī)怎樣給脈沖啊?時(shí)序?電機(jī)型號(hào)是PM35S-0 ...… 查看全部問(wèn)答∨ |
在LED燈恒流的問(wèn)題上,不知各位有哪些好的LED恒流IC?有用過(guò)NU501或是HV9910的嗎?這兩款在LED燈中運(yùn)用得應(yīng)比較廣泛的吧?!? 查看全部問(wèn)答∨ |
設(shè)計(jì)資源 培訓(xùn) 開(kāi)發(fā)板 精華推薦
- Microchip 升級(jí)數(shù)字信號(hào)控制器(DSC)產(chǎn)品線 推出PWM 分辨率和 ADC 速度業(yè)界領(lǐng)先的新器件
- 意法半導(dǎo)體STM32MP23x:突破成本限制的工業(yè)AI應(yīng)用核心
- 意法半導(dǎo)體推出用于匹配遠(yuǎn)距離無(wú)線微控制器STM32WL33的集成的匹配濾波芯片
- ESP32開(kāi)發(fā)板連接TFT顯示屏ST7789跳坑記
- 如何讓ESP32支持analogWrite函數(shù)
- LGVL配合FreeType為可變字體設(shè)置字重-ESP32篇
- 使用樹(shù)莓派進(jìn)行 ESP32 Jtag 調(diào)試
- ESP32怎么在SPIFFS里面存儲(chǔ)html,css,js文件,以及網(wǎng)頁(yè)和arduino的通訊
- ESP32 freeRTOS使用測(cè)試
- 480Wh/kg!湖南久森半固態(tài)金屬鋰負(fù)極電池即將量產(chǎn)
- 中國(guó)首條硫化物固體電解質(zhì)量產(chǎn)線正式落地
- QUT開(kāi)發(fā)出新的LENS系統(tǒng) 可以讓機(jī)器人進(jìn)行類似大腦的導(dǎo)航
- 毫米波雷達(dá)裝機(jī)量分析:毫米波雷達(dá)裝車量持續(xù)攀升,大陸和博世占據(jù)60%以上市場(chǎng)份額
- TDK推出適用于車載濾波器的同軸電纜供電電感器
- 大摩給“人形機(jī)器人100”清單注入新思路
- 行家預(yù)判:2025年車載Mini LED反超OLED
- 2025數(shù)智未來(lái)峰會(huì):深度解讀AI賦能工業(yè)的趨勢(shì)與實(shí)踐
- 工業(yè)自動(dòng)化中的Raspberry Pi:簡(jiǎn)化經(jīng)濟(jì)實(shí)惠的邊緣計(jì)算
- 意法半導(dǎo)體宣布擴(kuò)大在新加坡的“Lab-in-Fab”廠內(nèi)實(shí)驗(yàn)室合作項(xiàng)目
- 【投票瓜分2500元紅包】2022得捷電子創(chuàng)新設(shè)計(jì)大賽優(yōu)秀作品人氣獎(jiǎng)由你來(lái)定!
- 積分芯幣兌換情人節(jié)專場(chǎng)
- DEYISUPPORT:【全新FAQ來(lái)襲】今夏且聽(tīng)風(fēng)吟,你不能錯(cuò)過(guò)的精華!
- 暢想十二月,設(shè)計(jì)我自己的EEWORLD!
- DEYISUPPORT TI 大咖級(jí)工程師在這里,等你來(lái)約!
- 提出你的電源問(wèn)題&技術(shù)解答,提升自我電源知識(shí),贏取好禮
- 看是德科技利用校準(zhǔn)降低儀器測(cè)量不確定度、提高測(cè)試精度 直播享好禮!
- 有獎(jiǎng)直播:8月21上午10:00 泰克助您應(yīng)對(duì)現(xiàn)在及未來(lái)的測(cè)試挑戰(zhàn)!
- 89S51的p3.0腳和p3.1腳是用來(lái)進(jìn)行RS232通訊的,請(qǐng)問(wèn)在這兩個(gè)腳能不能直接跟計(jì)算機(jī)連接,如果不能,是不是要在和計(jì)算機(jī)連接之間連上一個(gè)232接口芯片呢
- 電路“集成”使軍事力量倍增
- uc3875的使用
- 模糊控制用單片機(jī)編,誰(shuí)試過(guò)啊
- 新年芯幣競(jìng)價(jià)第三期——圖書(shū)競(jìng)價(jià)
- 測(cè)判三極管的方法
- 8051單片機(jī)C語(yǔ)言徹底應(yīng)用
- beagle bone black怎么用SD卡更新內(nèi)核
- 轉(zhuǎn)載:一在華為工作的硬件工程師的硬件調(diào)試總結(jié)
- IT巨頭的前世今生