基于EtherCAT的DSP應(yīng)用軟件在線更新方法研究*
*基金項(xiàng)目:國(guó)家重點(diǎn)研發(fā)計(jì)劃“智能機(jī)器人重點(diǎn)專(zhuān)項(xiàng)”(2019YFB1310200)
本文引用地址:http://butianyuan.cn/article/202204/433275.htm作者簡(jiǎn)介:梁學(xué)修(1987—),男,博士,研究方向智能檢測(cè)與控制。
通訊作者:劉濤(1971—),男,高級(jí)工程師,研究方向儀器儀表、自動(dòng)化等領(lǐng)域。
0 引言
EtherCAT(以太網(wǎng)控制自動(dòng)化技術(shù))是一個(gè)開(kāi)放架構(gòu),以以太網(wǎng)為基礎(chǔ)的現(xiàn)場(chǎng)總線系統(tǒng),是由德國(guó)的Beckhoff公司研發(fā),由于有通訊周期短、通訊抖動(dòng)小的特點(diǎn),在工業(yè)自動(dòng)化設(shè)備中被廣泛應(yīng)用[1]。TI的C2000系列DSP是一種支持單周期乘法和浮點(diǎn)運(yùn)算的數(shù)字信號(hào)處理器,由于它的穩(wěn)定性,在工業(yè)場(chǎng)合中多用于開(kāi)發(fā)工控產(chǎn)品[2]。一方面為了應(yīng)對(duì)工業(yè)應(yīng)用環(huán)境中僅通過(guò)更新應(yīng)用軟件即可實(shí)現(xiàn)的新需求;另一方面由于工業(yè)現(xiàn)場(chǎng)中復(fù)雜的接線和惡劣的運(yùn)行環(huán)境,也導(dǎo)致人們不愿意直接拆卸設(shè)備,因而需要一種能在線更新設(shè)備應(yīng)用程序的方法。
本文給出了一種可以使用EtherCAT總線技術(shù)在線更新C2000系列工控產(chǎn)品應(yīng)用程序的方法。本文以TI公司C2000系列中常用的DSP28335基礎(chǔ)的某款工控產(chǎn)品對(duì)該研究方法進(jìn)行闡述。
1 EtherCAT從站移植
物理層EtherCAT總線需要專(zhuān)門(mén)的EtherCAT從站控制器ESC(EtherCAT Slave Controller),軟件層Beckhoff公司提供了相應(yīng)的協(xié)議棧[3]。移植EtherCAT到DSP28335上需要從硬件層和軟件層著手。
硬件的ESC芯片可選擇Beckhoff公司的ET1100。在硬件層除了需要ESC芯片外還需要1個(gè)PHY芯片,PHY芯片選擇KSZ8081MNX。硬件架構(gòu)如圖1所示。
ET1100的硬件接線圖中需要關(guān)注的是ET1100的B12引腳應(yīng)當(dāng)接到DSP28335的外部中斷信號(hào)上面,在EtherCAT通信過(guò)程中,ET1100收到1幀數(shù)據(jù)后會(huì)在B12引腳上面產(chǎn)生1個(gè)上升沿信號(hào)[4-5],本文設(shè)計(jì)以中斷的方式通知DSP28335接收到了1幀數(shù)據(jù)。在本文設(shè)計(jì)中將DSP28335和ESC芯片之間通過(guò)DSP28335的外部總線進(jìn)行通訊,將ET1100掛載在DSP28335的Zone7上面。
軟件層,根據(jù)硬件配置更改從站代碼中ecat_def.h相應(yīng)的宏即可,配置這些宏需參考設(shè)計(jì)的硬件和軟件。根據(jù)本文的設(shè)計(jì),配置了以下這些宏。
#define MAKE_PTR_TO_ESC
#define ESC_16BIT_ACCESS
#define MAILBOX_SUPPORTED
#define COE_SUPPORTED
((MEM_ADDR ESCMEM *)0x00200000)
1
1
1
本研究中將ET1100掛載在了DSP28335的Zone7上面,因此配置MAKE_PTR_TO_ESC這個(gè)宏地址為DSP28335的Zone7的起始地址0x200000;DSP28335是1個(gè)16位的DSP,因此配置ESC_16BIT_ACCESS為1;在更新工控產(chǎn)品的程序時(shí)需要傳輸多幀數(shù)據(jù),因此配置支持郵箱操作,即配置MAILBOX_SUPPORTED為1;傳輸數(shù)據(jù)幀時(shí)需要用到COE的OBJ因此配置COE_SUPPORTED為1。
從站的正常運(yùn)行還需要ET1100的配置文件,主要描述ET1100的配置信息,在本文設(shè)計(jì)中不會(huì)用到POD(過(guò)程數(shù)據(jù))傳輸數(shù)據(jù),因此使用Beckhoff公司提供的默認(rèn)配置文件即可。
移植完從站后,編譯程序,下載到DSP里面,連接網(wǎng)線使用主站掃描軟件掃描從站,控制從站的狀態(tài)切換到PreOP即可。由于在PreOP狀態(tài)的時(shí)候就可以進(jìn)行郵箱SDO的通訊了,在線更新應(yīng)用程序只用到了SDO郵箱數(shù)據(jù),因此只切換到PreOP即可。
2 BootLoader軟件設(shè)計(jì)
DSP28335燒寫(xiě)程序可以通過(guò)TI的仿真器完成,也可將編譯生成的hex文件根據(jù)DSP28335的啟動(dòng)方式使用串口更新程序。在工業(yè)現(xiàn)場(chǎng)中,更新程序一般由技術(shù)支持人員完成,顯然使用開(kāi)發(fā)人員用的工具仿真器來(lái)更新程序是不合理的,這里既涉及分工問(wèn)題,又涉及公司程序安全問(wèn)題。根據(jù)DSP28335的啟動(dòng)方式使用串口自動(dòng)更新程序,需要硬件中添加額外的電路,顯然這是不經(jīng)濟(jì)的。編寫(xiě)B(tài)ootLoader程序下載到DSP28335里面,運(yùn)行此程序使用和工業(yè)現(xiàn)場(chǎng)使用的一樣的通訊技術(shù)來(lái)更新程序,既不會(huì)涉及公司代碼安全,也不用額外添加硬件,因此此種方法比較經(jīng)濟(jì)。
2.1 BootLoader軟件的技術(shù)要點(diǎn)
BootLoader主要功能包括:①建立與上位機(jī)的通訊;②擦寫(xiě)DSP28335芯片內(nèi)部flash;③建立應(yīng)用程序執(zhí)行的工作環(huán)境,包括堆棧以及中斷向量的設(shè)計(jì)。這些功能也就是BootLoader程序的技術(shù)要點(diǎn)。
EtherCAT在運(yùn)行到PreOP狀態(tài)后,主站將數(shù)據(jù)發(fā)送給從站,需要設(shè)計(jì)一個(gè)讀寫(xiě)的OBJ,因此在從站代碼中需添加1個(gè)與BootLoader通訊專(zhuān)用的OBJ,在移植成功的從站代碼中的cia402appl.h文件的DefCiA402AxisObjDic數(shù)組中添加一行代碼:
{NULL,NULL, 0x2000, {DEFTYPE_UNICODE_STRING, 0 | (OBJCODE_VAR << 8)}, sEntryDesc0x4000, aName0x4000, &CiA_Axis.Objects.HexDowload,NULL, SDOWriteHexData, 0x0000 }
其中,0x2000是一個(gè)可以由制造商自定義的OBJ,SDOWriteHexData是主站在向從站發(fā)送數(shù)據(jù)時(shí)從站自動(dòng)調(diào)用的函數(shù),在此函數(shù)中,本文要實(shí)現(xiàn)程序的下載功能。涉及程序代碼安全,BootLoader不提供讀DSP內(nèi)部數(shù)據(jù)的方法。
BootLoader與主站建立通訊后,需要將主站下載的程序數(shù)據(jù)寫(xiě)入到flash固定的位置,因此BootLoader需要具備擦寫(xiě)DSP內(nèi)部flash的功能。擦寫(xiě)DSP內(nèi)部flash的方法可參考DSP的相應(yīng)庫(kù)文件和函數(shù)說(shuō)明。在使用DSP28335的庫(kù)函數(shù)時(shí),庫(kù)函數(shù)需要運(yùn)行在RAM中,而且在進(jìn)行flash的擦寫(xiě)操作時(shí)不能被中斷打斷[6-7]。將DSP28335的flash操作函數(shù)運(yùn)行在RAM中需要將這些庫(kù)文件鏈接到RAM中,并且在BootLoader程序初始化時(shí)將flash操作的函數(shù)拷貝到RAM中,具體操作如下:
Flash28_API:
{ - l F l a sh28335_AP I _V210. l i b ( . e c o n s t ) -
lFlash28335_API_V210.lib(.text)}
LOAD = FLASHA,
RUN = RAML0,
LOAD_START(_Flash28_API_LoadStart),
LOAD_END(_Flash28_API_LoadEnd),
RUN_START(_Flash28_API_RunStart),PAGE = 0
其中,LOAD=FLASHA,描述的是Flash28335_A P I _ V 2 1 0 . l i b 庫(kù)文件加載區(qū)是FLASHA中,RUN=RAML0,描述的是Flash28335_API_V210.lib庫(kù)運(yùn)行的地方是RAML0中。在BootLoader程序初始化時(shí)需執(zhí)行的代碼是:
memcopy(&Flash28_API_LoadStart, &Flash28_API_LoadEnd, &Flash28_API_RunStart);
執(zhí)行這段代碼將Flash28335_API_V210.lib的代碼從加載區(qū)拷貝到運(yùn)行區(qū)。另外在調(diào)用庫(kù)中的flash擦寫(xiě)函數(shù)之前使用DINT關(guān)掉中斷,調(diào)用結(jié)束使用EINT打開(kāi)中斷。
在BootLoader程序執(zhí)行結(jié)束運(yùn)行應(yīng)用程序之前準(zhǔn)備好應(yīng)用程序運(yùn)行的環(huán)境,通常包括清bss段,拷貝全局?jǐn)?shù)據(jù),中斷向量表遷移。在DSP28335這個(gè)平臺(tái)上,bss段的清理和全局?jǐn)?shù)據(jù)的拷貝可由_c_int00函數(shù)實(shí)現(xiàn),因此在BootLoader跳到應(yīng)用程序中執(zhí)行時(shí)第1次調(diào)用_c_int00即可,調(diào)用它既完成了應(yīng)用程序的準(zhǔn)備工作,又完成了從BootLoader到應(yīng)用程序的跳轉(zhuǎn)。
DSP28335的中斷向量表固定存放在起始地址是0x000D00、長(zhǎng)度為0x100的空間中,因此修改此地址空間的內(nèi)容就是修改中斷向量表,將1個(gè)中斷向量表PieVectTableInit的數(shù)據(jù)拷貝到此空間,完成中斷向量的配置。因此在BootLoader跳到應(yīng)用程序執(zhí)行之前修改向量空間的內(nèi)容,或在應(yīng)用程序中修改向量空間的內(nèi)容,即可完成中斷向量的重新配置,通過(guò)在應(yīng)用程序中修改中斷向量空間內(nèi)容,完成中斷向量表的重新配置。
2.2 BootLoader軟件架構(gòu)
在解決了BootLoader軟件設(shè)計(jì)的技術(shù)要點(diǎn)后,設(shè)計(jì)BootLoader程序架構(gòu)。設(shè)計(jì)BootLoader程序執(zhí)行流程圖如圖2所示。
BootLoader程序執(zhí)行時(shí)首先進(jìn)行程序初始化,包括EtherCAT從站的初始化,flash的初始化。初始化結(jié)束后檢查是否已經(jīng)下載了應(yīng)用程序,如果沒(méi)有應(yīng)用程序,則執(zhí)行EtherCAT的從站程序,在死循環(huán)中調(diào)用從站的main函數(shù);如果有應(yīng)用程序則校驗(yàn)應(yīng)用程序的CRC值,校驗(yàn)通過(guò)則執(zhí)行應(yīng)用程序,校驗(yàn)失敗則執(zhí)行EtherCAT的從站程序,在死循環(huán)中調(diào)用從站的mian函數(shù)。
在BootLoader執(zhí)行EtherCAT從站的main函數(shù)時(shí)涉及了更新應(yīng)用程序邏輯,在EtherCAT主站給從站發(fā)送命令時(shí),從站調(diào)用SDOWriteHexData,在SDOWriteHexData中執(zhí)行更新應(yīng)用程序的邏輯,在這個(gè)函數(shù)中處理了主站發(fā)送的數(shù)據(jù)包,設(shè)計(jì)相應(yīng)的數(shù)據(jù)包格式為:幀數(shù)據(jù)長(zhǎng)度|| CMD || 數(shù)據(jù)長(zhǎng)度 || addr || 數(shù)據(jù) || CRC,從站處理數(shù)據(jù)包的流程如圖3所示。
在更新應(yīng)用程序時(shí)從站分別檢查OBJ的可訪問(wèn)性,數(shù)據(jù)幀長(zhǎng)度,CRC校驗(yàn),以及相應(yīng)的命令,找到相應(yīng)命令后,執(zhí)行具體的操作。在本設(shè)計(jì)中,設(shè)計(jì)了擦flash的命令和寫(xiě)flash的命令。主站在更新從站的應(yīng)用程序時(shí),首先發(fā)送擦flash的命令,擦除flash之后,再發(fā)命令寫(xiě)flash。
主站發(fā)送的更新應(yīng)用程序的命令中包含了程序的數(shù)據(jù),這些數(shù)據(jù)從編譯的hex文件中提取,hex文件參照Intel Hex文件格式進(jìn)行提取。提取完hex文件中的數(shù)據(jù)后將其打包成從站可以識(shí)別的數(shù)據(jù)包,此數(shù)據(jù)包可由主站發(fā)送給從站用于更新程序。
3 結(jié)論
通過(guò)本文設(shè)計(jì)的方法,將提取后的hex文件數(shù)據(jù)進(jìn)行打包加密后,然后使用相應(yīng)的程序更新工具,將更新文件的數(shù)據(jù)下載給相應(yīng)的設(shè)備,實(shí)現(xiàn)了程序的更新。證明了此方法可以在線快速通過(guò)EtherCAT總線更新C2000系列DSP的應(yīng)用程序,此方法有效。
參考文獻(xiàn):
[1] 郇極,劉艷強(qiáng).工業(yè)以太網(wǎng)現(xiàn)場(chǎng)總線EtherCAT驅(qū)動(dòng)程序設(shè)計(jì)及應(yīng)用[M].北京:北京航空航天大學(xué)出版社, 2010.
[2] 于廣,孫漢青,王志平,等. C2000系列DSP在線程序更新研究[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2013,13(3):78-79.
[3] CHUN-RONG S , YAN-QIANG L , JI H . EtherCATIndustrial Ethernet Fieldbus and Its Driver Design[J]. Manufacturing Automation, 2007.
[4] 馬軍賢, 周侗, 楊志家,等. EtherCAT從站的設(shè)計(jì)與實(shí)現(xiàn)[J].自動(dòng)化與儀表, 2011(08):37-40.
[5] 孫士超,王偉東,杜志江.實(shí)時(shí)以太網(wǎng)EtherCAT從站的硬件系統(tǒng)設(shè)計(jì)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2014(08):52-55.
[6] 姚勝東.工業(yè)以太網(wǎng)現(xiàn)場(chǎng)總線EtherCAT的應(yīng)用[J].儀表技術(shù),2014(8):4-6.
[7] 高鵬.基于DSP的EtherCAT工業(yè)以太網(wǎng)從站驅(qū)動(dòng)設(shè)計(jì)[D].北京:北京交通大學(xué).
(本文來(lái)源于《電子產(chǎn)品世界》雜志2020年9月期)
評(píng)論