亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

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

        2016-05-16 02:54:20樊星男
        關(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 程序可以極大的簡化軟件更新方式,降低設(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è)閃存頁面,每個(gè)頁面大小為2KB[3]。這128個(gè)閃存頁面需要被劃分為幾個(gè)獨(dú)立空間,分別存儲(chǔ)BootLoader 程序和主程序,以保證兩者在運(yùn)行過程中不會(huì)修改對(duì)方的閃存空間。CC2530 閃存劃分示意圖見圖2 。

        圖2 閃存劃分示意圖

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

        第一部分:BootLoader 程序區(qū),從頁面0 開始到頁面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ì)將代碼分配在頁面0 到頁面3 的地址范圍內(nèi)。

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

        第三部分:保留區(qū),頁面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 。

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

        命令碼:該位表示命令類型,可以根據(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é)為讀取長度。由于整個(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 頁,而這128 頁空間又可以等分為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)要求:首先,頁面是存儲(chǔ)器進(jìn)行擦除操作的最小單位,通過設(shè)置FCTL.ERASE 為1 可以將FADDRH 所對(duì)應(yīng)的閃存頁面整頁擦除,擦除結(jié)果為全部變?yōu)?xFF。其次,字是存儲(chǔ)器進(jìn)行寫操作的最小單位,也就是寫入閃存的數(shù)據(jù)必須為4 字節(jié)整數(shù)倍。第三,存儲(chǔ)器只允許將存儲(chǔ)器中的每個(gè)比特位由‘1’寫為‘0’。所以,在對(duì)閃存進(jìn)行寫操作時(shí)必須首先將目標(biāo)地址所在頁面進(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ù)長度必須為4 字節(jié)整數(shù)倍。二是進(jìn)行讀寫操作的數(shù)據(jù)長度不能超過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é)命令
        只聽主人的命令
        No.8 字節(jié)跳動(dòng)將推出獨(dú)立出口電商APP
        淺談數(shù)控銑削技術(shù)代碼程序的嵌套方式研究
        No.10 “字節(jié)跳動(dòng)手機(jī)”要來了?
        電控冰箱軟件模塊化設(shè)計(jì)
        日用電器(2019年12期)2019-02-26 01:53:06
        移防命令下達(dá)后
        簡談MC7字節(jié)碼
        時(shí)光倒流 換回PotPlayer老圖標(biāo)
        這是人民的命令
        藍(lán)色命令
        亚洲精品国产一区av| 亚洲av无码第一区二区三区 | 精品一区二区av在线| 免费无码一区二区三区a片百度| 国产99久久久久久免费看| 久久人人做人人妻人人玩精| 亚洲综合天堂一二三区| 中国亚洲一区二区视频| 国产精品久久久久久久妇| AV有码在线免费看| 91久久精品国产性色tv| 午夜精品免费视频一区二区三区 | 黄片国产一区二区三区| 狠狠97人人婷婷五月| 熟妇人妻av无码一区二区三区| 女同中的p是什么意思| 亚洲AV无码成人网站久久精品| 日本女优中文字幕在线观看| 蜜臀av毛片一区二区三区| 国产在线 | 中文| 最新国产三级| 亚洲国产精品午夜一区| 国产在线播放一区二区不卡| 97人妻碰碰视频免费上线| 中文人妻无码一区二区三区| 成人性生交大片免费看激情玛丽莎 | 成av人片一区二区三区久久| 日本道免费一区二区三区日韩精品 | 国内精品九九久久精品小草| 国产成人自拍视频播放| 97在线观看播放| 岛国成人在线| 娇妻粗大高潮白浆| 中文av字幕一区二区三区| 精品少妇无码av无码专区| 一区二区三区日韩亚洲中文视频 | 亚洲的天堂av无码| 亚洲国产日韩精品综合| 亚洲视频高清一区二区| 性生交大片免费看淑女出招 | 国产农村乱辈无码|