999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

MC9S12X 系列單片機PE 生成代碼的串口Bootloader設(shè)計

2021-10-29 12:18:44博,仇
電子設(shè)計工程 2021年20期
關(guān)鍵詞:單片機區(qū)域用戶

羅 博,仇 傲

(中海油田服務(wù)股份有限公司,河北三河 065201)

一般情況下,MC9S12X 系列單片機進行代碼升級需使用BDM 仿真器,如果電路板在汽車或者其他工業(yè)設(shè)備里,就需要拆卸設(shè)備,拆出電路板,操作繁瑣,耗時較多。在石油隨鉆儀器、航空航天、兵器等電路系統(tǒng)中,電路工作環(huán)境惡劣,震動劇烈,為增強抗震動沖擊及絕緣性能,電路板需要灌封膠[1-5],如果使用BDM 仿真器更新程序,選擇去除封膠直接下載程序,則很容易損傷電路板,選擇在接口引出程序下載線則會浪費寶貴的接口。如果可以通過原有通信總線完成程序升級,則可節(jié)約時間,簡化操作,降低成本。

Code Warrior 是一款集成開發(fā)平臺,可用于MC9S12X 系列芯片的工程開發(fā),具有實際應用開發(fā)所需的IDE、編譯器、鏈接器、調(diào)試器等[6]。PE(Processor Expert)是一款革命性的編程工具,可與CW開發(fā)平臺相結(jié)合,作為其內(nèi)部菜單實用,使用時只需要圖形化添加需要的模塊即可生成對應代碼。PE的選項式初始化操作簡單、快捷、方便,對于不同的飛思卡爾單片機,只要是相同的模塊,PE的初始化配置屬性就基本相同。PE 還可以自動生成中斷向量表,自動聲明中斷服務(wù)函數(shù)[7-9]。使用PE 編寫飛思卡爾系列嵌入式芯片程序,開發(fā)時間短,效率高,不易出錯。對于PE 開發(fā)的工程,如果可以用Bootloader在線升級程序,則將大大減少開發(fā)和維護時間。

1 BootLoader 原理簡介及硬件組成

1.1 BootLoader原理簡介

Bootloader 固化在芯片中,是上電后首先運行的程序,其主要功能是在電路系統(tǒng)初始化后,從ROM、Flash 等非易失存儲器上加載用戶應用程序(APP)代碼,然后引導APP 運行[10-13],使電路系統(tǒng)正常工作。

Bootloader的開發(fā),首先需要對單片機的存儲空間進行合理的分配。把Flash的程序存儲空間分為Bootloader 區(qū)域以及APP 區(qū)域。APP 區(qū)域是用戶應用程序代碼存放的區(qū)域。Bootloader 固化在相應的Flash 區(qū)域中,不能修改,通過BMD 仿真器下載后可一直使用,但是APP 區(qū)域可以重復由Bootloader 修改更新。Bootloader 區(qū)域存放的代碼控制存放APP 代碼的區(qū)域。上電后,Bootloader 與上位機建立通信成功后,通過串口、CAN 等通信方式接收APP 代碼,將其存放在相應的Flash 區(qū)域,完成修改后可以跳出Bootloader,執(zhí)行APP 區(qū)域的代碼,完成更新程序。

1.2 串口通信

文中方案使用MC9S12X 單片機的SCI 模塊進行串口通信,選擇RS-485 總線作為通信方式,RS-485總線采用半雙工工作方式,可進行多節(jié)點、遠距離通信,抗干擾能力強,在工業(yè)中使用廣泛。SCI 模塊連接到RS485 數(shù)據(jù)收發(fā)芯片來進行串口通信,芯片選擇TI 公司的SN65HVD11Q,最大速率為10 Mbps,最高溫度為125 ℃[14],可滿足石油、汽車等行業(yè)要求。

1.3 啟動設(shè)置

有多種方式?jīng)Q定上電時先進入Bootloader 還是APP。一般根據(jù)MC9S12X 系列單片機的PP0 引腳狀態(tài)決定,如果PP0引腳接地,則上電后進入Bootloader;若PP0 引腳為高電平,則上電時進入APP[15]。

文中方案選擇PP0 引腳接地,電路圖如圖1 所示。剛上電時進入Bootloader 狀態(tài),在一定時間內(nèi),如果收到在線升級命令,則繼續(xù)停留在Bootloader,等待上位機發(fā)送APP 代碼,接收完成后對APP 代碼進行修改,如果超過此時間,未收到在線升級命令,則進入APP,正常工作。

圖1 PP0引腳連接

2 Bootloader總體設(shè)計

2.1 Bootloader工作流程

Bootloader 簡要工作流程如圖2 所示。

圖2 Bootloader簡要工作流程

由于上電后PP0 引腳為0,因此首先進入Bootloader,完成初始化;然后,在較短時間內(nèi)決定繼續(xù)停留在Bootloader 狀態(tài)還是進入用戶應用程序,時間選擇為3 s。判斷依據(jù)為存儲在EEPROM 區(qū)域的數(shù)據(jù)B_flag,如果上電后第三秒時B_flag 為0,則跳轉(zhuǎn)執(zhí)行用戶應用程序;如果B_flag 為1,則停留在Bootloader 狀態(tài),等待接收其他命令。MCU 收到命令后,判斷命令是否合法,不合法則繼續(xù)等待,合法則執(zhí)行相應命令。在上電后3 s 內(nèi),上位機可以通過RS-485 總線向MCU 發(fā)送命令,改變B_flag的值。如果收到擦除APP 命令,則擦除存儲App的Flash 區(qū)域,并向上位機發(fā)送擦除成功命令,上位機收到命令后,發(fā)送s19文件,Bootloader 接收s19 文件完畢后,進行校驗,如果正確,則將代碼寫入對應的Flash 區(qū)域,寫入成功后,向上位機發(fā)送更新代碼成功消息,上位機收到消息后,如果發(fā)送進入App 命令,則跳轉(zhuǎn)進入APP,否則繼續(xù)停留在Bootloader 狀態(tài),等待接收其他命令。

2.2 串口設(shè)置

單片機通過SCI 模塊與上位機通信和下載APP代碼,對傳輸準確率要求高,對速率要求不高,因此,雖然目前RS-485 總線大數(shù)據(jù)量傳輸速率可以達到1 Mbps,但考慮到速率過高會導致電路工作時總線抗干擾能力差,從穩(wěn)定性考慮,波特率不需設(shè)置過高,通過SCIBDH 和SCIBDL 兩個寄存器將波特率最高設(shè)置為115 200 即可。幀格式設(shè)置包括1 個起始位、8 數(shù)據(jù)位、1 停止位。

2.3 擦除APP區(qū)域

Bootloader 擦除APP 代碼如圖3 所示。不同的芯片,其內(nèi)存空間不同,存儲APP的Falsh 區(qū)域也不同。根據(jù)內(nèi)存空間區(qū)別,NXP 公司為每一種MC9S12系列單片機分配對應的Part ID,Part ID 為16 位數(shù)據(jù),高8 位固化在地址0x001A,低8 位固化在地址0x001B[16]。所以,收到擦除App 命令后,讀取Part ID值,判斷屬于哪種芯片,然后擦除該芯片對應的FLASH 區(qū)域,將存儲的App 代碼擦除,不可擦除用戶重置向量和Bootloader[15]。

圖3 Bootloader擦除APP代碼

2.4 接收s19文件

Bootloader 擦除APP 區(qū)域成功后才可接收新的APP 代碼。Code Warrior 生成工程的Project.abs.s19文件不能直接發(fā)送給Bootloader。Bootloader 接收的s19 文件要求是全局(線性)地址,且數(shù)據(jù)必須對齊為32 字節(jié),數(shù)據(jù)長度也為32 字節(jié)。轉(zhuǎn)換s19 文件使用NXP官方提供的SRecCvt-GUI.exe即可[15],如圖4所示。

圖4 轉(zhuǎn)換s19文件

2.5 寫入Flash

Bootloader 接收完s19 文件后,根據(jù)Part ID 判斷s19 文件中地址是否與芯片匹配,如果地址正確,則向?qū)腇LASH 區(qū)域?qū)懭階PP 代碼,每次寫入32 個字節(jié)。代碼如圖5 所示。

圖5 將APP代碼寫入Flash

3 用戶程序設(shè)計

3.1 修改存儲空間

Bootloader 代碼與APP 代碼存儲區(qū)域不能重疊。Bootloader 代碼存放在地址0xF000~0xFFFF的區(qū)域,APP的重置向量存儲在地址0xEFE0~0xEFFF的區(qū)域,每個中斷向量地址為16 位,因此需要把ROM_C000的地址范圍從原來的0xC000~0xFEFF 改成0xC000~0xEFDF。

在Processor Expert的Build Option 中,點 擊Memery segments,再點擊ROM/RAM segments,選擇ROM_C000 區(qū)域,此處可設(shè)置ROM_C000 區(qū)域的各項參數(shù),只需要將size 修改為2FE0 即可,這樣結(jié)束地址就變?yōu)?xEFDF,如圖6 所示。

圖6 修改ROM_C000長度

0x7F10~0x7FFF 會被用于重定位中斷向量表,所以需要把ROM_4000的地址從原來的0x4000~0x7FFF 改成0x4000~0x7F0F。

在Processor Expert 中選擇ROM_4000 區(qū)域,將size 修改為0x3F10 即可,這樣結(jié)束地址就變?yōu)?x7F0F,如圖7 所示。

圖7 修改ROM_4000長度

3.2 設(shè)置中斷向量表的基地址

用戶中斷向量原存儲地址范圍為0xFF10~0xFFF8,每個向量為16 位地址,因為地址范圍0xF000~0xFFFF的區(qū)域要存放BootLoader,所以必須改變用戶中斷向量存儲地址范圍,改為0x7F10~0x7FF8。在Processor Expert的Properties 中選擇Internel resource mapping,然后選擇Interrupt/Reset vector table,最后在Interrupt vector table 中將Address修改為0x7F10,長度0xEA,最后一個用戶中斷向量地址變?yōu)?x7FF8,如圖8 所示。

圖8 修改中斷向量地址

Reset vector table 不能修改,其包括3 個地址分別為0xFFFA(COP Watchdog Timeout),0xFFFC(Clock Monitor Fail)和0xFFFE(Reset)的系統(tǒng)重置向量,其中地址為0xFFFE的Reset 向量包括引腳復位、上電復位、低電壓復位、非法地址復位4 種功能[16]。MC9S12X 系列單片機上電后先從地址0xFFFE 處讀取第一條指令,如果該地址改變,則上電后Bootloader 將無法工作。

在Code Warrior 生成的代碼中,3 個系統(tǒng)重置向量與其他中斷向量地址一起存放在vectors_s12xep.c文件中的tIsrFunc _vect[ ]中,將IVBR 修改為0x7F,中斷向量表起始地址從0xFF10 改為0x7F10,其他中斷向量基地址從0xFF 變?yōu)?x7F,但對這3 個系統(tǒng)重置向量無影響,其地址(0xFFFA~0xFFFE)不會改變,并不影響上電后Bootloader的正常運行[16]。但在Processor Expert 中,修改這3 個系統(tǒng)重置向量的地址時,其地址會改變,使Bootloader 無法正常工作,導致上電后芯片無法正常工作。

3.3 用戶應用程序進入Bootloader狀態(tài)

使用傳統(tǒng)方式進入Bootaloader 狀態(tài)時,必須重新上電,然后根據(jù)PP0 引腳是否為高電平進入Bootaloader。如果系統(tǒng)統(tǒng)一供電,則重新上電會影響系統(tǒng)其他子系統(tǒng)工作,如果單獨控制供電,則增加電路復雜性和成本。因此,可以在用戶程序中添加代碼,增加用戶程序進入Bootloader 功能,不需要重新上電。上位機通過RS-485 總線向單片機發(fā)送進入Bootloader 命令,命令校驗通過后,B_flag 賦值為1,然后重啟單片機。因為PP0 引腳一直接地,所以單片機重啟后進Bootloader 狀態(tài),如果在3 s 內(nèi)沒有收到上位機命令,則將B_flag 值變?yōu)?,停留在Bootloader狀態(tài),可以更新用戶程序。

4 上位機軟件開發(fā)

為了給Bootloader 發(fā)送s19 文件,開發(fā)上位機軟件。按照RS-485 通信協(xié)議,使用Visual C++開發(fā),完成與Bootloader 握手、讀取MCU 狀態(tài)、發(fā)送s19 文件、切換至用戶應用程序等功能。

5 結(jié)束語

傳統(tǒng)MC9S12X 系列單片機的在線升級均基于Code Warrior 生成代碼,代碼開發(fā)時間較長。文中設(shè)計的BootLoader 實現(xiàn)方式可以使用PE 圖形化方式完成用戶代碼開發(fā),編程基礎(chǔ)差和沒有系統(tǒng)訓練編程的開發(fā)人員也可編寫應用代碼,開發(fā)和維護效率高,不易出錯,利用系統(tǒng)本身的RS-485 總線更新程序,電路系統(tǒng)不用重新上電也可準確方便地實現(xiàn)代碼的現(xiàn)場更新升級,方便實際應用。通過對中海油服自研隨鉆測井工具和旋轉(zhuǎn)導向鉆井工具的實際應用表明,該方案至少可節(jié)約50%以上的開發(fā)和維護時間,大大減輕了科研人員負擔。

猜你喜歡
單片機區(qū)域用戶
基于單片機的SPWM控制逆變器的設(shè)計與實現(xiàn)
電子制作(2019年13期)2020-01-14 03:15:28
基于單片機的層次漸變暖燈的研究
電子制作(2019年15期)2019-08-27 01:12:10
基于單片機的便捷式LCF測量儀
電子制作(2019年9期)2019-05-30 09:42:02
關(guān)注用戶
商用汽車(2016年11期)2016-12-19 01:20:16
關(guān)注用戶
商用汽車(2016年6期)2016-06-29 09:18:54
關(guān)注用戶
商用汽車(2016年4期)2016-05-09 01:23:12
關(guān)于四色猜想
分區(qū)域
基于嚴重區(qū)域的多PCC點暫降頻次估計
電測與儀表(2015年5期)2015-04-09 11:30:52
Microchip推出兩個全新PIC單片機系列
主站蜘蛛池模板: 日韩一级毛一欧美一国产| 看国产一级毛片| 午夜不卡视频| 中文字幕佐山爱一区二区免费| 丁香婷婷久久| 国产精彩视频在线观看| 色婷婷国产精品视频| h网站在线播放| 亚洲国产av无码综合原创国产| 草草影院国产第一页| 国产免费网址| 亚洲三级色| 色悠久久久久久久综合网伊人| 国产精品综合久久久| 成年人国产视频| 欧美久久网| 91小视频在线观看| 久久婷婷五月综合色一区二区| 99视频国产精品| 国产成人91精品免费网址在线| 日韩欧美国产区| 欧美精品伊人久久| 亚洲福利一区二区三区| 欧美日韩在线国产| 亚洲 日韩 激情 无码 中出| 伊人国产无码高清视频| 久热中文字幕在线| 亚洲欧洲日韩久久狠狠爱| 国产另类视频| 中文字幕在线播放不卡| 亚洲免费福利视频| 在线免费看片a| 亚洲第一成年人网站| 国产午夜福利在线小视频| 无码专区国产精品第一页| 国产精品成人免费视频99| 国产女人喷水视频| 国产精品久久久久久久伊一| 香蕉网久久| 国产一级毛片网站| 国产91视频免费| 久久香蕉国产线看观| 思思热精品在线8| 日韩久久精品无码aV| 日韩高清成人| 亚洲av无码人妻| 中文字幕在线欧美| 日韩欧美成人高清在线观看| 亚洲一区二区三区国产精品| 日韩一级二级三级| 国产凹凸视频在线观看| 国产毛片高清一级国语| 女人毛片a级大学毛片免费 | 亚洲综合色在线| 伊人久久久大香线蕉综合直播| 亚洲黄色视频在线观看一区| 青青青国产视频手机| 国产精品区视频中文字幕| 亚洲美女操| 亚洲欧美自拍视频| 成人看片欧美一区二区| 色综合日本| 国产高清无码麻豆精品| 福利小视频在线播放| 亚洲伊人电影| 国产精品永久不卡免费视频| 欧美亚洲综合免费精品高清在线观看 | 国产免费久久精品99re丫丫一| 亚洲成人www| 亚洲免费人成影院| 成人福利在线视频| 无码 在线 在线| 欧美另类精品一区二区三区 | аⅴ资源中文在线天堂| 99久久无色码中文字幕| 在线观看国产精美视频| 国产精品流白浆在线观看| 黄色片中文字幕| 亚洲av成人无码网站在线观看| 国产无码网站在线观看| 国产精品99r8在线观看| 亚洲IV视频免费在线光看|