999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于FTP的多片C66xx系列網絡動態加載

2021-10-20 12:29:48張開生孟愛權
火控雷達技術 2021年3期
關鍵詞:程序

張開生 汪 慧 孟愛權

(西安電子工程研究所 西安 710100)

0 引言

對于嵌入式芯片而言,Boot就是自啟動,在DSP的調試階段,可執行的代碼文件(.out)存放在安裝了TI開發環境CCS所在的計算機上,在線連接仿真器調試時,由仿真器將可執行代碼load到DSP的內存中運行并調試。但軟件成熟后,需要將用戶的可執行代碼存放在片外Flash或者別的設備(GMAC/PCIE/SRIO加載方式)中,系統上電后將可執行代碼自動加載到內存中,實現可執行代碼的上電自動運行,這一過程就是通常所說的自啟動或者Boot[1]。

片外的Flash分為NAND Flash和NOR Flash兩種,其中在DSP和FPGA加載過程中常用的是NOR Flash,因為NOR Flash和普通的內存訪問方式類似,可以支持隨機訪問,這使它既具有支持XIP(eXecute In Place,即芯片內執行)的特性,又具備像普通RAM一樣執行程序的能力,因此NOR Flash是自啟動代碼的絕佳載體。

本文將對DSP的加載過程和方式進行簡要介紹,重點闡述多核器件的啟動流程、啟動方式選擇、啟動文件格式生成和文件內容,提出基于網絡FTP的動態加載方式,詳細闡述了多片網絡動態加載的實現步驟。

1 啟動流程

對于TI的C66xx系列DSP而言,無論是單核加載還是多核加載,均是DSP上電/系統復位后所有核的PC指針指向RBL代碼,RBL是在芯片出廠的時候就已固化到芯片內部NOR Flash中的一段程序,程序起始地址為0x20B0_0000。無論對于單核DSP還是多核DSP而言,在上電/系統復位后所有核同時從地址0x20B0_0000運行片內的RBL(Rom Bootloader)程序[2],但從核(多核DSP中定義Core0為主核,其余為從核)的RBL在判斷核ID號不為0后進入等待狀態,等待Core0發送啟動地址BOOT_MAGIC_ADDRESS和核間IPC中斷,從核收到核間中斷后將PC指針指向啟動地址并開始執行程序[3]。

而主核的RBL通過讀取寄存器DEVSTAT寄存器的值判斷啟動模式,根據啟動方式進行接口初始化和CPU時鐘PLL的配置,同時根據啟動方式決定是否進行數據搬移,如果需要進行數據搬移,如SPI加載,就需要將SPI Flash中的可執行程序加載到DSP的相應內存中,如果不需要搬移,就直接跳轉到外接NOR Flash的起始地址(如EMIF16加載時外接的NOR Flash地址0X7000_0000)執行[4]。

RBL程序執行的流程如圖1所示,Core0執行的RBL負責將用戶程序加載到合適的存儲位置(例如:L2、片內共享存儲、DDR、EMIF RAM空間),然后Core0執行用戶程序。

圖1 DSP自啟動流程

在某些啟動方式的加載過程中,加載啟動之前需要預留L2最后0XD23F字節空間(0X0087_2DC1 ~0X0087_FFFF約53KB)[1],這段保留空間作為RBL程序執行時的堆棧、配置、參數存儲空間,在用戶程序加載起來之后(CPU開始執行_c_int00)就可以使用,如果用戶需要使用這段預留的空間,必需將一些未初始化的變量在.cmd內存配置文件中進行定義。

用戶程序啟動后的主程序入口地址固定指向_c_int00函數,而_c_int00是C/C++程序初始化代碼的入口地址,其主要功能是完成建立C程序的運行環境,為進入main()函數進行系統初始化,因此它是芯片運行支持庫中的一個重要函數。DSP上電時,由RBL負責引導至_c_int00,_c_int00主要完成以下工作:

1)定義系統棧.stack,并初始化棧指針,配置相關寄存器;

2)初始化全局變量(.cinit),從.cinit段將初始化數據拷貝到.bss段中相應的變量;

3)若使用C++,還會完成全局對象構造(.pinit);

4)調用main函數運行C程序;

5)當main函數return時,調用exit函數;

當_c_int00函數執行完畢之后,即完成了為C語言的準備工作,系統就轉到C語言的main()函數。

另外如果程序在鏈接文件.cmd中采用-c選項,則編譯鏈接后的可執行程序會將全局變量的初始化放在_c_int00()函數中進行,在此函數中會調用_auto_init(CINIT)函數,將.cinit段的內容拷入.bss中相應的變量中,此過程是在系統上電后進入main()函數之前執行的;如果程序在鏈接時采用-cr選項,則編譯后的可執行程序中全局變量需要使用loader進行初始化,這種方法一般用于在JTAG調試時,CCS即為loader。

2 啟動方式選擇

DSP芯片在上電復位過程中通過采樣鎖存13個引腳BOOTMODE[12:0]/GPIO[13:1]的狀態值到芯片內部DEVSTAT寄存器[5],采樣鎖存時序如圖2所示,RBL程序獲取啟動模式后,執行相應的加載流程,用戶程序加載完成后這些GPIO配置引腳就可以作為普通輸入輸出引腳使用。

圖2 啟動模式采樣鎖存時序

在RESETFULL信號拉高前后12個時鐘周期內,GPIO配置管腳的值會被DSP采樣鎖存,鎖存的值存儲在芯片內部地址為0x02620020的DEVSTAT寄存器中,在片內RBL啟動加載流程時,RBL通過讀取DEVSTAT寄存器的值決定執行相應的加載程序,例如選擇啟動方式為EMIF啟動時,需在芯片復位上升沿期間將GPIO[15:0]管腳值設置為0X1821,選擇I2C啟動時管腳值為0X160D,設置的管腳值可以在DEVSTAT寄存器中查看,在調試過程中,可以在CCS中點擊“System Reset”后,通過修改DEVSTAT寄存值,選擇不同的啟動方式/強制軟件引導加載,而不用每次通過硬件修改/上電復位等選擇啟動方式。

DSP的啟動方式可以分為以下三種方式[6]。

1)No Boot啟動方式,相關的外設設備為EMIF,用戶代碼存放在EMIF Flash,RBL檢測到啟動方式為No Boot后,RBL執行直接跳轉到EMIF Flash空間首地址,然后由Core0直接讀取并執行用戶程序;

2)Host Boot啟動方式,相關的設備有PCIE/GMAC/SRIO,用戶程序由另外的設備通過上述接口搬移到相應的存儲位置,搬移完成后由Core0跳轉并執行用戶程序;

3)Slave Boot啟動方式,相關的設備有EMIF/SPI/I2C/UART,用戶的可執行程序以boot table格式存放在芯片的片外Flash中(從首地址開始存放),加載過程中由RBL初始化Flash接口,RBL程序通過啟動接口將用戶程序搬移到指定地址,然后Core0跳轉到用戶程序的_c_int00函數處,由Core0向從核發送IPC中斷,啟動從核。

3 加載文件解析

用TI的編程工具CCS(Code Composer Studio)編譯連接生成后綴為.out可執行文件,此目標文件格式被稱作通用目標文件格式(Common Object File Format,COFF)。COFF文件是按照模塊化思想對程序進行管理的,它的最小單位稱為段(Section)。段是占據一個連續空間的代碼塊或者數據塊,與其他段一起映射到存儲器內。但各個段是分開的,各有功能特色。對于C語言文件,編譯器生成的代碼段分配在.text段中,全局變量和靜態變量分配在.bss段中,而局部變量或寄存器變量分配到.stack段,還有其他段和自定義段,可以查詢TI的有關文檔。

連接器生成的可執行COFF文件(后綴為.out),含有一些定位符號和文件頭等信息,這些信息能夠被仿真器識別,仿真器可以從COFF文件中提取有用的程序,并把提取的程序加載到DSP的L2 SRAM。但是,如果我們采用FLASH、PCI或SRIO等加載時,COFF文件中的一些信息不能被識別,而且由于含有的無效信息較多,COFF文件比較大,因此,我們應該對COFF文件進行提取和精簡處理。這就需要用到TI提供的十六進制轉換工具(Hex6x.exe),該轉換工具可以把COFF文件轉換成需要的格式。

為了使RBL從Flash加載時知道搬移的目的地址和數據大小,需要將用戶的.out文件轉換成RBL能夠識別使用的Boot Table格式(后綴.dat);用戶程序固化燒寫的過程就是將用戶的.out文件通過工具鏈轉換成Boot Table格式的.dat文件,然后將.dat文件固化到Flash中。轉化工具鏈中主要用到的有:

首先利用Hex轉換工具hex6x.exe將.out文件和.rmd轉換為.btbl文件;其次利用mergebtbl工具將多個.out文件生成的對應的.btbl文件合成成一個.btbl文件;最后利用bconvert64x.exe和b2ccs.exe兩個工具,將文件.btbl轉換為最終燒寫到Flash中的.dat文件。TI提供的轉換工具的可執行程序和源碼位于軟件安裝包“X: imcsdk_2_01_02_05 oolsoot_loaderiblsrcutil”路徑下,使用者可以根據實際需要對轉換工具進行修改,例如官方b2i2c.exe支持的最大文件長度為0X20000個字節,如果最終生成的.dat文件超出該長度,需要用戶修改宏定義的文件上限大小,否則會出現文件燒寫長度不夠的情況,導致程序加載失敗。

最終生成的.dat文件的Boot Table由3個部分組成:首先是包含32bit的程序入口地址(_c_int00的地址);其次是Boot Table的核心部分,也是占據文件大小最大的部分,該部分由若干個文件段組成,每個文件段第一個32bit是段字節數(需要搬移的字節長度4n),第二個是段文件搬移的目的地址,緊接著是n個需要搬移的數據,Boot Table文件格式如圖3所示[7-8]。

圖3 Boot Table文件格式

RBL在搬運Boot Table格式的用戶程序時,按照格式不斷地讀取和搬移段數據,當讀取到搬移段字節數為0(接收標識)時,則PC指針跳轉到Boot Table最開始指定的32位頭地址(_c_int00函數地址),Core0開始執行用戶程序。

4 多片DSP網絡動態加載

在本項目中,由于系統中需要使用16片TI 6678,如果采用傳統的仿真器進行程序固化,那么在調試和程序燒寫過程中需要重復且頻繁地燒寫用戶程序.dat文件到片外Flash,為減輕程序更新操作的復雜減少更新時間,本文提出一種基于PowerPC的FTP服務器的動態加載方法,該方法的系統硬件架構如圖4所示,本系統由4塊DSP板卡組成,每塊板卡中搭載4個DSP芯片,每個DSP芯片的網絡接口與板上的網絡交換芯片相連,4個DSP板卡的16個6678芯片與中心控制板的網絡通過交換芯片進行互聯,基于交換芯片的網絡互聯機制為網絡加載提供物理通路。

圖4 多片網絡加載硬件架構

具體加載過程為:在每個DSP外掛的Flash中固化統一的一個小的用戶程序,該程序在上電后由Flash自動加載到共享存儲區的前128KB空間(0x0C000000-0X0C020000該空間在正常用戶程序中作為數據接收緩存用,在動態加載階段作為加載程序執行的運行空間),由Core0實現每個芯片的時鐘、DDR、網絡初始化,其余7個核處于Idle狀態,程序中根據槽位號和DSP節點號為每個DSP芯片設置一個固定的網絡IP地址(例如:192.168.0.1---192.168.0.16),網絡地址設定完畢后啟動TCP客戶端線程,等待運行于中心控制板的TCP服務器啟動;16個 DSP中實際需要運行的用戶程序首先利用工具鏈將.out文件轉換成對應的.dat文件存放到PowerPC的FTP服務器上,每個芯片的用戶程序以文件名區分,例如dsp1.dat,dsp2.dat……dsp16.dat,中心控制板在上電啟動后,從FTP服務器中按照文件名依次讀取DSP的用戶程序,同時根據確定的IP地址利用TCP協議將DSP程序從FTP服務器中傳輸到DSP芯片,DSP接收到文件后,判斷接收最后字節是否是Boot Table文件結束標識(32位全0),如果數據流中沒有結束標識則繼續接收,如果出現結束標識,則認為程序文件傳輸完畢,Core0將接收到的數據文件按照Boot Table文件格式,首先獲取32位頭地址(用戶程序_c_int00函數地址),然后根據Boot Table文件格式將用戶程序搬移到指定地址,Core0搬移完成后,將_c_int00地址寫入到從核L2的最后4字節(0x1X87FFFC,X為核號),依次向從核發送IPC中斷啟動從核,然后Core0跳轉到_c_int00地址執行,至此,整個DSP芯片的用戶程序實現了從中心控制板的FTP服務器到DSP芯片內執行的過程。針對加載過程中的地址空間劃分,在RBL階段由片內固化程序占用L2空間最后54字節,在動態加載程序執行時,僅占用所有存儲空間中共享存儲區前128KB空間,該128KB空間用于程序的代碼段、常量段、向量端、堆棧段等程序執行段,在程序加載完成后,共享區占用的128KB存儲空間在跳轉到用戶程序時被全部交給用戶程序使用,即整個程序加載完成后用戶程序可以使用DSP芯片的所有存儲空間。

5 結束語

本文詳細介紹了TI C66XX系列多核啟動的流程和加載方式,分析了加載文件格式,提出將用戶程序上傳到FTP服務器實現用戶程序在線動態加載,該方式同傳統的仿真器單個燒寫的方式相比,顯著提高了程序更新的效率,同時由于在每個DSP的Flash固化的程序全部一致,因此系統內的4塊DSP板卡無需固定槽位,每個DSP上電后的屬性和地位由槽位號和節點號確定,提高硬件板卡的通用性,這種加載方式對于提高開發效率,縮短產品研發周期,具有非常重要的工程實踐意義。

猜你喜歡
程序
給Windows添加程序快速切換欄
電腦愛好者(2020年6期)2020-05-26 09:27:33
試論我國未決羈押程序的立法完善
人大建設(2019年12期)2019-05-21 02:55:44
失能的信仰——走向衰亡的民事訴訟程序
“程序猿”的生活什么樣
英國與歐盟正式啟動“離婚”程序程序
環球時報(2017-03-30)2017-03-30 06:44:45
基于VMM的程序行為異常檢測
偵查實驗批準程序初探
我國刑事速裁程序的構建
創衛暗訪程序有待改進
中國衛生(2015年3期)2015-11-19 02:53:32
恐怖犯罪刑事訴訟程序的完善
主站蜘蛛池模板: 人妻丰满熟妇啪啪| 亚洲v日韩v欧美在线观看| 永久天堂网Av| 无码精品国产dvd在线观看9久| 亚洲中久无码永久在线观看软件 | 国产成人免费观看在线视频| 夜夜操国产| 久久精品国产精品青草app| 国产人前露出系列视频| 国产精品第5页| 亚洲无码熟妇人妻AV在线| 午夜不卡视频| 色丁丁毛片在线观看| av无码一区二区三区在线| 免费av一区二区三区在线| 成人一区在线| 992tv国产人成在线观看| 亚洲精品第一页不卡| a级毛片免费播放| 91久久夜色精品国产网站 | 97se亚洲综合在线天天| 在线一级毛片| 国产成人免费| 91国内在线观看| 色综合久久综合网| 无码有码中文字幕| 国产黄在线免费观看| 午夜日本永久乱码免费播放片| 欧美三级日韩三级| 91po国产在线精品免费观看| 欧美日韩一区二区在线免费观看 | 免费观看男人免费桶女人视频| 欧美成人午夜视频| 国产精品污视频| 久青草免费在线视频| 久久免费看片| 孕妇高潮太爽了在线观看免费| 久久人午夜亚洲精品无码区| 亚洲综合在线最大成人| 国产伦精品一区二区三区视频优播| 久久国产热| 亚洲成aⅴ人片在线影院八| 夜夜操国产| 国产成人亚洲精品蜜芽影院| 亚洲一级毛片| 欧美亚洲一区二区三区在线| 在线观看无码a∨| 老司国产精品视频91| 亚洲一区二区约美女探花| 蜜桃臀无码内射一区二区三区| 中文字幕乱码中文乱码51精品| 亚洲色图欧美| 成年看免费观看视频拍拍| 亚洲日本一本dvd高清| 国产天天射| 久久一日本道色综合久久| 国产香蕉97碰碰视频VA碰碰看| 欧美精品在线视频观看 | 日韩精品无码免费一区二区三区 | 国产精品分类视频分类一区| 亚洲a级在线观看| 综合久久五月天| 亚洲中文字幕无码爆乳| 欧美 国产 人人视频| AV不卡在线永久免费观看| 亚洲人成网址| 亚洲天堂色色人体| 综合亚洲网| 国产黄在线观看| 国产69精品久久| 中文字幕 91| 人人澡人人爽欧美一区| 伊人久久精品无码麻豆精品 | 国产精品久久久久婷婷五月| 丰满少妇αⅴ无码区| 欧美亚洲日韩不卡在线在线观看| 精品视频一区二区观看| 成年片色大黄全免费网站久久| 亚洲色无码专线精品观看| 激情六月丁香婷婷四房播| 日本三级欧美三级| 国产视频一二三区|