當(dāng)前位置:首頁(yè) > 電源 > 數(shù)字電源
[導(dǎo)讀]基于TMS320F2812內(nèi)部F1ash在線燒寫(xiě)技術(shù),提出了一種串口燒寫(xiě)Flash技術(shù)。詳細(xì)論述了燒寫(xiě)技術(shù)的實(shí)現(xiàn)步驟.給出了關(guān)鍵部分的程序代碼。通過(guò)對(duì)比發(fā)現(xiàn),基于JTAG接口燒寫(xiě)技術(shù)常用于調(diào)試階段,而串口燒寫(xiě)技術(shù)能夠應(yīng)用于一些特殊場(chǎng)合,并能提高系統(tǒng)的可維護(hù)性。

1 引言
    TMS320F2812(以下簡(jiǎn)稱F2812)是美國(guó)德州儀器公司(TI)新一代32位定點(diǎn)數(shù)字信號(hào)處理器(DSP),主要應(yīng)用于逆變器控制、電機(jī)控制等領(lǐng)域,并擁有工作頻率高達(dá)150 MHz的32位DSP內(nèi)核處理器,可以高效可靠地實(shí)現(xiàn)自適應(yīng)控制和狀態(tài)控制等。因此,TMS320F28X系列DSP已成為自動(dòng)控制領(lǐng)域的首選控制器件。F2812片內(nèi)擁有高達(dá)128 KBx16位的F1ash程序存儲(chǔ)器,可以滿足大多數(shù)程序存儲(chǔ)需要。在研究基于JTAG接口的兩種常用Flash燒寫(xiě)技術(shù)(CCS插件燒寫(xiě)技術(shù)和Flash281x_API函數(shù)庫(kù)燒寫(xiě)技術(shù))的基礎(chǔ)上,提出了一種利用RS485與PC機(jī)的串行通訊實(shí)現(xiàn)Flash燒寫(xiě)的方法。


2 F2812片內(nèi)Flash簡(jiǎn)介
    F2812帶有128 KBxl6位的片內(nèi)Flash存儲(chǔ)器,分為4個(gè)8 KBxl6位和6個(gè)16 KBxl6位的扇區(qū),用戶可以單獨(dú)擦除、編程和驗(yàn)證Flash的一個(gè)扇區(qū)而不會(huì)影響其他扇區(qū),但不能用F1ash的一個(gè)扇區(qū)執(zhí)行Flash的算法對(duì)其他扇區(qū)擦除或編程。F1ash還可映射到程序數(shù)據(jù)空間,因此它既可用于執(zhí)行代碼,也可存儲(chǔ)數(shù)據(jù)信息。
    TI代碼產(chǎn)生工具所產(chǎn)生的目標(biāo)文件是一種模塊化文件格式一一COFF格式,即.out文件。程序中的代碼和數(shù)據(jù)在COFF格式文件中以段形式形成,不同的段存放不同類型的內(nèi)容.應(yīng)用中通過(guò)編寫(xiě)連接器命令文件(.cmd)將這些段正確地分配到DSP的地址空間,DSP集成開(kāi)發(fā)環(huán)境CCS經(jīng)編譯鏈接之后。生成.out文件和.map文件。.map文件詳細(xì)描述了.cmd文件中定義的各段起始地址以及使用長(zhǎng)度。而out文件為COFF格式,DSP能夠識(shí)別,但不能直接燒寫(xiě)到Flash,必須將.out文件轉(zhuǎn)換為Flash能識(shí)別的數(shù)據(jù)格式,即.hex的數(shù)據(jù)文件。利用CCS轉(zhuǎn)換和.hex轉(zhuǎn)換工具HEX2000進(jìn)行轉(zhuǎn)換。

3 基于JTAG的燒寫(xiě)技術(shù)
3.1 CCS插件燒寫(xiě)技術(shù)
   
利用燒寫(xiě)插件完成Flash的燒寫(xiě)無(wú)需數(shù)據(jù)轉(zhuǎn)換,只需通過(guò)程序調(diào)試生成.out文件即可。由于調(diào)試階段程序的.cmd文件存放在F2812的RAM,而燒寫(xiě)階段程序則存放在Flash,即調(diào)試階段程序的重新定位不能在CCS環(huán)境下運(yùn)行,需要編寫(xiě)兩個(gè)不同的.cmd文件。
3.2 Flash281x_API函數(shù)燒寫(xiě)技術(shù)
    F1ash281x API函數(shù)庫(kù)燒寫(xiě)技術(shù)是利用TI公司的編程算法.該算法定義良好,操作簡(jiǎn)單,而且可以脫離燒寫(xiě)插件,真正實(shí)現(xiàn)在線燒寫(xiě)。
    編程算法中函數(shù)定義如下:(1)擦除扇區(qū)的函數(shù)為Uintl6F1ash2812 Erase(SectorMask,&FStatus),其中,SectorMask為擦除指定扇區(qū);&Fstatus為狀態(tài)值,判斷操作是否成功。(2)燒寫(xiě)程序到F1ash函數(shù)為Uintl6 Flash2812_Program(&FlashAddr,&BuffAddr,Length,&FStatus),其中&FlashAddr為程序在Flash中燒寫(xiě)的起始地址;&BuffAddr為程序當(dāng)前存放在內(nèi)存空間的首地址:Length為程序長(zhǎng)度;&Fstatus為狀態(tài)值,判斷操作是否成功。(3)校驗(yàn)燒寫(xiě)到Flash中的程序?yàn)閁intl6 Flash2812_Verifv(&FlashAddr,&BuffAddr,Length,&FStatus)。
    Flash28x_API函數(shù)燒寫(xiě)步驟如下:
    (1)先將.hex格式數(shù)據(jù)下載到F2812的內(nèi)存.在CCS環(huán)境下完成File→Data→Load,并存放地址和數(shù)據(jù)長(zhǎng)度兩個(gè)參數(shù),其中數(shù)據(jù)長(zhǎng)度可以通過(guò)HEX轉(zhuǎn)換為.map文件獲得。
    (2)編寫(xiě)基于Flash281x_API函數(shù)的燒寫(xiě)程序。先擦除相應(yīng)的Flash扇區(qū),通過(guò)Flash2812_Erase函數(shù)完成;將數(shù)據(jù)的起始地址和數(shù)據(jù)長(zhǎng)度兩個(gè)參數(shù)分別賦給&FlashAddr和Length變量,然后調(diào)用Flash2812_Program函數(shù)開(kāi)始燒寫(xiě),最后調(diào)用Flash2812_Verify函數(shù)確定燒寫(xiě)是否成功。
    Flash API與用戶工程建立關(guān)聯(lián)后,目標(biāo)代碼通過(guò)調(diào)用API函數(shù),實(shí)現(xiàn)對(duì)Flash的擦除、燒寫(xiě)和校驗(yàn)等操作,F(xiàn)lash的密碼保護(hù)值不全為0,否則Flash將被鎖死導(dǎo)使無(wú)法解鎖。

4 串口燒寫(xiě)FlaSh技術(shù)
   
基于JTAG的燒寫(xiě)技術(shù)必須在CCS環(huán)境下通過(guò)JTAG接口實(shí)現(xiàn)。雖然基于JTAG接口的兩種燒寫(xiě)方法易于操作,方便調(diào)試,但常常受空間和傳輸距離限制。比如一臺(tái)DSP系統(tǒng)安裝在復(fù)雜、封閉的環(huán)境下,當(dāng)程序需要更新或升級(jí)時(shí),利用JTAG接口難以實(shí)現(xiàn)Flash的在線燒寫(xiě)。而通過(guò)串口燒寫(xiě)技術(shù)采用“程序”燒寫(xiě)“程序”的方法則不受限制。前一個(gè)“程序”指已固化程序,用于實(shí)現(xiàn)串口燒寫(xiě)的時(shí)機(jī)判斷、數(shù)據(jù)接收及燒寫(xiě)的具體實(shí)施等,該程序使用了Flash281x_API庫(kù)編程算法;而后一個(gè)“程序”是用戶的應(yīng)用目標(biāo)代碼。
    實(shí)現(xiàn)串口燒寫(xiě)技術(shù)軟件分為PC機(jī)內(nèi)用于數(shù)據(jù)發(fā)送的頂層軟件和目標(biāo)機(jī)內(nèi)的底層軟件。頂層軟件可實(shí)現(xiàn)用戶程序的解析等;而底層軟件可實(shí)現(xiàn)由串口發(fā)送的數(shù)據(jù)燒寫(xiě)至Flash。F2812 DSP每次上電復(fù)位,先運(yùn)行底層軟件,判斷是否需要重新燒寫(xiě)Flash。若需要,則將串口發(fā)送的目標(biāo)代碼燒寫(xiě)至F2812片內(nèi)Flash指定扇區(qū);否則將繼續(xù)執(zhí)行原有的用戶目標(biāo)代碼。
4.1 頂層軟件
   
頂層軟件可實(shí)現(xiàn)用戶程序的解析等工作。其用戶程序?yàn)椋畂ul文件,頂層軟件主要完成.hex文件的解析,并將解析后的有用數(shù)據(jù)發(fā)送至目標(biāo)DSP。.hex文件的組織格式嚴(yán)格,只要提取數(shù)據(jù)在內(nèi)存中的存放地址和數(shù)據(jù)長(zhǎng)度就可以按照要求將數(shù)據(jù)發(fā)送給目標(biāo)DSP。如果用戶程序很大而目標(biāo)DSP的內(nèi)存空間不足時(shí),該過(guò)程還可以分段進(jìn)行。頂層軟件可以使用VC++或者LabVIEW等實(shí)現(xiàn)。
4.2 底層軟件
   
底層軟件用于實(shí)現(xiàn)將串口發(fā)來(lái)的數(shù)據(jù)燒寫(xiě)至Flash.涉及到用戶程序的正確定位和復(fù)位后的啟動(dòng)過(guò)程,是整個(gè)軟件設(shè)計(jì)的重點(diǎn)。底層軟件主要實(shí)現(xiàn)以下功能:
    (1)燒寫(xiě)程序搬移功能。由于F2812片上Flash不支持在其中一個(gè)扇區(qū)運(yùn)行程序去擦除或燒寫(xiě)其他扇區(qū),故完成接收數(shù)據(jù)和燒寫(xiě)Flash工作的這部分程序需搬移至片內(nèi)RAM或片外RAM上運(yùn)行。實(shí)現(xiàn)程序搬移的函數(shù)為:


其中,SourceAddr為Flash中程序的起始地址,即源程序開(kāi)始地址;SourceEndAddr為Flash中程序的結(jié)束地址,即源程結(jié)束序地址;DestAddr為搬移至內(nèi)存的首地址。
    (2)上電復(fù)位查詢功能。上電復(fù)位后查詢一個(gè)通用I/O端口的狀態(tài)以確定是否需要燒寫(xiě)程序。這個(gè)通用I/O端口可由用戶自行確定,但I(xiàn)/O端口占用后其特殊功能便不可用,上電復(fù)位后保證其確定狀態(tài),否則會(huì)不間斷燒寫(xiě)程序或者不能正確跳轉(zhuǎn)到用戶應(yīng)用程序。
    (3)接收PC機(jī)發(fā)送的數(shù)據(jù)并保存到目標(biāo)DSP內(nèi)存。這是在串口接收中斷服務(wù)子程序中完成的,并確定用于數(shù)據(jù)保存的這部分內(nèi)存未占用。
    (4)接收結(jié)束后將內(nèi)存中的數(shù)據(jù)燒寫(xiě)至指定Flash扇區(qū),這由Flash28lx_APl庫(kù)函數(shù)完成。圖l為底層應(yīng)用軟件流程圖。

4.3 底層軟件的定位
   
電復(fù)位后,XMP/MC引腳為低電平.目標(biāo)DSP處于計(jì)算機(jī)模式,CPU將從內(nèi)部Boot Rom獲得復(fù)位向量。復(fù)位向量指向Boot Rom并執(zhí)行其內(nèi)部的Bootloader程序,執(zhí)行完畢后確定從內(nèi)部Flash啟動(dòng).程序指針跳轉(zhuǎn)到Flash的Ox3F7FF6處.這個(gè)地址是同定的,因此底層軟件程序必須燒寫(xiě)在以這個(gè)地址為起始地址的空間內(nèi),或者在0x3F7FF6燒寫(xiě)一條跳轉(zhuǎn)指令,上電復(fù)位后通過(guò)跳轉(zhuǎn)指令跳轉(zhuǎn)到底層軟件程序。
4.4 用戶應(yīng)用程序的定位
   
用戶應(yīng)用程序從main函數(shù)開(kāi)始,但DSP首先必須調(diào)用_c_int00函數(shù)建立C語(yǔ)言的運(yùn)行環(huán)境,主要包括:建立初始化系統(tǒng)堆棧,把.cinit段中的數(shù)據(jù)表拷貝到.bss段。對(duì)全局和靜態(tài)變量初始化等。_c_int00執(zhí)行結(jié)束后調(diào)用main函數(shù)開(kāi)始運(yùn)行用戶應(yīng)用程序。因此_c_int00函數(shù)的首地址才是整個(gè)程序的入口點(diǎn)。底層軟件程序執(zhí)行結(jié)束后應(yīng)該調(diào)用_c_int00函數(shù),而不是main函數(shù),可用跳轉(zhuǎn)指令實(shí)現(xiàn),參考程序如下:

5 結(jié)語(yǔ)
    討論的Flash三種在線燒寫(xiě)技術(shù)在實(shí)際工程中均得到實(shí)際運(yùn)用。采用TMS320F2812作為控制器的數(shù)據(jù)采集系統(tǒng).利用Flash在線燒寫(xiě)技術(shù)開(kāi)發(fā)的試驗(yàn)程序,可以根據(jù)需求及時(shí)更新,有助于產(chǎn)品維護(hù)。為了工程技術(shù)人員在實(shí)際項(xiàng)目開(kāi)發(fā)中根據(jù)工程階段和現(xiàn)場(chǎng)環(huán)境選擇合適的燒寫(xiě)方法,文中給出了關(guān)鍵部分程序。經(jīng)過(guò)比較發(fā)現(xiàn),基于JTAG口的燒寫(xiě)技術(shù)適用于研發(fā)調(diào)試階段,而串口燒寫(xiě)Flash技術(shù)更適用于維護(hù)階段.大大提高系統(tǒng)的可維護(hù)性和可擴(kuò)展性,如在封閉和復(fù)雜環(huán)境下進(jìn)行外場(chǎng)加載和控制時(shí),該技術(shù)具有較好的實(shí)用價(jià)值。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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