時(shí)間:2011-04-08 15:04:39來(lái)源:zhangting
摘要:本文針對(duì)新型SOC(System on a Chip)片上型混合信號(hào)的C8051F040單片機(jī)[1],通過(guò)對(duì)Flash存儲(chǔ)結(jié)構(gòu)、擦寫過(guò)程、CAN總線通信應(yīng)用層協(xié)議、軟件流程等方面進(jìn)行詳細(xì)闡述,提出了一種通過(guò)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
0 引言
隨著電子科技的發(fā)展,單片機(jī)被廣泛應(yīng)用于工業(yè)自動(dòng)控制、儀器儀表。實(shí)際應(yīng)用中,系統(tǒng)會(huì)存在升級(jí)更新問(wèn)題。在很多情況下,應(yīng)用于車輛、工程機(jī)械等產(chǎn)品上的單片機(jī)不方便拆缷,因此系統(tǒng)設(shè)備固件的在線更新就成為了很重要的問(wèn)題。
Silicon Lab公司的51系列單片機(jī)C8051F040芯片內(nèi)部集成了完全支持CAN2.0A和CAN2.0B的CAN控制器。本文選用C8051F040單片機(jī),設(shè)計(jì)了IAP(In Application Program)應(yīng)用軟件,通過(guò)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)行的過(guò)程中,獲取新代碼對(duì)Flash塊、Flash寄存器Boot向量等進(jìn)行擦除和重新編程的方法。C8051F040的MCU能實(shí)現(xiàn)IAP, 是因?yàn)樗軌蛲ㄟ^(guò)運(yùn)行于MCU中的用戶代碼對(duì)Flash存儲(chǔ)器進(jìn)行擦除、寫入操作。C8051F系列單片機(jī)可以通過(guò)它的任何一個(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ū)兩部分。
2 固件升級(jí)的實(shí)現(xiàn)方法
系統(tǒng)需要編寫兩個(gè)Project:一個(gè)是Bootloader,通過(guò)JTAG在線寫入FLASH的引導(dǎo)程序區(qū);另一個(gè)是應(yīng)用程序,通過(guò)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]按頁(yè)組織擦寫,512字節(jié)為一頁(yè)(page)。在刪除用戶程序區(qū)時(shí),首先禁止所有中斷,并且要使能程序刪除位PSEE(PSCTL.1),同時(shí)使能PSWE(PSCTL=0x03,即PSWE=1,PSEE=1,頁(yè)擦除模式),用C51語(yǔ)言的一個(gè)指針指向Flash程序區(qū)。如:char xdata *data addr=0x0000;
程序區(qū)每擦除一頁(yè),地址指針加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頁(yè)(將頁(yè)里所有字節(jié)置為0xFF)。對(duì)FLASH的操作是:先擦除后寫入;按頁(yè)擦除,按字節(jié)寫入。
⑶ 應(yīng)用程序文件中需要加入將應(yīng)用程序代碼定向到新的地址的程序語(yǔ)句:
從而保證在程序更新完成后,從應(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é)議,來(lái)定義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)(即沒(méi)有收發(fā)器),所以在使用時(shí)還需外加CAN總線收發(fā)器。
CAN應(yīng)用層協(xié)議[4]主要規(guī)定標(biāo)識(shí)符的分配方案、過(guò)程數(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種不同的幀類型來(lái)表示和控制:數(shù)據(jù)幀、遠(yuǎn)程幀、錯(cuò)誤幀、過(guò)載幀。
⑴ 標(biāo)識(shí)符分配
在CAN協(xié)議中,標(biāo)識(shí)符決定了報(bào)文的優(yōu)先權(quán),并且通過(guò)驗(yàn)收濾波器的設(shè)置決定通信的方式。同時(shí)也可以對(duì)標(biāo)識(shí)符作定義,表示節(jié)點(diǎn)地址、自定義數(shù)據(jù)類型等。應(yīng)用層協(xié)議的首先要根據(jù)系統(tǒng)的特點(diǎn)來(lái)分配標(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]按頁(yè)組織擦寫,512字節(jié)為一頁(yè)(page)。在刪除用戶程序區(qū)時(shí),首先禁止所有中斷,并且要使能程序刪除位PSEE(PSCTL.1),同時(shí)使能PSWE(PSCTL=0x03,即PSWE=1,PSEE=1,頁(yè)擦除模式),用C51語(yǔ)言的一個(gè)指針指向Flash程序區(qū)。如:char xdata *data addr=0x0000;
程序區(qū)每擦除一頁(yè),地址指針加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頁(yè)(將頁(yè)里所有字節(jié)置為0xFF)。對(duì)FLASH的操作是:先擦除后寫入;按頁(yè)擦除,按字節(jié)寫入。
⑶ 應(yīng)用程序文件中需要加入將應(yīng)用程序代碼定向到新的地址的程序語(yǔ)句:
#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)通過(guò)發(fā)送數(shù)據(jù)幀、遠(yuǎn)程幀來(lái)和從節(jié)點(diǎn)通信。每次傳送8個(gè)字節(jié)數(shù)據(jù),基本能滿足所有數(shù)據(jù)類型的要求。對(duì)于超過(guò)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)描述了通過(guò)CAN總線對(duì)C8051F040單片機(jī)在線升級(jí)軟件的實(shí)現(xiàn)方法。在實(shí)驗(yàn)過(guò)程中,為了保障通信的準(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)簽:
中國(guó)傳動(dòng)網(wǎng)版權(quán)與免責(zé)聲明:凡本網(wǎng)注明[來(lái)源:中國(guó)傳動(dòng)網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為中國(guó)傳動(dòng)網(wǎng)(m.u63ivq3.com)獨(dú)家所有。如需轉(zhuǎn)載請(qǐng)與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個(gè)人轉(zhuǎn)載使用時(shí)須注明來(lái)源“中國(guó)傳動(dòng)網(wǎng)”,違反者本網(wǎng)將追究其法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明其他來(lái)源的稿件,均來(lái)自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請(qǐng)保留稿件來(lái)源及作者,禁止擅自篡改,違者自負(fù)版權(quán)法律責(zé)任。
產(chǎn)品新聞
更多>以簡(jiǎn)驅(qū)繁,精準(zhǔn)智控 | 維智S1系列新一代...
2024-11-01
新品發(fā)布:CD300系列總線型伺服驅(qū)動(dòng)器
2024-10-31
2024-10-31
2024-10-31
新勢(shì)能 新期待|維智B1L直線伺服驅(qū)動(dòng)器
2024-10-31
纖薄之間,化繁為簡(jiǎn)|合信全新simple系...
2024-10-29
推薦專題
更多>