智汇工业-智慧工业、智能制造及工业智能、工业互联门户网站,专业的工业“互联网+”传媒

單片機(jī)自編程及Bootloader設(shè)計(jì)

來(lái)源:網(wǎng)絡(luò)

點(diǎn)擊:1326

A+ A-

所屬頻道:新聞中心

關(guān)鍵詞: 單片機(jī),自編程,Bootloader,μPD78F0881

      Bootloader是在單片機(jī)上電啟動(dòng)時(shí)執(zhí)行的一小段程序。也稱(chēng)作固件,通過(guò)這段程序,可以初始化硬件設(shè)備、建立內(nèi)存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適的狀態(tài),以便為最終調(diào)用應(yīng)用程序準(zhǔn)備好正確的環(huán)境。

      Boot代碼由MCU啟動(dòng)時(shí)執(zhí)行的指令組成。這里的loader指向MCU的Flash中寫(xiě)入新的應(yīng)用程序。因此,Bootloader是依賴(lài)于特定的硬件而實(shí)現(xiàn)的,因此,在眾多嵌入式產(chǎn)品中目前還不可能實(shí)現(xiàn)通用Bootloader。

      Bootloader的最大優(yōu)點(diǎn)是:在不需要外部編程器的情況下,對(duì)嵌入式產(chǎn)品的應(yīng)用代碼進(jìn)行更新升級(jí)。它使得通過(guò)局域網(wǎng)或者Intemet遠(yuǎn)程更新程序成為可能。例如,如果有5 000個(gè)基于MCU的電能表應(yīng)用程序需要更新,電能表制造商的技術(shù)人員就可以避免從事對(duì)每一個(gè)電能表重新編程的巨大工作量,通過(guò)使用Bootloader的功能,由控制中心通過(guò)電能表抄表系統(tǒng)網(wǎng)絡(luò),遠(yuǎn)程對(duì)5 000個(gè)電表重新編程。可見(jiàn),Bootloader功能對(duì)于嵌入式系統(tǒng)的廣泛應(yīng)用具有十分重要的意義。

      1 78K0/Fx2系列單片機(jī)簡(jiǎn)介

      78K0/Fx2系列是帶CAN控制器的8位單片機(jī),該系列單片機(jī)廣泛應(yīng)用于汽車(chē)電子,智能儀表等領(lǐng)域。其內(nèi)置POC(可編程上電清零電路)/LVI(可編程低電壓指示器),單電壓自編程閃存,引導(dǎo)交換功能(閃存安全保護(hù)),具有低功耗、寬電壓范圍、超高抗干擾等性能。

      78K0系列單片機(jī)支持自編程(Self-programming)。所謂自編程,是指用Flash存儲(chǔ)器中的駐留的軟件或程序?qū)lash存儲(chǔ)器進(jìn)行擦除/編程的方法。通過(guò)單片機(jī)的自編程功能,可以設(shè)計(jì)Bootloader程序,通過(guò)串口等通信接口實(shí)現(xiàn)對(duì)產(chǎn)品重新編程、在線(xiàn)升級(jí)的功能。

      以PD78F0881為例。PD78F0881為78KO/Fx2系列中的一款44管腳單片機(jī),內(nèi)置32 KB Flash ROM,2 KB RAM,自帶2個(gè)串行通信接口。其內(nèi)部Flash結(jié)構(gòu)如圖1所示。為了方便實(shí)現(xiàn)擦除和編程,人為地將整個(gè)Flash分成若干個(gè)block,每個(gè)block大小為1 KB。block為自編程庫(kù)函數(shù)中空白檢測(cè)、擦除、校驗(yàn)的最小單位。blockO從地址0000H開(kāi)始,程序都從0000H開(kāi)始執(zhí)行。block0~block3共4 KB存儲(chǔ)空間為Bootloader程序存儲(chǔ)區(qū)域。block4~block31為應(yīng)用程序存儲(chǔ)區(qū)域。

      

      為了防止Bootloader自身的升級(jí)失敗,設(shè)計(jì)了引導(dǎo)交換功能。該功能定義2個(gè)簇,即Boot cluster0和Boot cluster1。Boot clustee0為block0~block3的4 KB存儲(chǔ)空間,Boot cluster1為block4~block7的4 KB存儲(chǔ)空間。因此,實(shí)際運(yùn)用過(guò)程中,一般把應(yīng)用程序的開(kāi)始定義在2000H,也就是從block8開(kāi)始。

      Flash地址為0000H~FFFFH。7FFFFH~FFFFH存儲(chǔ)空間為保留區(qū)域以及特殊功能寄存器區(qū)域等,用戶(hù)無(wú)法對(duì)其進(jìn)行編程。

      2 自編程

      2.1 自編程環(huán)境

      2.1.1 硬件環(huán)境

      FLMDO引腳是78KO/Fx2系列單片機(jī)為Flash編程模式設(shè)置的,用于控制MCU進(jìn)入編程模式。在通常操作情況下,F(xiàn)LMDO引腳下拉到地。要進(jìn)入自編程模式,必須使FLMDO引腳置成高電平。因此,通過(guò)一個(gè)普通I/O接口控制FLMD0引腳的電平。如圖2所示。

      

      2.1.2 軟件環(huán)境

      1)使用通用寄存器bank3,自編程庫(kù)函數(shù),需要調(diào)用通用寄存器bank3。因此,在自編程時(shí),不能對(duì)通用寄存器bank3操作。

      2)使用100 B RAM(入口RAM)作為隱藏ROM中函數(shù)的工作區(qū),入口RAM,是Flash存儲(chǔ)器自編程樣例庫(kù)所使用的RAM區(qū)域。用戶(hù)程序需要保留著塊區(qū)域,當(dāng)調(diào)用庫(kù)時(shí),需要指定這片區(qū)域的起始地址。入口RAM地址可以指定在FB00h~FE20h之間。

      3)4~256 B RAM作為數(shù)據(jù)緩沖區(qū),必須是FE20H~FE83H以外的內(nèi)部高速RAM區(qū)域。

      4)最大39 B RAM作為隱藏ROM函數(shù)的堆棧。

      5)隱藏ROM中的函數(shù)被0000H~7FFFH中的應(yīng)用程序調(diào)用。

      2.2 自編程流程

      自編程功能利用自編程軟件庫(kù)完成用戶(hù)程序?qū)lash內(nèi)容的重新編程。如果在自編程的過(guò)程中有中斷發(fā)生,那么自編程將暫停來(lái)響應(yīng)中斷。中斷結(jié)束,自編程模式恢復(fù)后,自編程過(guò)程將繼續(xù)進(jìn)行。采用匯編語(yǔ)言編寫(xiě)78K0/Fx2自編程軟件庫(kù),如表1所示。

      

      自編程操作流程如圖3所示,當(dāng)單片機(jī)收到自編程執(zhí)行信號(hào)時(shí),開(kāi)始進(jìn)入自編程模式。將FLMDO引腳設(shè)置成高電平,初始化入口RAM,為自編程庫(kù)函數(shù)開(kāi)辟空間。當(dāng)確認(rèn)FLMD0為自編程狀態(tài)時(shí),開(kāi)始檢查需要編程區(qū)域是否為空白區(qū)域。當(dāng)被編程區(qū)域不是空白區(qū)域時(shí),先將其擦除,然后在此區(qū)域進(jìn)行編程。編程結(jié)束后進(jìn)行校驗(yàn)。若校驗(yàn)無(wú)誤,則將FLMDO引腳設(shè)置成低電平,退出自編程模式。

      

      3 引導(dǎo)交換(boot swap)

      產(chǎn)品程序的升級(jí)包括應(yīng)用程序的升級(jí)和引導(dǎo)程序(Bootloader自身)的升級(jí)。為了防止引導(dǎo)程序在升級(jí)的過(guò)程中發(fā)生錯(cuò)誤,從而導(dǎo)致MCU無(wú)法啟動(dòng),設(shè)計(jì)了引導(dǎo)交換功能。以圖4說(shuō)明引導(dǎo)交換的實(shí)現(xiàn)過(guò)程。

      

      1)舊的Boot程序首先將新的Boot程序編程到交換引導(dǎo)簇1(Boot cluster 1),然后設(shè)置啟動(dòng)交換標(biāo)志位,并強(qiáng)迫看門(mén)狗復(fù)位。

      2)復(fù)位啟動(dòng)后,MCU看到交換標(biāo)志位,便從交換引導(dǎo)簇1處開(kāi)始啟動(dòng)。交換引導(dǎo)簇1處的新Boot程序?qū)z查交換標(biāo)志位。如果交換標(biāo)志位被置1,則新的Boot程序?qū)⒉脸粨Q引導(dǎo)簇0(Boot cluster 0)區(qū)域,并將自身復(fù)制到交換引導(dǎo)簇O,然后將交換標(biāo)志位清零,強(qiáng)迫看門(mén)狗復(fù)位。

      3)復(fù)位啟動(dòng)后,MCU看到交換標(biāo)志位被清零。又從交換引導(dǎo)簇0處開(kāi)始執(zhí)行。這樣就完成了boot程序自身的升級(jí)。即使在升級(jí)過(guò)程中遇到斷電等異常情況,在重新上電后也能重新完成Boot程序升級(jí)。有效地防止在升級(jí)過(guò)程中出現(xiàn)斷電等等異常情況而導(dǎo)致升級(jí)失敗,MCU無(wú)法啟動(dòng)的問(wèn)題,使Boot程序的升級(jí)變得安全可靠。

      4 Bootloadler設(shè)計(jì)

      4.1 簡(jiǎn)單的Bootloader

      一個(gè)簡(jiǎn)單的Bootload包括5個(gè)元素。

      1)啟動(dòng) Bootloader的信號(hào) Bootloader程序是在執(zhí)行應(yīng)用程序之前所執(zhí)行的一小段程序,當(dāng)Bootloader程序把控制權(quán)轉(zhuǎn)交給應(yīng)用程序后,在MCU復(fù)位前,Bootloader程序?qū)⒉辉賵?zhí)行。因此,需要產(chǎn)生一個(gè)信號(hào)觸發(fā)MCU開(kāi)始Bootloader程序。該信號(hào)可以是中斷,也可以通過(guò)串口傳送的一條指令,或者是別的程序觸發(fā)的信號(hào)。

      2)執(zhí)行 Bootloader的信號(hào) 單片機(jī)程序啟動(dòng)時(shí),MCU是裝載新的應(yīng)用程序還是執(zhí)行已經(jīng)存在的程序取決于外部信號(hào)。該信號(hào)可以是上電時(shí)的一個(gè)端口信號(hào),用來(lái)控制MCU裝載新程序還是執(zhí)行舊程序,也可以是從串口接收到的指令等。

      3)將新的代碼傳送給MCU 通過(guò)RS485、I2C、CAN或者USB傳送新的應(yīng)用程序數(shù)據(jù)。因?yàn)橐獋魉偷拇a一般會(huì)超過(guò)MCU的RAM容量,因此需要一些控制數(shù)據(jù)流量的措施。一般使用XON/XOFF軟件握手協(xié)議,傳送代碼的格式一般選擇Intel hex格式。

      4)Flash新代碼的自動(dòng)編程 每次MCU接收到一批新的數(shù)據(jù),就要將其編程到正確的Flash地址。如果該地址非空白,MCU在編程前必須先擦除。一般在編程中或者編程后還需要檢查存儲(chǔ)器的內(nèi)容。

      5)將控制權(quán)轉(zhuǎn)移給有效的應(yīng)用程序 在接收和編程了新的代碼后,Bootloader寫(xiě)一個(gè)校驗(yàn)和或者其他唯一字節(jié)序列到一個(gè)固定的存儲(chǔ)單元。Bootloader檢測(cè)該值,如果該值存在,Bootloader就將控制權(quán)傳給應(yīng)用程序。

      4.2 Intelhex格式

      在線(xiàn)升級(jí)的程序代碼采用編譯器輸出的Intel hex格式文件。Intel hex文件常用來(lái)保存單片機(jī)或其他微處理器的程序代碼。它保存物理程序存儲(chǔ)區(qū)中的目標(biāo)代碼映象。一般的編程器都支持這種格式。Intel hex文件記錄中的數(shù)字都是十六進(jìn)制格式。在InteI hex文件中,每一行包含一個(gè)HEX記錄。Intel hex文件通常用于傳輸將被存于Flash或者EEPROM中的程序和數(shù)據(jù)。Intel hex由任意數(shù)量的十六進(jìn)制記錄組成。每個(gè)記錄包含5個(gè)域,它們按照?qǐng)D5所示格式排列。

      

      每一個(gè)部分至少由2個(gè)十六進(jìn)制編碼字符組成。它們構(gòu)成1個(gè)字節(jié)。每一個(gè)部分的意義如下所述:

      1)每個(gè)Intel hex記錄都由冒號(hào)開(kāi)頭,自編程的過(guò)程中以此判斷一個(gè)Intel hex記錄的開(kāi)始。

      2)數(shù)據(jù)長(zhǎng)度代表當(dāng)前記錄中數(shù)據(jù)字節(jié)的數(shù)量。

      3)地址代表當(dāng)前記錄中數(shù)據(jù)在存儲(chǔ)區(qū)域中的起始地址。

      4)HEX記錄類(lèi)型有如下4種:00-數(shù)據(jù)記錄;01-文件結(jié)束記錄;02-擴(kuò)展段地址記錄;03-轉(zhuǎn)移地址記錄。NEC編譯器輸出的Intel hex文件中。只包含數(shù)據(jù)類(lèi)型00和01。其中O1作為自編程過(guò)程中數(shù)據(jù)結(jié)束的判定標(biāo)志。

      5)數(shù)據(jù)域分用于存儲(chǔ)需要寫(xiě)入Flash中的內(nèi)容,一個(gè)記錄可以有許多數(shù)據(jù)字節(jié)。記錄中的數(shù)據(jù)字節(jié)數(shù)量必須與數(shù)據(jù)長(zhǎng)度中的值相符。

      6)校驗(yàn)和是取記錄中從數(shù)據(jù)長(zhǎng)度到數(shù)據(jù)域最后一個(gè)字節(jié)的所有字節(jié)總和的2的補(bǔ)碼。

      根據(jù)以上說(shuō)明,必須在程序中對(duì)接收到的Inter hex文件進(jìn)行解碼,獲取數(shù)據(jù)以及數(shù)據(jù)地址,并對(duì)收到的數(shù)據(jù)進(jìn)行校驗(yàn),然后將接收正確的數(shù)據(jù)編程到Flash相應(yīng)的地址上。

      4.3 Bootloader設(shè)計(jì)思路

      單片機(jī)收到啟動(dòng)信號(hào)后,重新啟動(dòng)程序。啟動(dòng)的時(shí)候首先執(zhí)行Boot代碼,Boot代碼檢查是否收到執(zhí)行升級(jí)信號(hào)。如果需要升級(jí)程序,則通過(guò)串口或者其他通信接口接收新的應(yīng)用程序,loader程序向單片機(jī)Flash中寫(xiě)入新的應(yīng)用程序代碼。最后通過(guò)檢查校驗(yàn)位檢測(cè)程序是否有效。如果有效,則Bootloader將CPUMCU控制權(quán)交給應(yīng)用程序。整個(gè)升級(jí)過(guò)程完成。Bootloader執(zhí)行過(guò)程如圖6所示。

      

      需要注意的是Bootloader自身的更新和應(yīng)用程序的更新還需區(qū)別處理。通過(guò)辨別接收到數(shù)據(jù)的編程地址來(lái)判斷是Bootloader更新還是應(yīng)用程序更新。若編程地址從0000H開(kāi)始,則為Bootloader更新。Bootloader更新則需要執(zhí)行引導(dǎo)交換(boot swap)功能;若為應(yīng)用程序更新,自編程結(jié)束后,直接將CPU交給應(yīng)用程序。

      5 結(jié)束語(yǔ)

      本文探討了78KO/FC2系列μPD78F0881單片機(jī)的自編程功能以及Bootloader的設(shè)計(jì)方法。具體描述了通過(guò)單片機(jī)串口對(duì)相應(yīng)的應(yīng)用程序通過(guò)Bootloader進(jìn)行升級(jí)。此版本的Bootloader使用晶振20 MHz,通過(guò)串口Uart60,設(shè)置波特率為115 200,在μPD78F0881單片機(jī)上成功實(shí)現(xiàn)了用戶(hù)應(yīng)用程序的升級(jí)更新。在接下來(lái)的工作中,Bootloader的設(shè)計(jì)應(yīng)當(dāng)面向更多的通信接口。例如,通過(guò)CAN總線(xiàn)接口升級(jí),通過(guò)USB接口升級(jí)等等。

    (審核編輯: 智匯小新)

    聲明:除特別說(shuō)明之外,新聞內(nèi)容及圖片均來(lái)自網(wǎng)絡(luò)及各大主流媒體。版權(quán)歸原作者所有。如認(rèn)為內(nèi)容侵權(quán),請(qǐng)聯(lián)系我們刪除。

    主站蜘蛛池模板: 有源滤波器-高压无功补偿装置-高压无功补偿柜-10KV电容柜-安徽众升电力科技有限公司 | 上海中泉泵业制造有限公司-柴油机泵,一体化泵站,柴油机消防泵,泵站,预制一体化泵站 | 粮食烘干机|玉米烘干机|稻谷烘干机|小麦烘干机|大型连续烘干塔|500吨连续烘干塔|钢板仓|-郑州新光矿山机械制造有限公司 | 清洗剂-防锈油-润滑油-嘉信供应链一站式供应厂家 | 空气消毒机厂家-医用空气消毒机-医用空气净化器-山东佳境医疗 | 合肥年会策划-合肥开业庆典公司-合肥会务活动礼仪公司-合肥展台搭建/音响租赁公司 [七色海] | 深圳沃亚游学官网丨国外游学丨国际夏冬令营丨美国游学线路丨出国短期游学丨亲子海外游丨游学咨询: 0755-83843308 | 新密耐火材料厂家价格-河南郑州荣盛窑炉耐火材料有限公司 | 锯轨机|气动锯轨机|内燃锯轨机|电动钢轨钻孔机|内燃钢轨钻孔机-山东卓力铁路设备有限公司 | 京建鹏达_商用无烟烧烤设备多少钱|开店商用自助旋转烧烤炉价格|无烟电烧烤炉批发厂家|无烟烧烤桌定做厂商-京建鹏达烧烤设备网 | 无线对讲机系统-中继台-山区隧道信号覆盖-贝亚特 | 立式/卧式/潜水/液下/螺杆/耐磨/渣浆泵|泥浆泵|离心泵,厂家 - 河北聚盛泵业制造有限公司 | 山东腾达源金属材料官网-耐磨板nm400,nm400耐磨钢板,nm500耐磨钢板切割,耐候板批发,高强板现货【价格】 | 盐城市城镇化建设投资集团有限公司[盐城国资企业、盐城国资集团、盐城文化旅游、盐城基础设施、盐城土地开发、盐城粮食收储] | 校园防欺凌|视频一键式报警器|防霸凌报警柱|停车场语音对讲|商铺联网报警|应急广播音柱|居家养老一键通|盾王可视联网运营中心 | 河南反渗透设备,河南纯净水设备,河南软化水设备,郑州EDI超纯水设备,郑州水处理设备厂家_河南江宇环保科技有限公司 | 上海机械网 机械 机械加工 金属加工 上海机械网 机械设备 上海机械 | 正拓夏令营官网-中小学生军事夏令营-研学军旅训练拓展夏令营 | 罗茨鼓风机维修_三叶罗茨风机维修厂家电话_山东长沙章丘鼓风机修理_章鼓高压真空泵「上门服务」 罗茨鼓风机价格_三叶罗茨鼓风机厂家-山东锦工有限公司 | 削片机|木材破碎机|木材粉碎机|模板破碎机|双轴撕碎机_郑州木工机械制造厂 | 实验升降炉-箱式管式炉- 台车真空炉-熔块旋转炉-推板隧道窑-洛阳鲁威窑炉有限公司 | 组合包装箱,折叠包装箱,烟台木箱,烟台包装箱-烟台顺达包装有限责任公司 | 铁氟龙膜/板/棒-铁氟龙网带/胶带/胶布-[东莞华氟]专注铁氟龙及特氟龙制品生产 | 移动厕所_真空环保厕所_环保厕所_景区生态厕所_雨施捷移动厕所生产厂家 | 烟台真空包装,烟台木包装,烟台熏蒸木箱-烟台福岭木制品有限公司 烟台通风管道,烟台风机风管,烟台风阀-烟台福莱通风设备有限公司 | 拼装式电磁屏蔽室厂家,屏蔽机柜生产厂家,电波暗室制造商,屏蔽配件-常州麦思恩屏蔽机柜生产厂家 | 直流电机调速器,直流电机控制器,直流电机调速电源-淄博诚铖创惠电子有限公司 | 桶装水配送-瓶装水-净水器-厦门水之露商贸有限公司,电话:18205922444 | 箱式污泥采样器-全自动旋转振荡器-恒温石墨电热板-常州亿通分析仪器制造有限公司 | 智能化解决方案 智能家居 家庭影院 灯光音箱 会议室报告厅 剧场剧院 指挥中心 大数据中心_沈阳天哲科技有限公司 | 矿用精确定位系统,井下4G无线通讯系统,工作面集控系统,皮带保护系统-山东新云鹏电气有限公司 | 排水PVC管-PVC排污管-给水PVC管-电线PVC管-米阳建材pvc管厂 | 家居网链网—家居产业互联网价值平台 | 铸铁平台-焊接平台-划线平台-三维焊接平台厂家-泊头市溪海冶金机械设备有限公司 | 河北伟业波纹管-百顺牌波纹补偿器(波纹管,膨胀节,伸缩节)、非金属补偿器 | 专业音响设备|数字功放|舞台音响|ktv音响|会议音响-劳伦士 | 液位变送器_智能压力变送器_3051差压变送器_单双法兰,投入式,电容式,温度变送器-淮安润中仪表科技有限公司 | 宜宾三江人才网_三江人才网_宜宾三江人才网_三江人才直聘网是本地颇具规模的网上人才市场 | 家用座椅电梯 斜挂升降平台 无障碍升降机 残疾人升降机的生产厂家超易达机械 | 湖北高新技术企业认定申报|武汉高企认定代办|武汉项目申报首选 - 湖北创优企科技服务有限公司 | 陕西筱润智能科技有限公司 干部人事智能档案柜 智能密集架 智能档案柜 部队选层文件智能柜 智能枪弹柜 财务智能档案柜 边防武警智能密集架 医院智能档案柜 部队选层文件智能柜智能枪弹柜 学校医院文件柜 企事业单位公检法智能文件柜 生产厂家-筱润智能科技有限公司 RFID射频智能密集架 全自动智能选层档案柜 智能密保柜 枪柜部队营房营具床桌椅办公家具 办公用品档案盒设备货架 全自动智能选层柜生产厂家-筱润智能科技有限公司 |