技術(shù)頻道

娓娓工業(yè)
您現(xiàn)在的位置: 中國(guó)傳動(dòng)網(wǎng) > 技術(shù)頻道 > 技術(shù)百科 > 通過CAN總線實(shí)現(xiàn)C8051F040固件升級(jí)

通過CAN總線實(shí)現(xiàn)C8051F040固件升級(jí)

時(shí)間:2011-04-08 15:04:39來源:zhangting

導(dǎo)語:?通過CAN總線實(shí)現(xiàn)C8051F040固件升級(jí)

摘要:本文針對(duì)新型SOC(System on a Chip)片上型混合信號(hào)的C8051F040單片機(jī)[1],通過對(duì)Flash存儲(chǔ)結(jié)構(gòu)、擦寫過程、CAN總線通信應(yīng)用層協(xié)議、軟件流程等方面進(jìn)行詳細(xì)闡述,提出了一種通過CAN通信端口實(shí)現(xiàn)穩(wěn)定性高、可靠性強(qiáng)的固件升級(jí)方案。

Abstract: This paper introduce a system that can upgrades the firmware of the C8051F040, a series of the SOC SCM, and elaborates firmware memories structure, process of Flash clear and write, application layer protocol by CAN-Bus, software process, then put forward a high stability and strong blue print for firmware upgrading byCAN-Bus.

Keywords: C8051F040; FLASH Page;monitor routine;CAN-bus communication protocol

引言

隨著電子科技的發(fā)展,單片機(jī)被廣泛應(yīng)用于工業(yè)自動(dòng)控制、儀器儀表。實(shí)際應(yīng)用中,系統(tǒng)會(huì)存在升級(jí)更新問題。在很多情況下,應(yīng)用于車輛、工程機(jī)械等產(chǎn)品上的單片機(jī)不方便拆缷,因此系統(tǒng)設(shè)備固件的在線更新就成為了很重要的問題。

Silicon Lab公司的51系列單片機(jī)C8051F040芯片內(nèi)部集成了完全支持CAN2.0A和CAN2.0B的CAN控制器。本文選用C8051F040單片機(jī),設(shè)計(jì)了IAP(In Application Program)應(yīng)用軟件,通過CAN通信端口,利用CAN總線通信從PC機(jī)接收程序更新代碼,實(shí)現(xiàn)穩(wěn)定可靠的固件升級(jí)。

1  C8051F040單片機(jī)固件存儲(chǔ)結(jié)構(gòu)

C8051F040是完全集成的混合信號(hào)片上系統(tǒng)型MCU,片上有64個(gè)數(shù)字I/O引腳,片內(nèi)集成了一個(gè)CAN2.0B控制器,具有32個(gè)消息對(duì)象,每個(gè)消息對(duì)象有其自己的標(biāo)識(shí),有高速、流水線結(jié)構(gòu)的與8051兼容的高速CIP-51內(nèi)核(可達(dá)25MIPS),有內(nèi)置的64KB的Flash程序存儲(chǔ)器和4352(4K+256)的片內(nèi)RAM,2個(gè)12位DAC,2個(gè)電壓比較器,1個(gè)電壓基準(zhǔn)。

IAP是指在主程序(用戶應(yīng)用程序)運(yùn)行的過程中,獲取新代碼對(duì)Flash塊、Flash寄存器Boot向量等進(jìn)行擦除和重新編程的方法。C8051F040的MCU能實(shí)現(xiàn)IAP, 是因?yàn)樗軌蛲ㄟ^運(yùn)行于MCU中的用戶代碼對(duì)Flash存儲(chǔ)器進(jìn)行擦除、寫入操作。C8051F系列單片機(jī)可以通過它的任何一個(gè)數(shù)字外圍接口實(shí)現(xiàn)IAP,包括UART,SMBUS,SPI、CAN。C8051F040單片機(jī)的內(nèi)部64KB Flash的存儲(chǔ)結(jié)構(gòu)可分為用于程序裝載的引導(dǎo)(Bootloader)程序區(qū)和用戶應(yīng)用程序存儲(chǔ)區(qū)兩部分。

固件升級(jí)的實(shí)現(xiàn)方法

系統(tǒng)需要編寫兩個(gè)Project:一個(gè)是Bootloader,通過JTAG在線寫入FLASH的引導(dǎo)程序區(qū);另一個(gè)是應(yīng)用程序,通過Bootloader寫入應(yīng)用代碼區(qū)。當(dāng)應(yīng)用程序需要升級(jí)時(shí),執(zhí)行Bootloader程序。Bootloader把從CAN通信端口收到的新應(yīng)用程序代碼寫入到應(yīng)用代碼區(qū)。本文中,引導(dǎo)程序區(qū)占用的是0x0000~0x1000的FLASH空間,應(yīng)用程序區(qū)用剩余的FLASH空間。引導(dǎo)程序和應(yīng)用程序的功能框圖分別如下圖-1和圖-2所示。

在更新FLASH程序代碼時(shí),必須先擦除,后寫入。

 ⑴  Flash擦除

C8051F040單片機(jī)的Flash程序區(qū)[2]按頁組織擦寫,512字節(jié)為一頁(page)。在刪除用戶程序區(qū)時(shí),首先禁止所有中斷,并且要使能程序刪除位PSEE(PSCTL.1),同時(shí)使能PSWE(PSCTL=0x03,即PSWE=1,PSEE=1,頁擦除模式),用C51語言的一個(gè)指針指向Flash程序區(qū)。如:char xdata *data addr=0x0000;

程序區(qū)每擦除一頁,地址指針加512,依此操作擦除程序區(qū);擦除部分程序:

while(addr<0x0F000)      // 0xF000 為60KB

{   *addr = 0x00;        // 空寫,啟動(dòng)擦除

    for(i=0;i<10;i++)

    addr = addr + 512;  // 這樣就把60KB的Flash舊應(yīng)用程序擦除了。

 ⑵ Flash寫入

可以用軟件使用MOVX指令對(duì)FLASH存儲(chǔ)器編程,像一般的操作數(shù)一樣為MOVX提供待編程的地址和數(shù)據(jù)字節(jié)。在使用MOVX指令對(duì)FLASH存儲(chǔ)器寫入之前,必須將程序存儲(chǔ)寫允許位PSWE(PSCTL.0)設(shè)置為邏輯‘1’,以允許FLASH寫操作。這將使MOVX指令執(zhí)行對(duì)FLASH的寫操作而不是對(duì)XRAM寫入。在用軟件清除之前,PSWE位一直保持置位狀態(tài)。為了避免對(duì)FLASH的誤寫,在PSWE為邏輯‘1’期間,禁止中斷。

寫FLASH存儲(chǔ)器可以清除數(shù)據(jù)位,但不能使數(shù)據(jù)位置‘1’ 只有擦除操作能將FLASH中的數(shù)據(jù)位置‘1’。所以在寫入新值之前,必須先擦除待編程的字節(jié)地址。FLASH存儲(chǔ)器是以512字節(jié)的扇區(qū)為單位組織的,擦除操作作用于一個(gè)完整的FLASH頁(將頁里所有字節(jié)置為0xFF)。對(duì)FLASH的操作是:先擦除后寫入;按頁擦除,按字節(jié)寫入。

⑶ 應(yīng)用程序文件中需要加入將應(yīng)用程序代碼定向到新的地址的程序語句:

從而保證在程序更新完成后,從應(yīng)用程序區(qū)執(zhí)行。

3  CAN通信協(xié)議

CAN總線(Controller Area Network)是BOSCH公司在20世紀(jì)80年代中期,為現(xiàn)代汽車應(yīng)用領(lǐng)域率先推出的一種多主機(jī)局部網(wǎng),即控制器局域網(wǎng)。CAN總線本身只定義了ISO/OSI模型中的物理層和數(shù)據(jù)鏈路層,用戶在實(shí)際應(yīng)用中,要根據(jù)自己的需要定義應(yīng)用層協(xié)議,來定義CAN報(bào)文中的11/29位標(biāo)識(shí)符、8字節(jié)數(shù)據(jù)的使用,才能確保數(shù)據(jù)的高效傳輸。C8051F040具有控制器局域網(wǎng)(CAN)控制器,用CAN協(xié)議[3]進(jìn)行串行通信。Silicon Labs CAN 控制器符合Bosch規(guī)范2.0A(基本CAN)和2.0B(全功能CAN)。Silicon labs MCU片上集成的CAN 控制器只是一個(gè)協(xié)議控制器,不能提供物理層驅(qū)動(dòng)(即沒有收發(fā)器),所以在使用時(shí)還需外加CAN總線收發(fā)器。

CAN應(yīng)用層協(xié)議[4]主要規(guī)定標(biāo)識(shí)符的分配方案、過程數(shù)據(jù)交換方法、通信的實(shí)現(xiàn)方法等方面內(nèi)容。對(duì)于在實(shí)驗(yàn)階段,針對(duì)小型系統(tǒng),節(jié)點(diǎn)數(shù)量比較少、數(shù)據(jù)各類不大的簡(jiǎn)單系統(tǒng),選用CAN通信網(wǎng)絡(luò),定義了應(yīng)用層協(xié)議。協(xié)議中需要定義信息幀的格式,使用CAN的多主站發(fā)送模式即可。應(yīng)用層協(xié)議的定義[5],主要定義了以下幾個(gè)方面:標(biāo)識(shí)符的分配、報(bào)文幀格式、通信實(shí)現(xiàn)方法。CAN通信報(bào)文傳輸有兩種不同的幀格式:標(biāo)準(zhǔn)幀和擴(kuò)展幀,區(qū)別是兩者的識(shí)別符場(chǎng)的長(zhǎng)度不同,具有11位識(shí)別符的幀稱為標(biāo)準(zhǔn)幀,而含有29位識(shí)別符的幀為擴(kuò)展幀。本文針對(duì)實(shí)驗(yàn)室條件下完成的小型控制系統(tǒng),采用11位標(biāo)識(shí)符的標(biāo)準(zhǔn)幀格式。報(bào)文傳輸由4種不同的幀類型來表示和控制:數(shù)據(jù)幀、遠(yuǎn)程幀、錯(cuò)誤幀、過載幀。

 ⑴ 標(biāo)識(shí)符分配

在CAN協(xié)議中,標(biāo)識(shí)符決定了報(bào)文的優(yōu)先權(quán),并且通過驗(yàn)收濾波器的設(shè)置決定通信的方式。同時(shí)也可以對(duì)標(biāo)識(shí)符作定義,表示節(jié)點(diǎn)地址、自定義數(shù)據(jù)類型等。應(yīng)用層協(xié)議的首先要根據(jù)系統(tǒng)的特點(diǎn)來分配標(biāo)識(shí)符,在分配時(shí)的注意事項(xiàng)有:

① 系統(tǒng)中不同的報(bào)文具有不同的標(biāo)識(shí)符。

② 標(biāo)準(zhǔn)幀格式,標(biāo)識(shí)符長(zhǎng)度為11位。發(fā)送順序是ID10到ID0,其中,位定時(shí)和幀結(jié)構(gòu)決定了標(biāo)識(shí)符的高7位(ID10到ID4)必須不能全部為“隱性”。

系統(tǒng)中的數(shù)據(jù)類型有:模擬量數(shù)據(jù)、數(shù)字量數(shù)據(jù)、設(shè)備參數(shù)等。

本文所設(shè)計(jì)的是小型系統(tǒng),在11位的標(biāo)識(shí)符(ID10~ID0)分配中, ID10和ID9表示數(shù)據(jù)類型。由于系統(tǒng)節(jié)點(diǎn)數(shù)小于16個(gè),節(jié)點(diǎn)地址碼需要4位,因此將ID8~ID5分配給各節(jié)點(diǎn)作為節(jié)點(diǎn)地址編碼,ID4~ID0分配給各種報(bào)文的分類編號(hào)。

 ⑵ 報(bào)文幀格式

應(yīng)用層報(bào)文幀格式基本上采用的是數(shù)據(jù)幀、遠(yuǎn)程幀格式,但是對(duì)標(biāo)識(shí)符做了進(jìn)一步的規(guī)在更新FLASH程序代碼時(shí),必須先擦除,后寫入。

⑴  Flash擦除

C8051F040單片機(jī)的Flash程序區(qū)[2]按頁組織擦寫,512字節(jié)為一頁(page)。在刪除用戶程序區(qū)時(shí),首先禁止所有中斷,并且要使能程序刪除位PSEE(PSCTL.1),同時(shí)使能PSWE(PSCTL=0x03,即PSWE=1,PSEE=1,頁擦除模式),用C51語言的一個(gè)指針指向Flash程序區(qū)。如:char xdata *data addr=0x0000;

程序區(qū)每擦除一頁,地址指針加512,依此操作擦除程序區(qū);擦除部分程序:

可以用軟件使用MOVX指令對(duì)FLASH存儲(chǔ)器編程,像一般的操作數(shù)一樣為MOVX提供待編程的地址和數(shù)據(jù)字節(jié)。在使用MOVX指令對(duì)FLASH存儲(chǔ)器寫入之前,必須將程序存儲(chǔ)寫允許位PSWE(PSCTL.0)設(shè)置為邏輯‘1’,以允許FLASH寫操作。這將使MOVX指令執(zhí)行對(duì)FLASH的寫操作而不是對(duì)XRAM寫入。在用軟件清除之前,PSWE位一直保持置位狀態(tài)。為了避免對(duì)FLASH的誤寫,在PSWE為邏輯‘1’期間,禁止中斷。

寫FLASH存儲(chǔ)器可以清除數(shù)據(jù)位,但不能使數(shù)據(jù)位置‘1’ 只有擦除操作能將FLASH中的數(shù)據(jù)位置‘1’。所以在寫入新值之前,必須先擦除待編程的字節(jié)地址。FLASH存儲(chǔ)器是以512字節(jié)的扇區(qū)為單位組織的,擦除操作作用于一個(gè)完整的FLASH頁(將頁里所有字節(jié)置為0xFF)。對(duì)FLASH的操作是:先擦除后寫入;按頁擦除,按字節(jié)寫入。

⑶ 應(yīng)用程序文件中需要加入將應(yīng)用程序代碼定向到新的地址的程序語句:

#pragma INTVECTOR (0X1000)

#pragma INTERVAL(3)

從而保證在程序更新完成后,從應(yīng)用程序區(qū)執(zhí)行。

應(yīng)用層報(bào)文幀格式基本上采用的是數(shù)據(jù)幀、遠(yuǎn)程幀格式,但是對(duì)標(biāo)識(shí)符做了進(jìn)一步的規(guī)范,應(yīng)用層幀格式分為3段。如下表-1所示:

根據(jù)數(shù)據(jù)的功能和類型,按照這個(gè)應(yīng)用層幀格式把數(shù)據(jù)組織,準(zhǔn)備發(fā)送。在節(jié)點(diǎn)接收到數(shù)據(jù)時(shí),按照相就的應(yīng)用層幀格式把數(shù)據(jù)拆解,正確理解信息功能,使用數(shù)據(jù)。對(duì)接收到的報(bào)文,先判斷遠(yuǎn)程請(qǐng)求位RTR,當(dāng)RTR=0時(shí),為數(shù)據(jù)幀,然后判斷報(bào)文的意義并作處理;當(dāng)RTR=1,則是遠(yuǎn)程幀,根據(jù)報(bào)文提供的數(shù)據(jù)類型、報(bào)文分類等信息組織發(fā)送該報(bào)文。

在系統(tǒng)調(diào)試和維護(hù)中,操作員可能會(huì)對(duì)某節(jié)點(diǎn)的參數(shù)進(jìn)行修改或查閱,這些信息對(duì)系統(tǒng)通信至關(guān)重要。為保障通信的準(zhǔn)確性,本文采用的通信實(shí)現(xiàn)方法是點(diǎn)對(duì)點(diǎn)通信方式,上位機(jī)作為主節(jié)點(diǎn),發(fā)起通話行為,對(duì)從節(jié)點(diǎn)報(bào)文進(jìn)行讀/寫操作。點(diǎn)對(duì)點(diǎn)通信中,主節(jié)點(diǎn)通過發(fā)送數(shù)據(jù)幀、遠(yuǎn)程幀來和從節(jié)點(diǎn)通信。每次傳送8個(gè)字節(jié)數(shù)據(jù),基本能滿足所有數(shù)據(jù)類型的要求。對(duì)于超過8個(gè)字節(jié)的數(shù)據(jù),要有數(shù)據(jù)塊附加的協(xié)議信息,以表示數(shù)據(jù)塊的長(zhǎng)度和各字節(jié)的順序。可以把第一幀數(shù)據(jù)段的第一個(gè)字節(jié)定義成幀數(shù)和序號(hào),如:高4位表示幀數(shù),低4位表示幀的序號(hào)。在第一個(gè)字節(jié)不能滿足時(shí),可以用前兩個(gè)字節(jié)定義成幀數(shù)和序號(hào)。為保障數(shù)據(jù)的準(zhǔn)確,盡量不要傳送很長(zhǎng)的數(shù)據(jù)塊。

小結(jié)

本文所設(shè)計(jì)的在線升級(jí)系統(tǒng)描述了通過CAN總線對(duì)C8051F040單片機(jī)在線升級(jí)軟件的實(shí)現(xiàn)方法。在實(shí)驗(yàn)過程中,為了保障通信的準(zhǔn)確性和有效性,需要對(duì)通信數(shù)據(jù)進(jìn)行報(bào)文校驗(yàn),對(duì)出現(xiàn)錯(cuò)誤的情況要定義錯(cuò)誤處理等方面的內(nèi)容。此在線升級(jí)系統(tǒng)適用于C8051F系列單片機(jī),并且對(duì)其它單片機(jī)的在線編程設(shè)計(jì)也有重要的參考價(jià)值。

參考文獻(xiàn)

[1]  潘琢金. C8051F040/1/2/3/4/5/6/7混合信號(hào)ISP FlASH微控制器     

[2]  SILICON LABORATORIES. C8051F040 Datasheet[S],2003

[3]  BOSCH公司. CAN Specification V2.0版本[S],2005

[4]  鄔寬明. CAN總線原理和應(yīng)用系統(tǒng)設(shè)計(jì)[M], 北京航空航天大學(xué)出版社, 1996

[5]  楊春杰等. CAN總線技術(shù)[M], 北京航空航天大學(xué)出版社, 2010

標(biāo)簽:

點(diǎn)贊

分享到:

上一篇:基于單片機(jī)遙控開關(guān)系統(tǒng)的設(shè)計(jì)

下一篇:微能WIN-V63矢量控制變頻器在...

中國(guó)傳動(dòng)網(wǎng)版權(quán)與免責(zé)聲明:凡本網(wǎng)注明[來源:中國(guó)傳動(dòng)網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為中國(guó)傳動(dòng)網(wǎng)(www.treenowplaneincome.com)獨(dú)家所有。如需轉(zhuǎn)載請(qǐng)與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個(gè)人轉(zhuǎn)載使用時(shí)須注明來源“中國(guó)傳動(dòng)網(wǎng)”,違反者本網(wǎng)將追究其法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明其他來源的稿件,均來自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請(qǐng)保留稿件來源及作者,禁止擅自篡改,違者自負(fù)版權(quán)法律責(zé)任。

網(wǎng)站簡(jiǎn)介|會(huì)員服務(wù)|聯(lián)系方式|幫助信息|版權(quán)信息|網(wǎng)站地圖|友情鏈接|法律支持|意見反饋|sitemap

中國(guó)傳動(dòng)網(wǎng)-工業(yè)自動(dòng)化與智能制造的全媒體“互聯(lián)網(wǎng)+”創(chuàng)新服務(wù)平臺(tái)

網(wǎng)站客服服務(wù)咨詢采購(gòu)咨詢媒體合作

Chuandong.com Copyright ?2005 - 2024 ,All Rights Reserved 版權(quán)所有 粵ICP備 14004826號(hào) | 營(yíng)業(yè)執(zhí)照證書 | 不良信息舉報(bào)中心 | 粵公網(wǎng)安備 44030402000946號(hào)