• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      一種TI的C66X的快速啟動方法

      2016-06-18 01:21:20潘慕晗劉云武漢數(shù)字工程研究所第二研究室430074
      電子制作 2016年6期
      關(guān)鍵詞:用戶程序環(huán)境變量代碼

      潘慕晗 劉云 武漢數(shù)字工程研究所第二研究室 430074

      ?

      一種TI的C66X的快速啟動方法

      潘慕晗劉云武漢數(shù)字工程研究所第二研究室430074

      【文章摘要】

      隨著DSP應(yīng)用技術(shù)的發(fā)展,其架構(gòu)和規(guī)模不斷擴(kuò)大,DSP系統(tǒng)的啟動方式也逐步向多元化和自動化發(fā)展。本文介紹C66X啟動的過程并分析NOR FLASH啟動的原理。通過對二級引導(dǎo)中的交互程序進(jìn)行研究,實(shí)現(xiàn)了DSP的快速啟動以及具有較好交互性的操作界面。

      【關(guān)鍵詞】

      C66X;NOR FLASH啟動;bootloader;交互

      【Abstarct】

      As DSP develops to the 21st century, its architecture and scale has changed a lot. Boot Method is also progressing towards the development of diversified automation point of view. Introduce the process of C66X-boot, Analyze the advantage of NOR-FLASH-Boot. Design the user interface program in the 2ndbootloader.Readlize the flexible quick-boot, and a better interface environment.

      【Keyword】

      C66X; NOR-FLASH-Boot; bootloader; interactive

      0 引言

      自2010年TI公司推出keystone C66X系列的DSP之后,關(guān)于該系列DSP的啟動方式也成為技術(shù)難點(diǎn)之一。C66X系列DSP板提供了多種方式啟動:本地的或者遠(yuǎn)程的,基于ROM的或基于flash的??偨Y(jié)一下,共有以下7種:EMIF16啟動、SRIO啟動、以太網(wǎng)啟動、PCI-e啟動、I2C啟動、SPI啟動以及Hyper-Link啟動。

      對于本地啟動,一般使用I2C模式啟動,由于啟動的代碼存放在EEPROM上,讀取速度慢,導(dǎo)致啟動速度較慢,耗時(shí)2-3秒。同時(shí)I2C啟動的代碼大小也受到EEPROM的容量限制。相較之下,使用EMIF16模式啟動,把啟動代碼放在NOR FLASH上,不僅啟動速度快,而且可以增加代碼的容量以及靈活性。本文主要介紹了C66X系列DSP基于NOR FLASH的加載原理,并設(shè)計(jì)了一種可以通過串口進(jìn)行交互的二級引導(dǎo)程序。

      1 NOR FLASH啟動原理

      因?yàn)镹OR FLASH是按字節(jié)尋址的,所以可以在NOR FLASH上直接執(zhí)行代碼。因此我們將一段引導(dǎo)代碼燒入到NOR FLASH的基地址,選擇EMIF模式啟動DSP時(shí),該段代碼會將其后的初始化代碼搬移到指定位置。然后跳轉(zhuǎn)到C語言環(huán)境初始化程序入口地址“_c_ int00”。將這段代碼稱為一級bootloader。這段代碼的執(zhí)行時(shí)間,會隨著其后代碼的大小變化,在400微秒左右。

      初始化代碼稱為二級bootloader,依據(jù)環(huán)境參數(shù)對PLL、DDR、UART、網(wǎng)絡(luò)等進(jìn)行初始化。初始化過程約10ms(初始化成功)。二級bootloader支持對用戶程序的多種方式的引導(dǎo),可以進(jìn)行單核引導(dǎo)、多核引導(dǎo)、網(wǎng)絡(luò)加載引導(dǎo)、以及直接跳轉(zhuǎn)。

      圖1 .bin文件格式

      總結(jié)來說,一級bootloader負(fù)責(zé)將代碼引導(dǎo)起來,二級bootloader負(fù)責(zé)將系統(tǒng)初始化。

      2 一級bootloader的分析

      一級bootloader是直接運(yùn)行在NOR FLASH上的。即PC指針指向NOR FLASH的基地址時(shí),一級bootloader就開始工作了。

      一級bootloader的工作是解析并引導(dǎo)其后的二級bootloader,所以二級bootloader 在NOR FLASH上的存儲格式就有一定的要求。該種文件一共分3部分,代碼入口地址、代碼段信息、結(jié)束標(biāo)識。代碼入口地址,即圖1的“_c_int00”,即文件頭部的4個(gè)字節(jié)。代碼段信息包含段的大小、段的起始地址、段的內(nèi)容。根據(jù)段的大小以及起始地址,我們可以將其后的段內(nèi)容搬移到指定的位置,也就是實(shí)現(xiàn)引導(dǎo)過程。結(jié)束標(biāo)志是在文件的尾部值為0的4字節(jié)整型。當(dāng)一級bootloader識別到段大小為0時(shí),就認(rèn)為搬移工作已經(jīng)結(jié)束,然后跳轉(zhuǎn)到代碼入口地址“_c_int00”。圖1即為二級bootloader的存儲格式??偟膩碚f,一級bootloader工作就是把所有的段內(nèi)容搬移到指定的地址空間,然后再跳轉(zhuǎn)到“_c_ int00”。

      因?yàn)槎塨ootloader的格式是固定的,所有生成一個(gè)該格式的文件是相當(dāng)重要的一個(gè)步驟。使用CCS5.5編譯生成的執(zhí)行文件(后綴.out)是ELF格式的。我們需要通過一定的工具鏈將ELF文件轉(zhuǎn)換為圖1所示的文件格式。工具鏈如圖2所示。首先,向hex6x.exe輸入.out文件以及一個(gè).rmd的配置文件;得到一個(gè).hex的中間文件,再將其輸入到b2ccs.exe,得到一個(gè).dat的中間文件,再將其輸入到ccs2bin.exe,得到我們需要的.bin文件。

      《會稽志》王右軍宅記:“舊經(jīng)云:‘羲之別業(yè)有養(yǎng)鵝池、洗硯池、題扇橋存焉?!戎^之別業(yè),則疑宅不在是,或云嵊縣金庭觀,乃右軍舊宅,嘗舍讀書樓為觀,在縣東南七十二里孝嘉鄉(xiāng)。”[2]1951

      圖2 .bin文件工具鏈

      3 二級bootloader的研究與實(shí)現(xiàn)

      二級bootloader的首要工作是完成整個(gè)系統(tǒng)的初始化,包含PLL串口、I2C以及DDR等。初始化的參數(shù)是從環(huán)境變量中獲取的,如果環(huán)境變量不存在,則使用默認(rèn)參數(shù)。在完成系統(tǒng)的初始化后,會提示用戶是否進(jìn)入交互界面,不進(jìn)入交互界面則繼續(xù)啟動用戶程序。下面主要介紹交互程序的設(shè)計(jì)。

      用戶交互界面是通過串口構(gòu)建的。啟動后,系統(tǒng)打印一些DSP的參數(shù),如DDR大小、主頻、初始化信息等,再進(jìn)入自動啟動,等待數(shù)秒后按照設(shè)定的啟動模式引導(dǎo)用戶程序(在等待過程中,按下任意鍵可進(jìn)入交互界面)。

      交互功能主要由以下幾個(gè)方面組成:

      串口輸入輸出功能,輸出使用與printf類似的sys_printf,實(shí)現(xiàn)變參打印。而輸入則使用sys_read_line,每次讀取一整行的輸入,同時(shí)實(shí)現(xiàn)退格、插入刪除、查找最近的輸入等功能。主要是實(shí)現(xiàn)上下左右、退格以及ESC鍵的功能。

      為實(shí)現(xiàn)查找最新輸入的功能,需要一個(gè)環(huán)形儲存池,用于保存前面使用過的指令。環(huán)形池使用鏈表實(shí)現(xiàn),用于實(shí)現(xiàn)上下鍵查找最近的輸入。環(huán)形池內(nèi)單個(gè)節(jié)點(diǎn),包含的信息有輸入的信息cmd_t[]、輸入信息長度size_t、使用標(biāo)記used、上一個(gè)節(jié)點(diǎn)的地址、下一個(gè)節(jié)點(diǎn)的地址。

      指令解析及指令庫。如查看內(nèi)存數(shù)據(jù)“dm 80000000 100”,首先在指令庫內(nèi)查找與dm對應(yīng)的指令,然后進(jìn)入“dm”的處理函數(shù)(查看某地址的數(shù)據(jù)),讀取輸入中的參數(shù),地址參數(shù)0x80000000,大小參數(shù)0x10,然后進(jìn)行輸出0x80000000開始的0x10字節(jié)的數(shù)據(jù),并打印每個(gè)字節(jié)對應(yīng)的ASCII碼,不能顯示的字符以‘.’代替。

      指令庫是由一張指令名表及指令函數(shù)組成,指令名表的每個(gè)條目由3個(gè)項(xiàng)組成。指令名:用于指令解析時(shí),查找相應(yīng)條目,如“dm”;指令入口:查找到指令條目后,根據(jù)條目內(nèi)的該項(xiàng)可以調(diào)用相應(yīng)的指令函數(shù);指令說明:用于打印指令表的幫助信息。

      打印幫助信息:{"help", &cmd_help, "show the help table"}

      添加指令,需要在指令名表里,加入相應(yīng)條目,同時(shí)實(shí)現(xiàn)相應(yīng)的指令函數(shù)即可。

      功能函數(shù)封裝,將底層驅(qū)動與功能函數(shù)隔離。使代碼對于不同硬件平臺具有較好適應(yīng)性以及可移植性。

      如對于不同的FLASH,只需要在FLASH表內(nèi)添加相應(yīng)的條目以及相應(yīng)的底層驅(qū)動即可。

      static FLASHTable f_table[2]=

      {{0, &S29GL_write, &S29GL_erase, "S29GL"},

      {-1, NULL, NULL, ""}};

      腳本功能,在啟動用戶程序之前,執(zhí)行一些特定的動作,以此達(dá)到不修改代碼,而增加功能。腳本會被保存在環(huán)境變量中,每次啟動都會根據(jù)環(huán)境變量中的設(shè)置來決定是否執(zhí)行腳本,以及腳本中的內(nèi)容。

      環(huán)境變量,是二級bootloader中的重要組成部分。它控制了系統(tǒng)的整體初始化,功能的選擇,用戶程序的啟動方式等。對于不同應(yīng)用環(huán)境下,啟動時(shí)的參數(shù)也是不同的。如對于不同的DDR3,我們需要在環(huán)境變量中設(shè)置不同的DDR初始化參數(shù)。

      環(huán)境變量是可以在交互界面下修改的,修改后通過指令保存到設(shè)定的NOR FLASH的某片區(qū)域上。為了保證環(huán)境變量的可靠性,在環(huán)境變量的尾部加入一個(gè)CRC32的校驗(yàn)。每次讀取環(huán)境變量時(shí),把讀取的環(huán)境變量計(jì)算CRC32的值與NOR FLASH上的校驗(yàn)值對比,以確認(rèn)讀取到的環(huán)境變量是有效的。

      計(jì)時(shí)功能,是啟動流程控制的一個(gè)重要組成部分,主要用于超時(shí)等待和刷新打印。使得bootloader的啟動時(shí)間在一個(gè)可控的范圍內(nèi)。在主頻比較高的DSP上,選擇以1微秒為計(jì)數(shù)單位。超時(shí)等待的功能一般用在硬件初始化等待。刷新打印則是用在自啟動中,提示用戶剩余時(shí)間。

      通過實(shí)現(xiàn)以上的幾點(diǎn),我們可以搭建一個(gè)簡單的交互界面。當(dāng)系統(tǒng)啟動后,打印當(dāng)前的版本為1.5.0以及系統(tǒng)相關(guān)參數(shù)。然后讀取環(huán)境變量的內(nèi)容(如果NOR FLASH上沒有環(huán)境變量則用默認(rèn)參數(shù)),再根據(jù)環(huán)境變量對系統(tǒng)初始化并提示用戶是否進(jìn)入交互界面。進(jìn)入交互界面后,用戶可以輸入相應(yīng)的指令來執(zhí)行一些操作。如“?”,查看幫助信息;“dm 80000000 10”,查看內(nèi)存信息;“ddr test”,測試內(nèi)存單元;“flash”,固化用戶程序等。圖3展示了一次DSP啟動,并進(jìn)入交互界面的全部打印。

      圖3 DSP啟動打印信息

      4 結(jié)論

      本文通過分析TI的C66X DSP的NOR FLASH的啟動原理,研究設(shè)計(jì)了用戶交互程序,實(shí)現(xiàn)DSP的快速啟動以及多樣的啟動方式,使得用戶可以通過可視化的界面來進(jìn)行程序的固化以及引導(dǎo)。

      【參考文獻(xiàn)】

      [1] 樂燕芬. ARM嵌入式系統(tǒng)啟動過程分析及實(shí)現(xiàn)[J].儀器儀表學(xué)報(bào),2006年S3期

      [2]肖啟陽 方元 張忠慧. 基于TMS320VC55X系列DSP的外部FLASH并行二次引導(dǎo)加載方法研究[J].計(jì)算機(jī)應(yīng)用與軟件,2013年04期

      [3] 馮林琳 耿恒山. 基于S3C6410的Uboot分析與移植[J].計(jì)算機(jī)與現(xiàn)代化,2013 年10期

      [4] 李飛平 卿粼波 滕奇志 舒君 何小海. 基于TMS320C6678的多核程序加載研究與實(shí)現(xiàn)[J]. 電子技術(shù)應(yīng)用,2015年03期

      [5] 衛(wèi)晉 劉峰 龍騰. 大規(guī)模多DSP實(shí)時(shí)網(wǎng)絡(luò)加載系統(tǒng)關(guān)鍵技術(shù)研究[J]. 計(jì)算機(jī)工程與應(yīng)用,2007年05期

      猜你喜歡
      用戶程序環(huán)境變量代碼
      基于最大熵模型的云南思茅松潛在分布區(qū)
      從桌面右鍵菜單調(diào)用環(huán)境變量選項(xiàng)
      變速箱控制系統(tǒng)Bootloader設(shè)計(jì)與實(shí)現(xiàn)
      徹底弄懂Windows 10環(huán)境變量
      創(chuàng)世代碼
      動漫星空(2018年11期)2018-10-26 02:24:02
      創(chuàng)世代碼
      動漫星空(2018年2期)2018-10-26 02:11:00
      創(chuàng)世代碼
      動漫星空(2018年9期)2018-10-26 01:16:48
      創(chuàng)世代碼
      動漫星空(2018年5期)2018-10-26 01:15:02
      嵌入式設(shè)備遠(yuǎn)程升級方案設(shè)計(jì)
      基于三階段DEA—Malmquist模型的中國省域城鎮(zhèn)化效率測度及其收斂分析
      石景山区| 池州市| 五大连池市| 襄垣县| 黔江区| 东乡| 汾阳市| 渝中区| 乾安县| 岫岩| 象山县| 资兴市| 祁阳县| 徐水县| 开封县| 丰台区| 枞阳县| 汝州市| 湘西| 黔东| 前郭尔| 乡城县| 广河县| 乌拉特后旗| 宜阳县| 高阳县| 合水县| 曲沃县| 东山县| 绩溪县| 舒兰市| 清原| 石柱| 陇南市| 民县| 扶沟县| 大埔区| 万州区| 尉犁县| 嘉鱼县| 蚌埠市|