時間:2011-04-08 15:04:39來源:zhangting
摘要:本文針對新型SOC(System on a Chip)片上型混合信號的C8051F040單片機[1],通過對Flash存儲結(jié)構(gòu)、擦寫過程、CAN總線通信應(yīng)用層協(xié)議、軟件流程等方面進行詳細闡述,提出了一種通過CAN通信端口實現(xiàn)穩(wěn)定性高、可靠性強的固件升級方案。
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ā)展,單片機被廣泛應(yīng)用于工業(yè)自動控制、儀器儀表。實際應(yīng)用中,系統(tǒng)會存在升級更新問題。在很多情況下,應(yīng)用于車輛、工程機械等產(chǎn)品上的單片機不方便拆缷,因此系統(tǒng)設(shè)備固件的在線更新就成為了很重要的問題。
Silicon Lab公司的51系列單片機C8051F040芯片內(nèi)部集成了完全支持CAN2.0A和CAN2.0B的CAN控制器。本文選用C8051F040單片機,設(shè)計了IAP(In Application Program)應(yīng)用軟件,通過CAN通信端口,利用CAN總線通信從PC機接收程序更新代碼,實現(xiàn)穩(wěn)定可靠的固件升級。
1 C8051F040單片機固件存儲結(jié)構(gòu)
C8051F040是完全集成的混合信號片上系統(tǒng)型MCU,片上有64個數(shù)字I/O引腳,片內(nèi)集成了一個CAN2.0B控制器,具有32個消息對象,每個消息對象有其自己的標識,有高速、流水線結(jié)構(gòu)的與8051兼容的高速CIP-51內(nèi)核(可達25MIPS),有內(nèi)置的64KB的Flash程序存儲器和4352(4K+256)的片內(nèi)RAM,2個12位DAC,2個電壓比較器,1個電壓基準。
IAP是指在主程序(用戶應(yīng)用程序)運行的過程中,獲取新代碼對Flash塊、Flash寄存器Boot向量等進行擦除和重新編程的方法。C8051F040的MCU能實現(xiàn)IAP, 是因為它能夠通過運行于MCU中的用戶代碼對Flash存儲器進行擦除、寫入操作。C8051F系列單片機可以通過它的任何一個數(shù)字外圍接口實現(xiàn)IAP,包括UART,SMBUS,SPI、CAN。C8051F040單片機的內(nèi)部64KB Flash的存儲結(jié)構(gòu)可分為用于程序裝載的引導(Bootloader)程序區(qū)和用戶應(yīng)用程序存儲區(qū)兩部分。
2 固件升級的實現(xiàn)方法
系統(tǒng)需要編寫兩個Project:一個是Bootloader,通過JTAG在線寫入FLASH的引導程序區(qū);另一個是應(yīng)用程序,通過Bootloader寫入應(yīng)用代碼區(qū)。當應(yīng)用程序需要升級時,執(zhí)行Bootloader程序。Bootloader把從CAN通信端口收到的新應(yīng)用程序代碼寫入到應(yīng)用代碼區(qū)。本文中,引導程序區(qū)占用的是0x0000~0x1000的FLASH空間,應(yīng)用程序區(qū)用剩余的FLASH空間。引導程序和應(yīng)用程序的功能框圖分別如下圖-1和圖-2所示。
在更新FLASH程序代碼時,必須先擦除,后寫入。
⑴ Flash擦除
C8051F040單片機的Flash程序區(qū)[2]按頁組織擦寫,512字節(jié)為一頁(page)。在刪除用戶程序區(qū)時,首先禁止所有中斷,并且要使能程序刪除位PSEE(PSCTL.1),同時使能PSWE(PSCTL=0x03,即PSWE=1,PSEE=1,頁擦除模式),用C51語言的一個指針指向Flash程序區(qū)。如:char xdata *data addr=0x0000;
程序區(qū)每擦除一頁,地址指針加512,依此操作擦除程序區(qū);擦除部分程序:
while(addr<0x0F000) // 0xF000 為60KB
{ *addr = 0x00; // 空寫,啟動擦除
for(i=0;i<10;i++)
addr = addr + 512; // 這樣就把60KB的Flash舊應(yīng)用程序擦除了。
⑵ Flash寫入
可以用軟件使用MOVX指令對FLASH存儲器編程,像一般的操作數(shù)一樣為MOVX提供待編程的地址和數(shù)據(jù)字節(jié)。在使用MOVX指令對FLASH存儲器寫入之前,必須將程序存儲寫允許位PSWE(PSCTL.0)設(shè)置為邏輯‘1’,以允許FLASH寫操作。這將使MOVX指令執(zhí)行對FLASH的寫操作而不是對XRAM寫入。在用軟件清除之前,PSWE位一直保持置位狀態(tài)。為了避免對FLASH的誤寫,在PSWE為邏輯‘1’期間,禁止中斷。
寫FLASH存儲器可以清除數(shù)據(jù)位,但不能使數(shù)據(jù)位置‘1’ 只有擦除操作能將FLASH中的數(shù)據(jù)位置‘1’。所以在寫入新值之前,必須先擦除待編程的字節(jié)地址。FLASH存儲器是以512字節(jié)的扇區(qū)為單位組織的,擦除操作作用于一個完整的FLASH頁(將頁里所有字節(jié)置為0xFF)。對FLASH的操作是:先擦除后寫入;按頁擦除,按字節(jié)寫入。
⑶ 應(yīng)用程序文件中需要加入將應(yīng)用程序代碼定向到新的地址的程序語句:
從而保證在程序更新完成后,從應(yīng)用程序區(qū)執(zhí)行。
3 CAN通信協(xié)議
CAN總線(Controller Area Network)是BOSCH公司在20世紀80年代中期,為現(xiàn)代汽車應(yīng)用領(lǐng)域率先推出的一種多主機局部網(wǎng),即控制器局域網(wǎng)。CAN總線本身只定義了ISO/OSI模型中的物理層和數(shù)據(jù)鏈路層,用戶在實際應(yīng)用中,要根據(jù)自己的需要定義應(yīng)用層協(xié)議,來定義CAN報文中的11/29位標識符、8字節(jié)數(shù)據(jù)的使用,才能確保數(shù)據(jù)的高效傳輸。C8051F040具有控制器局域網(wǎng)(CAN)控制器,用CAN協(xié)議[3]進行串行通信。Silicon Labs CAN 控制器符合Bosch規(guī)范2.0A(基本CAN)和2.0B(全功能CAN)。Silicon labs MCU片上集成的CAN 控制器只是一個協(xié)議控制器,不能提供物理層驅(qū)動(即沒有收發(fā)器),所以在使用時還需外加CAN總線收發(fā)器。
CAN應(yīng)用層協(xié)議[4]主要規(guī)定標識符的分配方案、過程數(shù)據(jù)交換方法、通信的實現(xiàn)方法等方面內(nèi)容。對于在實驗階段,針對小型系統(tǒng),節(jié)點數(shù)量比較少、數(shù)據(jù)各類不大的簡單系統(tǒng),選用CAN通信網(wǎng)絡(luò),定義了應(yīng)用層協(xié)議。協(xié)議中需要定義信息幀的格式,使用CAN的多主站發(fā)送模式即可。應(yīng)用層協(xié)議的定義[5],主要定義了以下幾個方面:標識符的分配、報文幀格式、通信實現(xiàn)方法。CAN通信報文傳輸有兩種不同的幀格式:標準幀和擴展幀,區(qū)別是兩者的識別符場的長度不同,具有11位識別符的幀稱為標準幀,而含有29位識別符的幀為擴展幀。本文針對實驗室條件下完成的小型控制系統(tǒng),采用11位標識符的標準幀格式。報文傳輸由4種不同的幀類型來表示和控制:數(shù)據(jù)幀、遠程幀、錯誤幀、過載幀。
⑴ 標識符分配
在CAN協(xié)議中,標識符決定了報文的優(yōu)先權(quán),并且通過驗收濾波器的設(shè)置決定通信的方式。同時也可以對標識符作定義,表示節(jié)點地址、自定義數(shù)據(jù)類型等。應(yīng)用層協(xié)議的首先要根據(jù)系統(tǒng)的特點來分配標識符,在分配時的注意事項有:
① 系統(tǒng)中不同的報文具有不同的標識符。
② 標準幀格式,標識符長度為11位。發(fā)送順序是ID10到ID0,其中,位定時和幀結(jié)構(gòu)決定了標識符的高7位(ID10到ID4)必須不能全部為“隱性”。
系統(tǒng)中的數(shù)據(jù)類型有:模擬量數(shù)據(jù)、數(shù)字量數(shù)據(jù)、設(shè)備參數(shù)等。
本文所設(shè)計的是小型系統(tǒng),在11位的標識符(ID10~ID0)分配中, ID10和ID9表示數(shù)據(jù)類型。由于系統(tǒng)節(jié)點數(shù)小于16個,節(jié)點地址碼需要4位,因此將ID8~ID5分配給各節(jié)點作為節(jié)點地址編碼,ID4~ID0分配給各種報文的分類編號。
⑵ 報文幀格式
應(yīng)用層報文幀格式基本上采用的是數(shù)據(jù)幀、遠程幀格式,但是對標識符做了進一步的規(guī)在更新FLASH程序代碼時,必須先擦除,后寫入。
⑴ Flash擦除
C8051F040單片機的Flash程序區(qū)[2]按頁組織擦寫,512字節(jié)為一頁(page)。在刪除用戶程序區(qū)時,首先禁止所有中斷,并且要使能程序刪除位PSEE(PSCTL.1),同時使能PSWE(PSCTL=0x03,即PSWE=1,PSEE=1,頁擦除模式),用C51語言的一個指針指向Flash程序區(qū)。如:char xdata *data addr=0x0000;
程序區(qū)每擦除一頁,地址指針加512,依此操作擦除程序區(qū);擦除部分程序:
可以用軟件使用MOVX指令對FLASH存儲器編程,像一般的操作數(shù)一樣為MOVX提供待編程的地址和數(shù)據(jù)字節(jié)。在使用MOVX指令對FLASH存儲器寫入之前,必須將程序存儲寫允許位PSWE(PSCTL.0)設(shè)置為邏輯‘1’,以允許FLASH寫操作。這將使MOVX指令執(zhí)行對FLASH的寫操作而不是對XRAM寫入。在用軟件清除之前,PSWE位一直保持置位狀態(tài)。為了避免對FLASH的誤寫,在PSWE為邏輯‘1’期間,禁止中斷。
寫FLASH存儲器可以清除數(shù)據(jù)位,但不能使數(shù)據(jù)位置‘1’ 只有擦除操作能將FLASH中的數(shù)據(jù)位置‘1’。所以在寫入新值之前,必須先擦除待編程的字節(jié)地址。FLASH存儲器是以512字節(jié)的扇區(qū)為單位組織的,擦除操作作用于一個完整的FLASH頁(將頁里所有字節(jié)置為0xFF)。對FLASH的操作是:先擦除后寫入;按頁擦除,按字節(jié)寫入。
⑶ 應(yīng)用程序文件中需要加入將應(yīng)用程序代碼定向到新的地址的程序語句:
#pragma INTVECTOR (0X1000)
#pragma INTERVAL(3)
從而保證在程序更新完成后,從應(yīng)用程序區(qū)執(zhí)行。
應(yīng)用層報文幀格式基本上采用的是數(shù)據(jù)幀、遠程幀格式,但是對標識符做了進一步的規(guī)范,應(yīng)用層幀格式分為3段。如下表-1所示:
根據(jù)數(shù)據(jù)的功能和類型,按照這個應(yīng)用層幀格式把數(shù)據(jù)組織,準備發(fā)送。在節(jié)點接收到數(shù)據(jù)時,按照相就的應(yīng)用層幀格式把數(shù)據(jù)拆解,正確理解信息功能,使用數(shù)據(jù)。對接收到的報文,先判斷遠程請求位RTR,當RTR=0時,為數(shù)據(jù)幀,然后判斷報文的意義并作處理;當RTR=1,則是遠程幀,根據(jù)報文提供的數(shù)據(jù)類型、報文分類等信息組織發(fā)送該報文。
在系統(tǒng)調(diào)試和維護中,操作員可能會對某節(jié)點的參數(shù)進行修改或查閱,這些信息對系統(tǒng)通信至關(guān)重要。為保障通信的準確性,本文采用的通信實現(xiàn)方法是點對點通信方式,上位機作為主節(jié)點,發(fā)起通話行為,對從節(jié)點報文進行讀/寫操作。點對點通信中,主節(jié)點通過發(fā)送數(shù)據(jù)幀、遠程幀來和從節(jié)點通信。每次傳送8個字節(jié)數(shù)據(jù),基本能滿足所有數(shù)據(jù)類型的要求。對于超過8個字節(jié)的數(shù)據(jù),要有數(shù)據(jù)塊附加的協(xié)議信息,以表示數(shù)據(jù)塊的長度和各字節(jié)的順序??梢园训谝粠瑪?shù)據(jù)段的第一個字節(jié)定義成幀數(shù)和序號,如:高4位表示幀數(shù),低4位表示幀的序號。在第一個字節(jié)不能滿足時,可以用前兩個字節(jié)定義成幀數(shù)和序號。為保障數(shù)據(jù)的準確,盡量不要傳送很長的數(shù)據(jù)塊。
小結(jié)
本文所設(shè)計的在線升級系統(tǒng)描述了通過CAN總線對C8051F040單片機在線升級軟件的實現(xiàn)方法。在實驗過程中,為了保障通信的準確性和有效性,需要對通信數(shù)據(jù)進行報文校驗,對出現(xiàn)錯誤的情況要定義錯誤處理等方面的內(nèi)容。此在線升級系統(tǒng)適用于C8051F系列單片機,并且對其它單片機的在線編程設(shè)計也有重要的參考價值。
參考文獻
[1] 潘琢金. C8051F040/1/2/3/4/5/6/7混合信號ISP FlASH微控制器
[2] SILICON LABORATORIES. C8051F040 Datasheet[S],2003
[3] BOSCH公司. CAN Specification V2.0版本[S],2005
[4] 鄔寬明. CAN總線原理和應(yīng)用系統(tǒng)設(shè)計[M], 北京航空航天大學出版社, 1996
[5] 楊春杰等. CAN總線技術(shù)[M], 北京航空航天大學出版社, 2010
標簽:
中國傳動網(wǎng)版權(quán)與免責聲明:凡本網(wǎng)注明[來源:中國傳動網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為中國傳動網(wǎng)(www.connectcrack.com)獨家所有。如需轉(zhuǎn)載請與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個人轉(zhuǎn)載使用時須注明來源“中國傳動網(wǎng)”,違反者本網(wǎng)將追究其法律責任。
本網(wǎng)轉(zhuǎn)載并注明其他來源的稿件,均來自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請保留稿件來源及作者,禁止擅自篡改,違者自負版權(quán)法律責任。
產(chǎn)品新聞
更多>2025-06-09
2025-06-06
2025-05-19
2025-04-30
性能躍升20%!維宏NK300CX Plus數(shù)控系統(tǒng)...
2025-04-11
rpi-image-gen:樹莓派軟件鏡像構(gòu)建的終...
2025-04-08