基于飛思卡爾的Bootloader程序下載更新_第1頁
基于飛思卡爾的Bootloader程序下載更新_第2頁
基于飛思卡爾的Bootloader程序下載更新_第3頁
基于飛思卡爾的Bootloader程序下載更新_第4頁
基于飛思卡爾的Bootloader程序下載更新_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

本文格式為Word版,下載可任意編輯——基于飛思卡爾的Bootloader程序下載更新基于飛思卡爾的Bootloader程序下載更新

前言

寫這篇文檔是由于大三暑假時(shí)在一家公司實(shí)習(xí),做一個(gè)基于飛思卡爾的bootloader遠(yuǎn)程更新項(xiàng)目,剛開始定的技術(shù)指標(biāo)是基于MC9S12XS128單片機(jī)的Bootloader程序、遠(yuǎn)程(基于GSM網(wǎng)絡(luò))和CAN總線通信。但由于我只是一個(gè)本科實(shí)習(xí)生而且實(shí)習(xí)時(shí)間只有一個(gè)多月,所以只完成了基于SCI的本地寫入.S19文件的更新。這大約也就是這篇文檔所包含的內(nèi)容啦。

整個(gè)程序是存在瑕疵甚至基本上可以說是不成功的,但是我覺得自己在做這個(gè)項(xiàng)目的過程中確實(shí)也解決了網(wǎng)上沒有提到或者沒有答案的一些問題,特寫此文檔,希望大家各取所需,假使有什么高見或者發(fā)現(xiàn)了我明顯錯(cuò)誤的地方,也十分歡迎大家給我指出。歡迎大家前來指教。

小目錄

一、Bootloader的含義2二、SCI串口的使用3三、Flash的擦除和寫入5四、.S19文件的寫入13五、心得體會(huì)14

一、Bootloader的意義與作用

關(guān)于Bootloader的意義網(wǎng)上十分之多,這里針對單片機(jī)的Bootloader程序進(jìn)行說明。Bootloader是在單片機(jī)上電啟動(dòng)時(shí)執(zhí)行的一小段程序。也稱作固件,通過這段程序,可以初始化硬件設(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中寫入新的應(yīng)用程序。因此,Bootloader是依靠于特定的硬件而實(shí)現(xiàn)的,因此,在眾多嵌入式產(chǎn)品中目前還不可能實(shí)現(xiàn)通用Bootloader。

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

再舉一個(gè)例子。就拿我自己做這個(gè)程序的目的來說,我所在的公司將自己的產(chǎn)品賣到全國各地,假使哪一天公司的底層軟件工程師(單片機(jī)工程師)想要升級底層軟件,就可以借助GSM網(wǎng)絡(luò)直接通過單片機(jī)中的Bootloader程序進(jìn)行底層軟件的自我更新,而不是派出售后人員一臺(tái)一臺(tái)的進(jìn)行更新,節(jié)省了大量的人力物力。

注意點(diǎn):平日我們最常用到的下載程序的方法是通過USB數(shù)據(jù)線或其他數(shù)據(jù)線進(jìn)行程序的燒寫,這個(gè)方式是通過外界提供給單片機(jī)高電壓來對flash擦除和寫入完成的。而Bootloader不需要外界提供高電壓僅靠正常工作電壓便可完成對flash的擦除和寫入,從而達(dá)到更新程序的目的。

二、SCI串口的使用

前面也提到,我做的是通過SCI串口的本地更新。

SCI(SerialCommunicationInterface,串行通信接口)是最常用、最經(jīng)典的串行通信接口方式。通信雙方除了要依照約定的真?zhèn)€是進(jìn)行數(shù)據(jù)通信外,還要約定一致的通信速率,在SCI通信中使用波特率來表示。串行通信的波特率被定義為每秒內(nèi)傳送的位數(shù),單位為b/s或bps,常用的波特率有1200bps,4800bps,9600bps,19200bps,38400bps等。

SCI的使用主要注意兩點(diǎn):波特率的設(shè)置和工作方式的選擇,我選擇的是中斷工作方式。

波特率:

設(shè)置波特率的主要目的是使單片機(jī)和上位機(jī)(上位機(jī)在這里就指將信息發(fā)給單片機(jī)的PC端)保持同步。

MC9S12XS128的波特率寄放器是SCIBDH和SCIBDL,總共16位但是只有13位可以寫入。SBR[12:0]:波特率常數(shù),取值1~8191.波特率發(fā)生器的時(shí)鐘輸出是由MCU內(nèi)部總線時(shí)鐘BUSCLK分頻而來,SBR[12:0]就是分頻系數(shù),而SCI模塊需要的工作時(shí)鐘為波特率的16倍。SCI的波特率計(jì)算公式如下:

SCI=fBUS/(16*SBR[12:0])

波特率的計(jì)算數(shù)結(jié)果些許誤差可以忽略,以約等于常見通用的串行通信波特率數(shù)值。說了一大堆,終究如何設(shè)置不同的波特率呢,通過具體的程序代碼來表達(dá)一下。#defineSCIBusClock8000000//MC9S12XS128的總線時(shí)鐘是8MHz

#defineSCI38400bps(unsignedint)((unsignedlong)(SCIBusClock)/(unsignedlong)(614400))//38400*1638400波特率

#defineSCI19200bps(unsignedint)((unsignedlong)(SCIBusClock)/(unsignedlong)(307200))

//19200*1619200波特率

#defineSCI9600bps(unsignedint)((unsignedlong)(SCIBusClock)/(unsignedlong)(153600))

//9600*169600波特率

#defineSCI4800bps(unsignedint)((unsignedlong)(SCIBusClock)/(unsignedlong)(76800))//4800*164800波特率

#defineSCIBaudRateSCI9600bps//大多數(shù)狀況下用9600波特率

中斷工作方式:

選擇中斷的工作方式,一有數(shù)據(jù)從SCI串口輸出,單片機(jī)便立馬進(jìn)行接收處理。主要對SCI0CR1和SCI0CR2進(jìn)行操作。

SCI0CR2=0x2C;//00101100RIE=1,TE=1,RE=1

//RIE=1接收數(shù)據(jù)寄放器滿和重疊中斷請求使能//TE=1發(fā)送器使能//RE=1接收器使能具體的數(shù)據(jù)接收代碼為:

//SCIReceiveN:串行接收N個(gè)字節(jié)數(shù)據(jù)*

byteSCIReceiveN(void){

while(!SCI0SR1_RDRF);//假使SCI0SR1_RDRF為1則表示數(shù)據(jù)起存器接收到的數(shù)據(jù)有效returnSCI0DRL;//返回接收到的值,即SCI數(shù)據(jù)寄放器SCIDRL中的數(shù)據(jù)}

溫馨提醒:SCI程序終究對不對,有沒有正常的工作,還是要通過上位機(jī)來觀測。這就牽扯到用什么軟件來作為單片機(jī)和上位機(jī)的接口。網(wǎng)上好多資料推薦一款很經(jīng)典的軟件“超級終端〞,但是我個(gè)人認(rèn)為這款軟件太“經(jīng)典〞啦,太老啦,導(dǎo)致我一直不知道怎么用的。假使大家也遇到了這個(gè)問題,那么我向大家推薦“友善串口調(diào)試〞,完全的免費(fèi),而且界面簡單,使用簡單,英文名為“SerialPortUtility〞。

三、Flash的擦除和寫入

關(guān)于Flash的擦除和寫入,真的是讓我最吃力的一部分,網(wǎng)上的相關(guān)資料很少,好不簡單找到了一點(diǎn)相關(guān)代碼,卻發(fā)現(xiàn)程序不能正常的運(yùn)行,而且更令人無解的是程序本身怎么檢查都檢查不出錯(cuò)誤。好啦,一點(diǎn)一點(diǎn)的說說我的辛酸史。

首先,假使你在尋覓飛思卡爾的flash擦除寫入操作,很惋惜的告訴你,假使你用的不

是MC9S12XS系列,那么很有可能,你所需要的flash擦除寫入操作和我接下來將要說明的擦除寫入操作基本上不沾邊(除了原理上),由于飛思卡爾不同

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論