新聞中心

EEPW首頁 > 設(shè)計(jì)應(yīng)用 > 基于EtherCAT的DSP應(yīng)用軟件在線更新方法研究*

基于EtherCAT的DSP應(yīng)用軟件在線更新方法研究*

作者:梁學(xué)修1,劉濤2,姚路3,楊學(xué)志1,蔣杰1(1.工業(yè)和信息化部計(jì)算機(jī)與微電子發(fā)展研究中心(中國軟件評測中心),北京 100048;2.機(jī)械工業(yè)儀器儀表綜合技術(shù)經(jīng)濟(jì)研究所,北京 100055;3.珞石(北京)科技有限公司,北京 100085) 時(shí)間:2022-04-20 來源:電子產(chǎn)品世界 收藏
編者按:主要研究使用EtherCAT總線在線更新TI C2000系列DSP應(yīng)用軟件的方法。移植EtherCAT總線從站到C2000系列DSP上,針對C2000系列DSP設(shè)計(jì)編寫了相應(yīng)的BootLoader程序,開發(fā)了簡單的應(yīng)用程序。試驗(yàn)研究表明:使用此方法可以在線快速通過EtherCAT總線更新C2000系列DSP的應(yīng)用程序,此方法有效。

*基金項(xiàng)目:國家重點(diǎn)研發(fā)計(jì)劃“智能機(jī)器人重點(diǎn)專項(xiàng)”(2019YFB1310200)

本文引用地址:http://2s4d.com/article/202204/433275.htm

作者簡介:梁學(xué)修(1987—),男,博士,研究方向智能檢測與控制。

通訊作者:劉濤(1971—),男,高級工程師,研究方向儀器儀表、自動化等領(lǐng)域。

0   引言

(以太網(wǎng)控制自動化技術(shù))是一個(gè)開放架構(gòu),以以太網(wǎng)為基礎(chǔ)的現(xiàn)場總線系統(tǒng),是由德國的Beckhoff公司研發(fā),由于有通訊周期短、通訊抖動小的特點(diǎn),在工業(yè)自動化設(shè)備中被廣泛應(yīng)用[1]。TI的C2000系列是一種支持單周期乘法和浮點(diǎn)運(yùn)算的數(shù)字信號處理器,由于它的穩(wěn)定性,在工業(yè)場合中多用于開發(fā)工控產(chǎn)品[2]。一方面為了應(yīng)對工業(yè)應(yīng)用環(huán)境中僅通過更新應(yīng)用軟件即可實(shí)現(xiàn)的新需求;另一方面由于工業(yè)現(xiàn)場中復(fù)雜的接線和惡劣的運(yùn)行環(huán)境,也導(dǎo)致人們不愿意直接拆卸設(shè)備,因而需要一種能設(shè)備應(yīng)用程序的方法。

本文給出了一種可以使用總線技術(shù)C2000系列工控產(chǎn)品應(yīng)用程序的方法。本文以TI公司C2000系列中常用的28335基礎(chǔ)的某款工控產(chǎn)品對該研究方法進(jìn)行闡述。

1   從站移植

物理層EtherCAT總線需要專門的EtherCAT從站控制器ESC(EtherCAT Slave Controller),軟件層Beckhoff公司提供了相應(yīng)的協(xié)議棧[3]。移植EtherCAT到28335上需要從硬件層和軟件層著手。

硬件的ESC芯片可選擇Beckhoff公司的ET1100。在硬件層除了需要ESC芯片外還需要1個(gè)PHY芯片,PHY芯片選擇KSZ8081MNX。硬件架構(gòu)如圖1所示。

image.png

ET1100的硬件接線圖中需要關(guān)注的是ET1100的B12引腳應(yīng)當(dāng)接到DSP28335的外部中斷信號上面,在EtherCAT通信過程中,ET1100收到1幀數(shù)據(jù)后會在B12引腳上面產(chǎn)生1個(gè)上升沿信號[4-5],本文設(shè)計(jì)以中斷的方式通知DSP28335接收到了1幀數(shù)據(jù)。在本文設(shè)計(jì)中將DSP28335和ESC芯片之間通過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ì)中不會用到POD(過程數(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燒寫程序可以通過TI的仿真器完成,也可將編譯生成的hex文件根據(jù)DSP28335的啟動方式使用串口更新程序。在工業(yè)現(xiàn)場中,更新程序一般由技術(shù)支持人員完成,顯然使用開發(fā)人員用的工具仿真器來更新程序是不合理的,這里既涉及分工問題,又涉及公司程序安全問題。根據(jù)DSP28335的啟動方式使用串口自動更新程序,需要硬件中添加額外的電路,顯然這是不經(jīng)濟(jì)的。編寫B(tài)ootLoader程序下載到DSP28335里面,運(yùn)行此程序使用和工業(yè)現(xiàn)場使用的一樣的通訊技術(shù)來更新程序,既不會涉及公司代碼安全,也不用額外添加硬件,因此此種方法比較經(jīng)濟(jì)。

2.1 BootLoader軟件的技術(shù)要點(diǎn)

BootLoader主要功能包括:①建立與上位機(jī)的通訊;②擦寫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è)讀寫的OBJ,因此在從站代碼中需添加1個(gè)與BootLoader通訊專用的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í)從站自動調(diào)用的函數(shù),在此函數(shù)中,本文要實(shí)現(xiàn)程序的下載功能。涉及程序代碼安全,BootLoader不提供讀DSP內(nèi)部數(shù)據(jù)的方法。

BootLoader與主站建立通訊后,需要將主站下載的程序數(shù)據(jù)寫入到flash固定的位置,因此BootLoader需要具備擦寫DSP內(nèi)部flash的功能。擦寫DSP內(nèi)部flash的方法可參考DSP的相應(yīng)庫文件和函數(shù)說明。在使用DSP28335的庫函數(shù)時(shí),庫函數(shù)需要運(yùn)行在RAM中,而且在進(jìn)行flash的擦寫操作時(shí)不能被中斷打斷[6-7]。將DSP28335的flash操作函數(shù)運(yùn)行在RAM中需要將這些庫文件鏈接到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 庫文件加載區(qū)是FLASHA中,RUN=RAML0,描述的是Flash28335_API_V210.lib庫運(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)用庫中的flash擦寫函數(shù)之前使用DINT關(guān)掉中斷,調(diào)用結(jié)束使用EINT打開中斷。

在BootLoader程序執(zhí)行結(jié)束運(yùn)行應(yīng)用程序之前準(zhǔn)備好應(yīng)用程序運(yùn)行的環(huán)境,通常包括清bss段,拷貝全局?jǐn)?shù)據(jù),中斷向量表遷移。在DSP28335這個(gè)平臺上,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、長度為0x100的空間中,因此修改此地址空間的內(nèi)容就是修改中斷向量表,將1個(gè)中斷向量表PieVectTableInit的數(shù)據(jù)拷貝到此空間,完成中斷向量的配置。因此在BootLoader跳到應(yīng)用程序執(zhí)行之前修改向量空間的內(nèi)容,或在應(yīng)用程序中修改向量空間的內(nèi)容,即可完成中斷向量的重新配置,通過在應(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)用程序,如果沒有應(yīng)用程序,則執(zhí)行EtherCAT的從站程序,在死循環(huán)中調(diào)用從站的main函數(shù);如果有應(yīng)用程序則校驗(yàn)應(yīng)用程序的CRC值,校驗(yàn)通過則執(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ù)長度|| CMD || 數(shù)據(jù)長度 || addr || 數(shù)據(jù) || CRC,從站處理數(shù)據(jù)包的流程如圖3所示。

image.png

image.png

在更新應(yīng)用程序時(shí)從站分別檢查OBJ的可訪問性,數(shù)據(jù)幀長度,CRC校驗(yàn),以及相應(yīng)的命令,找到相應(yīng)命令后,執(zhí)行具體的操作。在本設(shè)計(jì)中,設(shè)計(jì)了擦flash的命令和寫flash的命令。主站在更新從站的應(yīng)用程序時(shí),首先發(fā)送擦flash的命令,擦除flash之后,再發(fā)命令寫flash。

主站發(fā)送的更新應(yīng)用程序的命令中包含了程序的數(shù)據(jù),這些數(shù)據(jù)從編譯的hex文件中提取,hex文件參照Intel Hex文件格式進(jìn)行提取。提取完hex文件中的數(shù)據(jù)后將其打包成從站可以識別的數(shù)據(jù)包,此數(shù)據(jù)包可由主站發(fā)送給從站用于更新程序。

3   結(jié)論

通過本文設(shè)計(jì)的方法,將提取后的hex文件數(shù)據(jù)進(jìn)行打包加密后,然后使用相應(yīng)的程序更新工具,將更新文件的數(shù)據(jù)下載給相應(yīng)的設(shè)備,實(shí)現(xiàn)了程序的更新。證明了此方法可以在線快速通過EtherCAT總線更新C2000系列DSP的應(yīng)用程序,此方法有效。

參考文獻(xiàn):

[1] 郇極,劉艷強(qiáng).工業(yè)以太網(wǎng)現(xiàn)場總線EtherCAT驅(qū)動程序設(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].自動化與儀表, 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)場總線EtherCAT的應(yīng)用[J].儀表技術(shù),2014(8):4-6.

[7] 高鵬.基于DSP的EtherCAT工業(yè)以太網(wǎng)從站驅(qū)動設(shè)計(jì)[D].北京:北京交通大學(xué).

(本文來源于《電子產(chǎn)品世界》雜志2020年9月期)



關(guān)鍵詞: EtherCAT 在線更新 DSP 202009

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉