【摘要】 本文介紹了一種基于CANopen協(xié)議的壓力數(shù)據(jù)采集設計方案,通過使用現(xiàn)有的CiA DS301,CiA DS401協(xié)議完成設計,提高設備的兼容性,通過使用IAP功能完成基于CAN的在線更新程序的功能,方便設備的在線升級。
【關鍵詞】 CANopen DS401 IAP
隨著CAN總線技術的發(fā)展和各種功能需求不斷提出,一種具有標準協(xié)議的設備的出現(xiàn)已經(jīng)成為一種必然的趨勢,本文以CANopen協(xié)議為基礎,提出了一種基于CiA標準協(xié)議的設計方案,并實現(xiàn)基于CAN總線的IAP在線更新,為系統(tǒng)的在線更新提供了便利,本文將以壓力數(shù)據(jù)采集系統(tǒng)設計進一步闡明設計方案。
一、系統(tǒng)整體構架
整個采集系統(tǒng)的設計可以分為3個部分,由底層硬件設計,操作系統(tǒng)以及協(xié)議棧移植3個部分,硬件設計主要完成對現(xiàn)場壓力傳感器采集的4-20mA的數(shù)據(jù)處理工作,芯片主要使用NXP的LPC2378處理器,數(shù)據(jù)通道直接使用具有4路差分輸入的多塊AD芯片完成,避免了使用電子開關切換帶來的延時等一系列問題。操作系統(tǒng)移植主要使用常用的uc-os ii完成任務調(diào)度,滿足實時性需求,協(xié)議棧使用CANfestival[1]移植。操作系統(tǒng)移植以及協(xié)議棧的移植技術相對成熟,對對象字典設計以及IAP在線更新功能做出闡述。
二、具體設計
2.1對象字典設計
本設計使用12路電流輸入采集通道,滿足CiA DS301[2]預定義連接集的設定,故可根據(jù)CiA DS301 的設定分別定義TPDO2-TPDO4的參數(shù)設置,具體定義如下表2-1:
表2-1 通訊參數(shù)設置
Tab2-1 Communication parameter configuration
1801hTPDO21802hTPDO31803hTPDO4
子索引數(shù)00h0x500h0x500h0x5
COB-ID01h0x28001h0x38001h0x480
傳輸類型02h0xff02h0xff02h0xff
禁止時間03h003h003h0
保留04h004h004h0
事件時間05h005h005h0
對于映射參數(shù)的設置見表2-2,根據(jù)CiA DS401[3]標準I/O設備的表述,16位模擬信號的8路輸入可分別對應于TPDO2-TPDO4。
表2-2 映射參數(shù)設置
Tab2-2 Mapping parameter configuration
1A01h TPDO21A02h TPDO31A03h TPDO4
映射數(shù)量00h 0x400h 0x400h 0x4
通道1/5/901h 0x64010110L01h 0x64010510L01h 0x64010910L
通道2/6/1002h 0x64010210L02h 0x64010610L02h 0x20000A10L
通道3/7/1103h 0x64010310L03h 0x64010710L03h 0x20000B10L
通道4/8/1204h0x64010410L04h0x64010810L04h0x20000C10L
對于輸入信號的其他設置如信號高低值的限制、各通道信號的零點量程的設定等,可根據(jù)CiA DS401中模擬信號輸入模型進行設置,具體設置如下表2-3:
表2-3 其他設置
Tab2-3 Other configuration
索引值說明
0x6423模擬輸入全局中斷使能
0x6424最高點設置可以對各通道分別進行設置
0x6425最低點設置可以對各通道分別進行設置
………
0x6431零點值可以對各通道分別進行設置
0x6432量程值可以對各通道分別進行設置
對于上述表格中的參數(shù),使用高低設置除屏蔽干擾,零點量程可對各輸入通道進行整定,在實際應用過程中可以根據(jù)實際需求進行針對性的設置,如不需要,則保持默認設置即可。對于SDO設置以及心跳報文等的設置按照CiA DS301標準中的規(guī)定進行設置即可。
2.1 IAP在線更新
IAP在線更新能夠使得在線的CAN節(jié)點實現(xiàn)遠程更新[4],從而避免了現(xiàn)場程序更新的繁瑣過程。在線更新實際上就是用戶程序通過CAN接收新代碼,并調(diào)用IAP接口函數(shù)對片內(nèi)Flash指定扇區(qū)進行燒寫。實現(xiàn)IAP的前提是要建立一個Bootloader。
為實現(xiàn)IAP功能,需要將FLASH分成2個部分,即Bootloader代碼區(qū)以及用戶代碼區(qū)。
Bootloader的代碼屬于出廠代碼,一般不允許改動,主要完成FLASH各功能區(qū)區(qū)域的設置,確定CAN接收緩存,IAP接口函數(shù),根據(jù)CAN接收緩存的內(nèi)容進行相應的扇區(qū)擦寫操作,在完成相應的操作后運行用戶程序。
用戶代碼區(qū)就是可進行在線燒錄的代碼區(qū),完成實際的應用功能,它可由Bootloader程序完成后跳轉(zhuǎn)而來。
整個流程圖如圖2-1所示。
對于本設計中所使用的LPC2378[5]的Boot區(qū)的首地址為0x0007E000-0x0007FFFF,因此用戶代碼區(qū)有504K的空間,對這504K的空間以扇區(qū)為單位(4K或者32K)執(zhí)行對應的擦寫操作。
Bootloader中CAN的接收緩存使用片內(nèi)32K(0x40000000-0x40007FFF)靜態(tài)RAM作為數(shù)據(jù)緩存地址。
CAN接口程序主要完成與上位機之間的指令通訊及其代碼傳輸,關于CAN接口有:
初始化CAN控制器函數(shù)LCP2378_CAN_Init,中斷初始化函數(shù)LPC2378_CAN_Int,CAN收發(fā)函數(shù)CAN_Read、CAN_Write。
IAP接口函數(shù)起始地址為0x7FFFFFF1,bootloader需要條用IAP函數(shù)完成FLASH扇區(qū)的擦寫操作,通過IAP_PrepareSector選擇扇區(qū),通過IAP_EraseSector擦除扇區(qū),通過IAP_EraseSector函數(shù)完成RAM數(shù)據(jù)寫入FLASH,以及扇區(qū)校對IAP_ Compare等操作。
需要燒錄的程序hex文件需要轉(zhuǎn)換為bin文件,在完成bin文件傳輸后進行CRC校驗[6],如果通過校驗則進行扇區(qū)燒寫,否則退出本次更新。在調(diào)用IAP過程中FLASH地址必須以256字節(jié)對齊,即低8位為0,由于FLASH扇區(qū)單小為4k,在對扇區(qū)寫入時最大不超過4096字節(jié),本設計中設定以此寫入字節(jié)數(shù)為4096,也可根據(jù)實際選用256、512、1024。
三、結(jié)束語
本設計通過使用CANopen協(xié)議棧實現(xiàn)了設備兼容性設計目標,并通過CAN總線實現(xiàn)IAP的在線更新,已經(jīng)成功應用于實際壓力檢測模塊的程序更新。