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