雒拓,程威,陳博凱,杜浪東
?
基于dsPIC30F的BootLoader設計
雒拓,程威,陳博凱,杜浪東
(陜西重型汽車有限公司,陜西 西安 710200)
控制單元采用專用調試接口更新程序時,過程繁瑣且一般需要拆開殼體從而破壞產品的可靠性。文章介紹了一種基于dsPIC30F的BootLoader設計方法,可通過車輛預留的OBD接口,利用CAN總線實現控制單元軟件的更新。該設計方法主要包含啟動管理、通信管理和底層驅動管理等模塊。通過試驗驗證,該BootLoader能夠實現控制單元程序的更新,且具有占用存儲空間小、下載速度快和工作可靠的特點。
CAN總線;BootLoader;dsPIC30F
隨著汽車電子技術的飛速發展,車載控制器已經在商用車上廣泛應用,而在控制器調試時,經常需在車輛的使用現場對控制器程序進行升級和維護。采用基于CAN總線的BootLoader技術是實現程序更新的有效的解決方案,它避免了拆除硬件設備時造成的破壞,僅通過車輛預留的OBD接口,利用車輛自身的CAN總線網絡即可實現對車輛控制單元的程序更新,并支持對多個控制單元進行程序更新。本文所設計的BootLoader基于dsPIC30F5011芯片,采用模塊化結構設計,根據器件手冊適當調整即可適用于dsPIC30F系列其它規格的芯片。
BootLoader是獨立于用戶程序的功能代碼,通過CAN總線與上位機進行通訊,實現控制單元程序的下載和運行控制。主要包含啟動管理模塊、通信協議處理模塊和硬件驅動模塊[1],系統組成圖如圖1所示。
進入BootLoader一般有三種方式:1、復位后設置一段延遲時間,需在延遲時間內確認;2、通過讀取某個引腳的電平進行判斷;3、通過設置啟動標志進行判斷。方法1的延時存在不確定性,不易控制。方法2需要引出單獨的引腳,并手動控制高低電平,不便于操作。方法3可通過CAN總線和上位機配合即可完成,在控制單元程序運行中可隨時進入BootLoader。本文采用第三種方式。

圖1 BootLoader結構圖
控制器上電后首先進入啟動管理模塊,可通過修改鏈接器描述文件使控制器上電后跳轉至啟動管理模塊的處理函數。該模塊通過“應用程序有效標志”(AppValid)和“BootLoader請求標志”(BootReq)引導程序進入用戶程序或是BootLoader程序。其中,AppValid存儲于flash中,而BootReq存儲于RAM中,變量的定義如下所示。
int __attribute__((address(0x880))) BootReq;
char __attribute__((space(prog),aligned(64))) BootInfo[64] = {0};
考慮到Flash的擦寫限制,定義了BootInfo[]變量,AppValid相當于BootInfo[0]。當Appvalid=0時,應用程序無效,此時始終進入BootLoader;當Appvalid=1時,應用程序有效,此時若BootReq=1,表示接收到上位機的BootLoader請求,則進入BootLoader程序,否則進入用戶程序。為了能夠在應用程序運行時隨時進入BootLoader,可設置當收到上位機的BootLoader請求信號后,將BootReq置為1然后通過軟件復位,復位后RAM中的數據保持不變??刂破魃想姀臀粫r,無需等待,直接進入應用程序。程序引導流程圖如圖2所示。

圖2 啟動管理流程
通信協議處理模塊通過預定義的服務實現上、下位機之間的數據通信,包括BootLoader請求等服務[2],具體見表1。
表1 通信協議處理模塊

下載程序時,上位機首先定時發送BootLoader請求指令,下位機收到BootLoader請求后進入BootLoader,當下位機進入BootLoader后,上位機根據hex文件的地址信息向下位機發送擦除指令,擦除待編程的Flash和EEPROM區域;然后,上位機通過數據包傳輸服務將待下載的數據傳送給下位機,上位機每次發送的字節數可根據上、下位機的內存、hex文件大小、編程的字節數等確定;最后,上位機利用編程指令對下位機進行編程,并在編程結束后對編程區域進行數據校驗,并依此循環下載,直至所有數據下載完成。上下位機的通信流程圖如圖3所示。
1.3.1存儲地址分配
dsPIC30F5011單片機的存儲空間分配如下圖所示,包含22K指令字的Flash存儲空間和1KB的EEPROM存儲空間[3]。一般將用戶程序存儲于緊隨中斷向量表的存儲空間,而將BootLoader放在程序存儲器區域的最高地址區域,存儲空間分配見圖4。

圖4 存儲空間分配
1.3.2 CAN驅動模塊
dsPIC30F5011 的CAN模塊擁有3個發送緩沖區、2個接收緩沖區,每個接收緩沖區有硬件過濾器。為了降低CPU負載,在進入BootLoader后使用硬件過濾器過濾掉與BootLoader功能無關的CAN報文。同時,為了防止緩沖區溢出而導致的丟幀,在接收中斷中將報文放于軟件緩沖區,在處理報文時從軟件緩沖區依次取出。緩沖區被設計成循環隊列,通過隊列長度、當前位置索引、尾部索引等變量控制隊列。緩沖機制如圖5所示。

圖5 CAN緩沖機制
1.3.3 NVM驅動模塊
NVM即非易失性存儲器,下位機包含的NVM包括Flash和EEPROM,可通過TBLRD(讀表)、TBLWT(寫表)和NVM控制寄存器實現運行時自編程。驅動模塊提供統一的接口函數 NVM_ Read、NVM_ Write和NVM_ Erase??紤]不同類型存儲單元的可編程數據大小不同,在接口函數中根據編程地址判斷編程區域,調用不同的接口函數實現不同類型存儲區域的編程。
以Flash編程為例,驅動模塊提供Flash_CoreRead、Flash_CoreErase和Flash_CoreWrite函數,由于讀寫操作應遵循嚴格的時序要求,因此使用匯編語言編寫,部分代碼如下所示。
_Flash_CoreRead:
sub w3,#0,[w15]
bra z,2f
mov w1,_TBLPAG
1:
tblrdl [w0],[w2++]
tblrdh [w0++],[w2++]
dec w3,w3
bra nz,1b
2:
return
_Flash_CoreErase:
mov w1,_TBLPAG
tblwtl w1,[w0]
…,此處代碼為標準序列,可參考器件的數據手冊
return
_Flash_CoreWrite:
mov w1,_TBLPAG
mov #32,w3
tblwtl [w2++],[w0]
tblwth [w2++],[w0++]
dec w3,w3
bra nz,1b
…,此處代碼為標準序列,可參考器件的數據手冊
return
上位機程序使用MFC開發,主要包含文件加載模塊、數據解析模塊、通信模塊和CAN驅動模塊。文件加載模塊用于解析hex文件,將字符信息轉換為二進制代碼信息;數據解析模塊按hex文件的格式解析程序信息,并將程序按地址存儲于緩沖區中;通信模塊用于實現上位機和下位機的之間的預定服務, CAN驅動模塊實現CAN報文的收發。上位機刷寫界面如圖6所示。

圖6 上位機軟件
本文介紹了dsPIC30F芯片基于CAN總線的BootLoader設計方法,該方法采用模塊化設計,具有較好的移植性,理論上可適用于dsPIC30F系列的各型號產品。該BootLoader功能全面,既包含了啟動管理、底層驅動、通信服務等基本的功能模塊,實現了穩定、可靠的程序下載功能;同時,又通過自定義的通信服務,簡化了上、下位機的信息交互,適用于單片機資源緊張和要求快速移植的場合。本文設計的BootLoader占用空間小,代碼量約5KB,且已經在某型號重型車輛的車身控制器中使用,通過實驗驗證,證明該BootLoader能夠可靠,正確的下載更新控制單元程序。
[1] 王志強.基于MC9S12XEP100的BootLoader設計與實現,汽車實用技術,2018,(17).
[2] 張成雨,楊朝陽,單志文.基于CAN總線的車載應用Bootloader設計,湖北汽車工業學院學報,2017,(12).
[3] dsPIC30F5011/5013數據手冊.文檔號:DS70116G_CN.
Design of BootLoader base on dsPIC30F
Luo Tuo, Cheng Wei, Chen Bokai, Du Langdong
( Shaanxi Heavy Automobile Co., Ltd., Shaanxi Xi’an 710200 )
Updating software in electronic controller by dedicated debug port is complicated,and always need to disassemble electronic controller which lower the stability.This paper introduce a design of BootLoader base on dsPIC30F,which uses the OBD connector to update software in electronic controller by CAN bus.The BootLoader mainly includes boot module design,communication module design and driver module design. Experimental results show that the BootLoader can update software successfully,occupys little flash rom,downloads quickly and works stably.
CAN BUS; BootLoader; dsPIC30F
10.16638/j.cnki.1671-7988.2019.10.027
U462
A
1671-7988(2019)10-76-03
U462
A
1671-7988(2019)10-76-03
雒拓 (1983),男,就職于陜西重型汽車有限公司 汽車工程研究院,從事汽車電子電器研究工作。