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