<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 設(shè)計(jì)應(yīng)用 > 多核DSP的以太網(wǎng)遠(yuǎn)程程序加載方法

          多核DSP的以太網(wǎng)遠(yuǎn)程程序加載方法

          作者: 時(shí)間:2016-10-10 來(lái)源:網(wǎng)絡(luò) 收藏

          摘要:為了解決工業(yè)遠(yuǎn)程控制設(shè)備的軟件更新帶來(lái)的成本和效率問(wèn)題,在研究了以TMS320C6670為核心的DSP系統(tǒng)的結(jié)構(gòu)和程序啟動(dòng)的基礎(chǔ)上,提出了基于的DSP程序遠(yuǎn)程加載方法。該方法主要基于BOOTP協(xié)議的廣播和UDP協(xié)議實(shí)現(xiàn)。實(shí)踐表明,該加載技術(shù)靈活可靠,為遠(yuǎn)程控制系統(tǒng)的調(diào)試和更新提供了便利。

          本文引用地址:http://www.ex-cimer.com/article/201610/306406.htm

          引言

          隨著科學(xué)技術(shù)的不斷進(jìn)步,網(wǎng)絡(luò)通信技術(shù)和DSP技術(shù)飛速發(fā)展,許多智能儀器儀表、工業(yè)遠(yuǎn)程控制設(shè)備等能夠接入到互聯(lián)網(wǎng),實(shí)現(xiàn)網(wǎng)絡(luò)化、智能化的管理和控制。在這些設(shè)備中,有很多是以DSP為核心的設(shè)備,這些設(shè)備的程序代碼的引導(dǎo)啟動(dòng)是一個(gè)很重要的問(wèn)題。傳統(tǒng)的DSP設(shè)備的程序加載方法是通過(guò)硬件仿真器來(lái)完成的,但在實(shí)際工業(yè)應(yīng)用中,這種方法存在仿真器攜帶不便攜和設(shè)備軟件維護(hù)更新不方便等缺點(diǎn)。因此基于網(wǎng)絡(luò)的DSP軟件更新就是一種很好的解決方案。

          文中介紹了DSP程序加載的基本原理,以TI公司的 TMS320C6670為例,實(shí)現(xiàn)了一種基于BOOTP協(xié)議的DSP程序加載技術(shù),利用網(wǎng)絡(luò)通信實(shí)現(xiàn)DSP程序的動(dòng)態(tài)加載,提高軟件更新效率。

          1 原理

          這里使用傳統(tǒng)的PC機(jī)作為下載服務(wù)器,以TMS320C6670為核心的DSP設(shè)備作為客戶機(jī),客戶機(jī)啟動(dòng)后,不知道任何網(wǎng)絡(luò)信息,需要通過(guò)TCP/IP協(xié)議的相關(guān)協(xié)議IP、UDP、BOOTP提供的功能來(lái)實(shí)現(xiàn)信息的傳播??蛻魴C(jī)通過(guò)BOOTP協(xié)議獲得所需相關(guān)網(wǎng)絡(luò)信息,然后通過(guò)UDP協(xié)議包獲取待執(zhí)行的引導(dǎo)程序,并運(yùn)行之。

          1.1 IP協(xié)議和UDP協(xié)議

          IP(Internet Protocol,互聯(lián)網(wǎng)協(xié)議)是TCP/IP中網(wǎng)絡(luò)層協(xié)議。UDP(User Datagram Protocol,用戶數(shù)據(jù)報(bào)協(xié)議)是TC尸/IP傳輸層的無(wú)連接協(xié)議。由于完整的TCP/IP協(xié)議將占用大量系統(tǒng)資源,所以在高可靠的局域網(wǎng)中,可以采用UDP協(xié)議發(fā)送數(shù)據(jù)包。

          1.2 BOOTP協(xié)議

          客戶機(jī)啟動(dòng)時(shí),需從網(wǎng)絡(luò)上獲取三種信息:本機(jī)的IP地址、下載服務(wù)器的IP地址、待下載的運(yùn)行程序。

          BOOTP(BOOTstrapping Protocol)能為無(wú)盤機(jī)獲得啟動(dòng)所需的所有信息。在發(fā)送BOOTP請(qǐng)求之前,BOOTP客戶既不知道自己的IP地址,也不知道服務(wù)器的IP地址,BOOTP必須通過(guò)廣播方式發(fā)送請(qǐng)求。BOOTP服務(wù)器收到請(qǐng)求后,根據(jù)以太網(wǎng)地址,從下載數(shù)據(jù)庫(kù)中查出相應(yīng)應(yīng)答表項(xiàng),構(gòu)成BOOTP響應(yīng),再應(yīng)答之。對(duì)于服務(wù)器而言,此時(shí)客戶機(jī)的IP地址已經(jīng)知道,可以直接應(yīng)答,不必用廣播方式。

          BOOTP報(bào)文交易就是請(qǐng)求,響應(yīng)一個(gè)來(lái)回,交易成功與否只有客戶知道,因此當(dāng)服務(wù)器關(guān)閉或網(wǎng)絡(luò)工作不正常時(shí),將導(dǎo)致交易出錯(cuò)或報(bào)文丟失,客戶需進(jìn)行重傳處理(每3 s重傳一次)。當(dāng)有多個(gè)響應(yīng)(多服務(wù)器響應(yīng)或BOOTP應(yīng)答延時(shí)),可設(shè)一個(gè)標(biāo)志,客戶只接受并處理第一個(gè)響應(yīng),其余都拋棄。

          1.3 BOOTP包格式

          BOOTP包格式如圖1所示。

          多核DSP的以太網(wǎng)遠(yuǎn)程程序加載方法

          包操作碼/消息類型:1=BOOTREQUEST(引導(dǎo)請(qǐng)求),2=BOOTREPLY(引導(dǎo)應(yīng)答)。硬件地址類型:1=10M以太網(wǎng)。硬件地址長(zhǎng)度:6是10M以太網(wǎng)。跳躍點(diǎn)數(shù):用于跨網(wǎng)引導(dǎo),由路由器使用。事務(wù)ID:一個(gè)隨機(jī)數(shù),用來(lái)匹配引用請(qǐng)求和應(yīng)答??蛻舳艘龑?dǎo)所用秒數(shù):由客戶端填寫,客戶端引導(dǎo)開始后的過(guò)去的秒數(shù)??蛻舳薎P地址:BOOTP客戶將此置為0,要求服務(wù)器應(yīng)答本客戶的IP地址。你的IP地址:BOOTP客戶將此設(shè)置為0。服務(wù)器IP地址:由服務(wù)器在引導(dǎo)應(yīng)答返回。網(wǎng)關(guān)IP地址:用于跨網(wǎng)引導(dǎo)時(shí)使用??蛻舳擞布刂罚嚎蛻籼畛浔緳C(jī)MAC地址。服務(wù)器主機(jī)名:用于跨網(wǎng)引導(dǎo)時(shí)使用。引導(dǎo)文件名:BOOTP請(qǐng)求置為0,服務(wù)器應(yīng)答時(shí)將由BOOTPTAB填充一個(gè)特定的運(yùn)行程序路徑名。標(biāo)準(zhǔn)選項(xiàng)域:此域用于BOOTP客戶從服務(wù)器獲得一系列標(biāo)準(zhǔn)選項(xiàng),例如網(wǎng)管IP地址、網(wǎng)關(guān)IP地址、DNS域名服務(wù)器IP地址、客戶機(jī)名等。

          1.4 以太網(wǎng)數(shù)據(jù)包格式

          以太網(wǎng)請(qǐng)求包格式如圖2所示。

          多核DSP的以太網(wǎng)遠(yuǎn)程程序加載方法

          DIX以太網(wǎng)中包含目標(biāo)MAC地址(一般為FF:FF:FF:FF:FF:FF)和源MAC地址(即設(shè)備本身MAC地址)。IPV4中包含版本號(hào)、長(zhǎng)度、協(xié)議、校驗(yàn)和及源地址IP和目標(biāo)地址IP(這里IP地址均為0.0.0.0)。UDP中包含源端口、目標(biāo)端口、長(zhǎng)度及校驗(yàn)和。

          以太網(wǎng)引導(dǎo)包格式如圖3所示。

          多核DSP的以太網(wǎng)遠(yuǎn)程程序加載方法

          2 硬件設(shè)計(jì)

          系統(tǒng)采用多核TMS320C6670 DSP芯片作為主控芯片,其內(nèi)置千兆網(wǎng)絡(luò)協(xié)處理器,所以外圍電路只需增加物理層芯片。結(jié)構(gòu)框圖如圖4所示。

          多核DSP的以太網(wǎng)遠(yuǎn)程程序加載方法

          3 下載實(shí)現(xiàn)過(guò)程

          客戶機(jī):當(dāng)硬件復(fù)位時(shí),在RESET信號(hào)上升前,配置好開發(fā)板上的撥碼開關(guān)SW3、SW4、SW5、SW6,確定TMS320C6670芯片為以太網(wǎng)引導(dǎo)方式。RBL(ROM BootLoader)配置SerDes,SGMII和PASS準(zhǔn)備接收來(lái)自以太網(wǎng)接口的引導(dǎo)包。RBL配置發(fā)送通道發(fā)送以太網(wǎng)請(qǐng)求包(每3 s發(fā)送一次)。

          服務(wù)器即PC機(jī)端用Wireshark軟件作為抓包軟件,以太網(wǎng)請(qǐng)求包廣播到服務(wù)器端,見圖5,從中可以看出間隔約3 s多客戶機(jī)廣播一次BOO TP包。

          多核DSP的以太網(wǎng)遠(yuǎn)程程序加載方法

          圖6為以太網(wǎng)請(qǐng)求包主要內(nèi)容,與原理中描述的以太網(wǎng)請(qǐng)求包格式是一致的,包含DIX以太網(wǎng)、IPV4、UDP協(xié)議和BOOTP協(xié)議包。

          多核DSP的以太網(wǎng)遠(yuǎn)程程序加載方法

          圖7為接收到的BOOTP包內(nèi)容。

          多核DSP的以太網(wǎng)遠(yuǎn)程程序加載方法

          服務(wù)器此時(shí)收到了BOOTP協(xié)議包,獲得了客戶機(jī)的MAC地址,此時(shí)要進(jìn)行ARP(Address Resolution Protocol,地址解析協(xié)議)地址綁定。在完成上面兩步后,通過(guò)上位機(jī)通信程序?qū)募l(fā)送給客戶機(jī)。圖8為截取的UDP發(fā)送圖。

          多核DSP的以太網(wǎng)遠(yuǎn)程程序加載方法

          圖9為以太網(wǎng)引導(dǎo)包內(nèi)容。

          當(dāng)幀文件發(fā)送完畢后,客戶機(jī)根據(jù)接收來(lái)的數(shù)據(jù)進(jìn)行處理,找到數(shù)據(jù)部分,進(jìn)行啟動(dòng)加載。

          在CCS開發(fā)環(huán)境下生成的目標(biāo)文件是*.out,即通用目標(biāo)文件格式(COFF)。該文件可以在CCS開發(fā)環(huán)境下通過(guò)仿真器下載到DSP目標(biāo)板中運(yùn)行調(diào)試,但該代碼文件并不是DSP中實(shí)際運(yùn)行的程序代碼,需用Hex工具(hex6x.exe)進(jìn)行轉(zhuǎn)換成引導(dǎo)表文件,然后再用bconvert64x.exe和bootpacket.exe下具將引導(dǎo)表文件轉(zhuǎn)換成以太網(wǎng)引導(dǎo)格式數(shù)據(jù)文件,并封裝成幀文件。

          結(jié)語(yǔ)

          文中介紹了一種基于以太網(wǎng)的DSP引導(dǎo)程序加載技術(shù),該技術(shù)在多核高性能DSP系統(tǒng)的及系統(tǒng)的軟件更新等工程應(yīng)用領(lǐng)域具有獨(dú)特的優(yōu)勢(shì)和較好的應(yīng)用前景。目前已成功運(yùn)用在網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)的軟件更新。實(shí)踐表明,該引導(dǎo)加載技術(shù)靈活可靠,為遠(yuǎn)程控制系統(tǒng)的調(diào)試和更新提供了便利。



          評(píng)論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();