當(dāng)前位置:首頁 > 電源 > 數(shù)字電源
[導(dǎo)讀]文中列舉的Flash的這幾種用法,在CCS中編程下載到TMS320F28xx DSP開發(fā)板上,并通過運行程序驗證了其正確性。

1  前言

    TMS320F28xx DSP片內(nèi)有128 K×16 bit字的Flash、兩塊4 K x16bit字的單周期訪問RAM(SARAM)LO和L1、一塊8 Kxl6 bit字的單周期訪問RAM(SARAM)HO、兩塊1 Kxl6 bit字的單周期訪問RAM(SARAM)M0和M1。由于存儲器種類多、容量大,所以從系統(tǒng)的高度來配置各個存儲器必須有合適的方法,而這些方法一般都與片內(nèi)Flash有關(guān)。另外,TMS320F28xx DSP片內(nèi)有看門狗定時器模塊(WDT)、引導(dǎo)ROM(ROM bootloader)模塊、代碼安全模塊(CSM),要合理地使用這些模塊為整個系統(tǒng)服務(wù),必定也要用到Flash。

    由此可以看出,F(xiàn)lash的地位和作用比較顯著.所以本文就Flash的幾種用法作了研究。

2 從Flash拷貝段到RAM

2.1拷貝中斷向量

    在TMS320F28xx器件中,外設(shè)擴展中斷(PIE)模塊管理中斷請求。上電時,所有中斷向量必須位于非易失性存儲器(如Flash)中,但是要把中斷向量拷貝到PIEVECT RAM中,這是用戶代碼中器件初始化程序的一部分。PIEVECT RAM是一個特定的RAM塊,它在當(dāng)前TMS320F28xx器件中是一個256×16的塊.在數(shù)據(jù)空間中的起始地址為Ox000D00。

    把中斷向量連接到Flash,然后在運行時把中斷向量拷貝到PIEVECT RAM中,有許多方法可以實現(xiàn)。一個方法是創(chuàng)建包含函數(shù)指針的常量C結(jié)構(gòu)體,該結(jié)構(gòu)體包括128個32-bit向量。如果使用DSP281x或者DSP280x外設(shè)的結(jié)構(gòu)體.這個結(jié)構(gòu)體叫做PieVectTableInit,它已經(jīng)在DSP281x_PieVect.c或者DSP280x_PieVect.c創(chuàng)建(參看TI提供的例程)。因為這個結(jié)構(gòu)體使用const類型關(guān)鍵詞,所以它將會被編譯器放置在.econst段中。運行時只需要把這個結(jié)構(gòu)體拷貝到PIEVECT RAM中。C編譯器運行時支持庫包含名為memcpy的存儲器拷貝函數(shù),該函數(shù)可以被用來完成拷貝任務(wù),其用法如下所示:

    以上這個例子為PIE RAM起始地址使用的硬編碼地址(hard coded address),明確指定為0x000D00。但是硬編碼地址并不是較好的編程方式,用戶可以使用DATA_SECTION指令創(chuàng)建一個非初始化的假變量(dummy variable),并把這個變量連接到PIE RAM.然后用這個假變量的名字來代替硬編碼地址。例如,當(dāng)使用DSP281x或者DSP280x外設(shè)結(jié)構(gòu)體時,創(chuàng)建一個名為PieVectTable的非初始化結(jié)構(gòu)體,并把該結(jié)構(gòu)體連接到PIEVECT RAM。前面例子中的memcpy()函數(shù)可以被替換為:

    memcpy(&PieVectTable,&PieVectTableInit,256);

    注意拷貝長度是256個16-bit字.對應(yīng)為128個32-bit字。

2.2初始化Flash控制寄存器

    Flash控制寄存器FOPT、FPWR、:FSTDBY-WAIT、FACTIVEWAIT、FBANKWAIT、FOTPWAIT的初始化代碼不能從Flash存儲器當(dāng)中運行.否則就會有不可預(yù)料的結(jié)果出現(xiàn)。所以,F(xiàn)lash控制寄存器的初始化函數(shù)在運行時必須從Flash(它的裝載地址)拷貝到RAM(它的運行地址)。

    Flash控制寄存器由Code Security Module(CSM)保護(hù)。如果CSM被保護(hù)起來了,那么必須從被保護(hù)的RAM(例如:L0或者L1 SARAM)運行Flash控制寄存器的初始化代碼,否則Flash控制寄存器的初始化代碼無法訪問Flash控制寄存器。要注意的是,當(dāng)器件復(fù)位的時候CSM一般都是被保護(hù)起來的,雖然使用假密碼0xFFFF時ROM BOOTLOAD-ER會把它解鎖。

    C編譯器的CODE_SECTION指令可以用來為Flash控制寄存器的初始化函數(shù)創(chuàng)建獨立的可連接段。例如:假定Flash控制寄存器的配置在C函數(shù)InitFlash()中實現(xiàn),并且想把這個函數(shù)放置在名為secureRamFuncs的可連接段當(dāng)中。下列的C代碼例程顯示了CODE_SECTION命令在Flash存儲器配置中的正確用法:

    secureRamFuncs段可以使用用戶連接命令文件(.cmd)進(jìn)行連接。這個段需要獨立的裝載和運行地址。另外,還想讓連接器生成一些全局符號,這些全局符號可以用來決定裝載地址、運行地址、段長度。在實現(xiàn)把這個段從裝載地址拷貝到它的運行地址時需要這些信息。用戶連接命令文件如下所示:


    在這個例子中,假定存儲器Flash和SECURE_RAM都已經(jīng)在用戶連接命令文件中的MEMORY段中定義。這些存儲器的PAGE標(biāo)識符要與它們的存儲器定義相匹配。在上面的例程中假定兩個存儲空間都已經(jīng)在PAGE 0(程序存儲空間)中聲明過了。RUN_START、LOAD_START、LOAD_END指令將生成全局符號,這些全局符號有特定的名稱,對應(yīng)著相應(yīng)的地址。最后,這個段必須在運行時從Flash拷貝到RAM,可以用到編譯器運行支持庫里面的函數(shù)memcpy()。
 

2.3性能最優(yōu)化

    常數(shù)是那些用C語言的const類型關(guān)鍵詞聲明的數(shù)據(jù)結(jié)構(gòu)。編譯器把所有的常數(shù)放置在.econst段中(假定為大存儲模式)。當(dāng)前TMS320F28xx器件上的特殊管道(special pipelining)提高Flash上運行代碼的性能時.每次訪問位于片上Flash中的數(shù)據(jù)常數(shù)會占用許多周期。特別是在150 MHz TMS320F281x DSP上Flash等待狀態(tài)要達(dá)到5個周期.100 MHz TMS320F280x DSP達(dá)到3個周期。所以,訪問片上RAM中的常數(shù)與常數(shù)表則成為沉重的負(fù)擔(dān)。然而,分立式嵌入式系統(tǒng)要求所有的初始化數(shù)據(jù)(如常數(shù))最初都是位于非易失性存儲器中,所以,必須為想訪問的RAM中的常數(shù)建立獨立的裝載和運行地址.在運行時把這些常數(shù)從片上Flash中拷貝到RAM中。這里介紹兩種不同的實現(xiàn)方法。

方法一:在RAM中運行所有的常數(shù)陣列。

    這種方法是為整個.econst段指定獨立的裝載和運行地址。其好處是容易使用,而壞處是RAM的使用量非常大(可能只有少量常數(shù)需要快速訪問,但是用這種方法所有的常數(shù)都位于RAM)。

    在用戶連接命令文件中簡單地為整個.econst段指定獨立的裝載和運行地址,然后在運行時通過拷貝整個.econst段的方式往工程中添加代碼。例如:
 

方法二:在RAM中運行特定的常數(shù)陣列。

    這種方法是在運行時有選擇性地從Flash拷貝常數(shù)到RAM。與方法一相似,這個流程能夠完成預(yù)期功能,不同點是只有在命名段中被選擇了的常數(shù)才會被拷貝到RAM中(而不是把所有的常數(shù)都拷貝到RAM中)。

    假定想創(chuàng)建在RAM中運行的5個字的常數(shù)陣列,并命名為table[]。DATA_SECTION指令用來把table[]放置在名為ramconsts的用戶自定義段中。相應(yīng)的C源程序如下所示:
 
    使用用戶連接命令文件連接ramconsts段,裝載到Flash而從RAM中運行,生成全局符號來幫助存儲器拷貝。用戶連接命令文件如下所示:
 
    最后,在運行時必須把table[]從裝載地址拷貝到運行地址:
 

3 CSM密碼的編程


    TMS320F28xx器件上的代碼安全模塊CSM提供了保護(hù),防止非法的程序拷貝。在當(dāng)前的TMS320F28xx器件中,整個Flash、OTP存儲器,LO和L1都被CSM保護(hù)(Flash配置寄存器同樣被保護(hù))。當(dāng)器件被保護(hù)的時候,只有從被保護(hù)的存儲空間運行的代碼可以訪問(讀或?qū)?其他被保護(hù)存儲空間中的數(shù)據(jù)。從非保護(hù)的存儲空間運行的代碼不可以訪問被保護(hù)存儲空間中的數(shù)據(jù)。

    CSM使用128-bit密碼組成8個單獨的16-bit字。在當(dāng)前的TMS320F28xx器件上,這些密碼被存儲在Flash的最高8個字中(如地址:Ox3F7FF8-Ox3F7FFF)。在開發(fā)過程中,建議在密碼位置放入假密碼0xFFFF。使用假密碼時,對CSM解保護(hù)只需假讀密碼位置。把假密碼放在密碼位置是很容易的.因為在Flash編程過程中.Flash被清除后這些位置的狀態(tài)將會是0xFFFF。用戶只需要在自己的代碼工程中避免連接任何段到密碼地址,密碼將保持為OxFFFF。

    在開發(fā)完成以后.可能想把真正的密碼放在密碼位置中。另外,為了正確地保護(hù)CSM模塊,當(dāng)前TMS320F28xx器件上的CSM模塊需要編寫值Ox0000到Flash的地址0x3F7F80-Ox3F7FF5。完成這兩個任務(wù)的最簡單的方法是用少量匯編語言進(jìn)行編程。下面是一個匯編代碼例子,這個例子指定了想要的密碼值,并且把它們放在一個名為pass-words的初始化段中。另外創(chuàng)建了一個名為csm_rsvd的初始化段,這個段的值全部是0x0000.并且這個段有適當(dāng)?shù)拈L度以適合地址Ox3F7F80-0x3F7FF5。注意,這個例子顯示的是假密碼值0xFFFF.用戶可以用自己的密碼代替這些假密碼。
 

    在這里必須警告用戶:不要把8個密碼的值全部設(shè)為Ox0000,這樣做會永久地鎖定CSM模塊!passwords和CSB_rsvd段要由用戶連接命令文件放置在存儲器中。下面的例子適用于當(dāng)前TMS320F28xx器件(對于其他器件,請參考器件數(shù)據(jù)手冊以確定密碼和CSM保留位置的地址)。
 

4 在DSP復(fù)位以后從Flash運行代碼


    TMS320F28xx具有引導(dǎo)ROM(ROM bootloader),器件復(fù)位以后ROM bootloader能把代碼運行轉(zhuǎn)到Flash中。當(dāng)引導(dǎo)模式選擇引腳被配置為"跳轉(zhuǎn)到Flash"時.ROM bootloader將跳轉(zhuǎn)到Flash中位于地址Ox3F7FF6處的指令。用戶需要在這個地址上安排一條指令,這條指令跳轉(zhuǎn)到用戶代碼。由于CSM密碼從地址Ox3F7FF8開始,所以剛好有2個字可用于存放這個跳轉(zhuǎn)指令。并非巧合的是,長跳轉(zhuǎn)指令(在匯編代碼中為LB)剛好占用2個字。

    一般情況下,跳轉(zhuǎn)指令將會跳轉(zhuǎn)到C編譯器運行支持庫中C環(huán)境初始化程序的起始位置。這個程序的人口標(biāo)號是_c_int00。在這個程序沒有運行的時候C代碼就不能運行。同樣地,有時候在開始運行用戶的C應(yīng)用程序之前需要執(zhí)行少量的匯編代碼(例如:禁止看門狗時鐘外設(shè))。這樣,跳轉(zhuǎn)指令需要跳轉(zhuǎn)到用戶匯編代碼的起始位置,需要在Flash中正確定位跳轉(zhuǎn)指令。能達(dá)到這個目的的最簡單的方法是使用匯編代碼。在下面的例子中.創(chuàng)建了一個名為Codestart的已命名初始化段.這個段包含了一個長跳轉(zhuǎn).可以跳轉(zhuǎn)到C環(huán)境初始化程序。需要用用戶連接命令文件把codestart段放置在存儲器中。
 
    用戶須在用戶連接命令文件MEMORY部分的PAGE 0上定義一個名為BEGIN_Flash的存儲器塊。Codestart段將被連接到這個存儲器塊。下面的例子針對當(dāng)前TMS320F28xx器件.對于其他的器件,參考相應(yīng)的數(shù)據(jù)手冊以確認(rèn)Flash目標(biāo)地址的引導(dǎo)。
 

5 C環(huán)境引導(dǎo)時禁止看門狗計時

    C編譯器運行時支持庫中的C環(huán)境初始化函數(shù)是_c_int00,它完成全局和靜態(tài)變量的初始化。包括為每個初始化全局變量把數(shù)據(jù)從.cinit段(位于片上Flash存儲器)拷貝到.ebss段(位于RAM)。例如,當(dāng)一個全局變量在源代碼中聲明為:

    int x=5;

    "5"被放置在初始化段.cinit,而符號"x"被放置在.ebss段。然后,_c_int00程序在運行時把"5"拷貝到"x"的位置。當(dāng)軟件中有初始化全局和靜態(tài)變量的大量數(shù)值時。在C環(huán)境引導(dǎo)程序完成并且調(diào)用main()(這里看門狗可以被配置或被禁止)函數(shù)之前看門狗定時器會超時。在代碼開發(fā)的過程中,這個問題可能不會在RAM中顯現(xiàn)出來,因為從.cinit段拷貝的數(shù)據(jù)被連接到RAM后會非常快速地運行。然而,當(dāng).cinit段連接到內(nèi)部Flash時。拷貝每個數(shù)據(jù)將會耗費大量的周期。因為內(nèi)部Flash存儲器缺省為最大等待狀態(tài)(等待狀態(tài)僅在用戶代碼運行到main()后才會被配置)。另外。代碼從Flash中實現(xiàn)數(shù)據(jù)拷貝.這又會增加完成數(shù)據(jù)拷貝需要的時間(代碼取指和數(shù)據(jù)讀肯定會訪問Flash)??撮T狗超時周期缺省到盡可能的最小值.結(jié)合這么一個事實,看門狗超時變成真實的可能性。有一個簡單的方法使用CCS來檢測看門狗超時,步驟如下:

    (1)為已經(jīng)寫入Flash的代碼裝載符號(單擊File→Load Symbols→Load Symbols Only)

    (2)復(fù)位DSP(單擊Debug→Reset CPU)。

    (3)重新開始DSP(單擊Debug→Restart)。如果bootloader被設(shè)置為"Jump to Flash".那么無需進(jìn)行這一步。

    (4)運行到main()(單擊Debug→Go_Main)。如果沒有到達(dá)main(),那么在C環(huán)境初始化程序完成之前看門狗很有可能已經(jīng)溢出。

    解決看門狗超時問題最簡單的辦法就是在開始C環(huán)境初始化程序之前禁止看門狗。在main()到達(dá)之后重新使能看門狗,并且開始正常的代碼執(zhí)行流程。通過將WDCR寄存器中的WDDIS位設(shè)置為1來禁止看門狗。必須使用匯編代碼(因為C環(huán)境還沒有建立)。在上文中,Codestart匯編代碼段實現(xiàn)了能跳轉(zhuǎn)到C環(huán)境初始化程序_c_int00的跳轉(zhuǎn)指令。為了禁止看門狗,這個跳轉(zhuǎn)要變?yōu)樘D(zhuǎn)到看門狗禁止代碼。此看門狗代碼然后又跳轉(zhuǎn)到_c_int00的程序。下面的代碼例子實現(xiàn)了這些功能:
 

 

6 結(jié)束語


    文中列舉的Flash的這幾種用法,在CCS中編程下載到TMS320F28xx DSP開發(fā)板上,并通過運行程序驗證了其正確性。Flash的這幾種用法可以作為系統(tǒng)開發(fā)過程中的參考,有助于復(fù)雜系統(tǒng)開發(fā)。

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉