国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

CC2530 芯片中BootLoader 程序的設(shè)計(jì)與實(shí)現(xiàn)

2016-05-16 02:54樊星男
關(guān)鍵詞:主程序字節(jié)串口

樊星男

(太原學(xué)院,山西 太原 030032)

1 引言

BootLoader(啟動(dòng)引導(dǎo))程序是運(yùn)行于主程序之前的一段程序,其主要功能是要完成對(duì)主程序的更新、配置和啟動(dòng)[1-2]。BootLoader 程序與主程序是兩個(gè)獨(dú)立存在的程序,它所實(shí)現(xiàn)的功能并不被用戶可見,但是對(duì)設(shè)備的運(yùn)行、維護(hù)、升級(jí)卻起著極其重要的作用。我們知道,設(shè)備在使用過程中經(jīng)常會(huì)遇到需要進(jìn)行軟件升級(jí)的情況,有時(shí)是為了修改已有的軟件錯(cuò)誤,有時(shí)是為了增加新功能。這時(shí)BootLoader 程序可以極大的簡(jiǎn)化軟件更新方式,降低設(shè)備維護(hù)成本。同時(shí),BootLoader 程序還可以接受外部控制命令,完成對(duì)主程序運(yùn)行參數(shù)的配置。

2 BootLoader程序功能分析

BootLoader 程序運(yùn)行于主程序之前。當(dāng)設(shè)備上電后首先運(yùn)行BootLoader 程序。一般情況下,BootLoader 程序會(huì)對(duì)設(shè)備芯片進(jìn)行必要的配置,并檢查是否有外部觸發(fā)信號(hào)。如果沒有觸發(fā)信號(hào),則跳轉(zhuǎn)至主程序;如果有觸發(fā)信號(hào),則進(jìn)入BootLoader 循環(huán)。外部觸發(fā)信號(hào)可以是多種多樣的,常用的方式有跳線、按鍵、串口字符等。BootLoader 循環(huán)的主要功能是等待外部通過串口發(fā)送來的命令,然后執(zhí)行該命令。BootLoader 程序是與硬件平臺(tái)強(qiáng)相關(guān)的,所以對(duì)于不同的硬件設(shè)備,程序?qū)崿F(xiàn)的方式會(huì)各不相同,但是整體的工作流程和功能是基本一致的。BootLoader 程序工作流程見圖1。

圖1 BootLoader 程序工作流程圖

3 BootLoader程序在CC2530芯片上的實(shí)現(xiàn)

CC2530 芯片使用的是8051內(nèi)核,所以我們選取IAR for 8051 軟件作為BootLoader 程序的集成開發(fā)環(huán)境,這也是德州儀器公司推薦使用的開發(fā)環(huán)境。

3.1 CC2530芯片閃存劃分

BootLoader 程序與主程序是兩個(gè)相互獨(dú)立的程序,所以二者必須被存儲(chǔ)于獨(dú)立的閃存空間。

根據(jù)Flash 閃存空間的大小不同,CC2530 芯片分為CC2530F32/64/128/256 四個(gè)版本,分別具有32/64/128/256KB 的閃存,我們選取的是CC2530F256 芯片。該芯片的閃存被等分為128個(gè)閃存頁(yè)面,每個(gè)頁(yè)面大小為2KB[3]。這128個(gè)閃存頁(yè)面需要被劃分為幾個(gè)獨(dú)立空間,分別存儲(chǔ)BootLoader 程序和主程序,以保證兩者在運(yùn)行過程中不會(huì)修改對(duì)方的閃存空間。CC2530 閃存劃分示意圖見圖2 。

圖2 閃存劃分示意圖

從圖2 中可以看到,CC2530F256 芯片的128個(gè)閃存頁(yè)面被分為三部分。

第一部分:BootLoader 程序區(qū),從頁(yè)面0 開始到頁(yè)面3 結(jié)束,地址范圍為0x0000 到0x1FFF,用于存儲(chǔ)BootLoader 程序。由于芯片啟動(dòng)后首先從地址0x0000 開始執(zhí)行程序,所以BootLoader 程序的起始地址必須為0x0000。具體劃分方法是將BootLoader 工程中xcl 文件的CODE_START 字段修改 為0x0000,將CODE_END 修 改 為0x1FFF。CODE_START 和CODE_END 字段分別代表代碼在起始地址和結(jié)束地址,這樣在使用IAR 開發(fā)環(huán)境對(duì)工程進(jìn)行編譯時(shí),編譯器就只會(huì)將代碼分配在頁(yè)面0 到頁(yè)面3 的地址范圍內(nèi)。

第二部分:主程序區(qū),從頁(yè)面4 開始到頁(yè)面126結(jié)束,地址范圍為0x2000 到0x3F7FF,用于存儲(chǔ)主程序代碼,通過設(shè)置主程序工程中xcl文件的相應(yīng)字段實(shí)現(xiàn)。

第三部分:保留區(qū),頁(yè)面127,地址范圍為0x3F800 到0x3FFFF。該部分是由德州儀器分配使用,用于存儲(chǔ)芯片信息。

3.2 CC2530串口通信

BootLoader程序進(jìn)入循環(huán)后主要任務(wù)就是接收外部通過串口發(fā)送來的命令并執(zhí)行。為了更為方便和有效的進(jìn)行通信,我們對(duì)BootLoader 程序的通信數(shù)據(jù)格式進(jìn)行了定義,數(shù)據(jù)格式見表1。

表1 串口通信數(shù)據(jù)格式

起始位:該位是一個(gè)完整命令的開始,這里我們?cè)O(shè)置為0xFE 。

長(zhǎng)度:該位表示的是數(shù)據(jù)段的長(zhǎng)度。

命令碼:該位表示命令類型,可以根據(jù)開發(fā)者的習(xí)慣自行定義,這里我們定義0x01 為寫閃存、0x02 為讀閃存、0x03 為加載程序、0x04 為啟動(dòng)設(shè)備。

響應(yīng):該位只有對(duì)命令進(jìn)行響應(yīng)時(shí)才有,表示BootLoader 程序?qū)γ畹膱?zhí)行結(jié)果。

數(shù)據(jù):該段表示數(shù)據(jù)內(nèi)容。當(dāng)命令為寫閃存和加載程序時(shí),數(shù)據(jù)段中前兩個(gè)字節(jié)為操作起始地址;當(dāng)命令為讀閃存時(shí),數(shù)據(jù)段中前兩個(gè)字節(jié)為操作起始地址,第3個(gè)字節(jié)為讀取長(zhǎng)度。由于整個(gè)芯片閃存有256KB,這個(gè)大小超過了兩個(gè)字節(jié)所能表示的地址范圍,所以這里對(duì)地址進(jìn)行了一些處理,即串口數(shù)據(jù)中傳輸?shù)牡刂肥菍?shí)際地址除以4,它表示的是字地址,而不是字節(jié)地址。

校驗(yàn)位:該位是從起始位開始至數(shù)據(jù)結(jié)束按字節(jié)進(jìn)行異或操作的結(jié)果,通過計(jì)算和檢測(cè)該位可以確認(rèn)數(shù)據(jù)傳輸?shù)耐暾院驼_性。

3.3 CC2530的閃存讀寫

CC2530F256 芯片擁有256KB 的閃存空間,這些閃存空間被等分為128 頁(yè),而這128 頁(yè)空間又可以等分為8個(gè)閃存塊。通過操作芯片內(nèi)部的MEMCTR 寄存器可以分別將這8個(gè)閃存塊空間映射到芯片內(nèi)存空間0x8000——0xFFFF 這個(gè)地址范圍內(nèi),然后通過操作指針的方式讀取閃存內(nèi)容。

CC2530 芯片有兩種寫閃存的方式,分別是DMA 寫方式和CPU 寫方式。為了保護(hù)閃存內(nèi)容,防止程序在運(yùn)行過程中修改程序代碼,從而產(chǎn)生不可預(yù)知的錯(cuò)誤,芯片在運(yùn)行過程中是禁止程序修改閃存內(nèi)容的,所以如果使用CPU 寫方式時(shí),必須將程序搬遷到SRAM 中運(yùn)行,并且要嚴(yán)格按照芯片的時(shí)序要求進(jìn)行寫操作。為此我們采用的是DMA寫方式。DMA 寫方式的操作步驟見圖3。

圖3 DMA 寫閃存操作步驟

在配置DMA 通道的時(shí)候要注意的是DMA 通道的目標(biāo)地址是寄存器FWDATA 而不是閃存地址。閃存地址需要在第二步操作中寫入到寄存器FADDRL 和FADDRH 中。此外還需要遵守以下幾點(diǎn)要求:首先,頁(yè)面是存儲(chǔ)器進(jìn)行擦除操作的最小單位,通過設(shè)置FCTL.ERASE 為1 可以將FADDRH 所對(duì)應(yīng)的閃存頁(yè)面整頁(yè)擦除,擦除結(jié)果為全部變?yōu)?xFF。其次,字是存儲(chǔ)器進(jìn)行寫操作的最小單位,也就是寫入閃存的數(shù)據(jù)必須為4 字節(jié)整數(shù)倍。第三,存儲(chǔ)器只允許將存儲(chǔ)器中的每個(gè)比特位由‘1’寫為‘0’。所以,在對(duì)閃存進(jìn)行寫操作時(shí)必須首先將目標(biāo)地址所在頁(yè)面進(jìn)行擦除操作。

4 BootLoader上位機(jī)程序設(shè)計(jì)

為了配合BootLoader 程序完成設(shè)備維護(hù)人員的操作命令,我們使用VisualBasic 軟件設(shè)計(jì)開發(fā)了上位機(jī)程序。通過使用VisualBasic 中的MSComm組件可以方便的實(shí)現(xiàn)計(jì)算機(jī)與芯片的串口通信。上位機(jī)程序如圖4。

圖4 上位機(jī)服務(wù)程序

通過使用MSComm 控件的CommPort 屬性設(shè)置串口號(hào),使用PortOpen 屬性打開關(guān)閉串口,通過使用Settings 屬性設(shè)置串口波特率等信息。Input 和Output 方法可以分別實(shí)現(xiàn)串口的讀寫操作[4-5]。

為了配合BootLoader 完成閃存的寫操作,上位機(jī)程序在設(shè)計(jì)中需要注意以下幾點(diǎn):一是進(jìn)行寫操作時(shí)的數(shù)據(jù)長(zhǎng)度必須為4 字節(jié)整數(shù)倍。二是進(jìn)行讀寫操作的數(shù)據(jù)長(zhǎng)度不能超過BootLoader 程序中串口讀寫緩沖大小。三是客戶端必須在接收到BootLoader 程序的響應(yīng)后才能發(fā)出下一條命令。

5 結(jié)束語

本文分析了BootLoader 程序的一般功能,并結(jié)合CC2530 芯片的硬件特點(diǎn),設(shè)計(jì)實(shí)現(xiàn)了CC2530芯片中的BootLoader 程序。通過實(shí)際測(cè)試表明,該程序運(yùn)行穩(wěn)定,可以極大地降低CC2530 芯片設(shè)備的運(yùn)行維護(hù)成本,具有良好的實(shí)際應(yīng)用價(jià)值。

猜你喜歡
主程序字節(jié)串口
自動(dòng)升級(jí)程序在船舶監(jiān)測(cè)系統(tǒng)中的應(yīng)用
No.8 字節(jié)跳動(dòng)將推出獨(dú)立出口電商APP
淺談AB PLC串口跟RFID傳感器的通訊應(yīng)用
淺談數(shù)控銑削技術(shù)代碼程序的嵌套方式研究
No.10 “字節(jié)跳動(dòng)手機(jī)”要來了?
電控冰箱軟件模塊化設(shè)計(jì)
基于MSP430的四旋翼飛行器的S-BUS通信協(xié)議的設(shè)計(jì)與實(shí)現(xiàn)
時(shí)光倒流 換回PotPlayer老圖標(biāo)
數(shù)字電源內(nèi)部數(shù)據(jù)傳輸?shù)拇谕ㄐ欧椒▽?shí)現(xiàn)
USB接口的多串口數(shù)據(jù)并行接收方法探索