TMS320F2812片內Flash在線(xiàn)燒寫(xiě)技術(shù)簡(jiǎn)介
TMS320F2812(以下簡(jiǎn)稱(chēng)F2812)是美國德州儀器公司(TI)新一代32位定點(diǎn)數字信號處理器(DSP),主要應用于逆變器控制、電機控制等領(lǐng)域,并擁有工作頻率高達150 MHz的32位DSP內核處理器,可以高效可靠地實(shí)現自適應控制和狀態(tài)控制等。因此,TMS320F28X系列DSP已成為自動(dòng)控制領(lǐng)域的首選控制器件。F2812片內擁有高達128 KBx16位的F1ash程序存儲器,可以滿(mǎn)足大多數程序存儲需要。在研究基于JTAG接口的兩種常用Flash燒寫(xiě)技術(shù)(CCS插件燒寫(xiě)技術(shù)和Flash281x_API函數庫燒寫(xiě)技術(shù))的基礎上,提出了一種利用RS485與PC機的串行通訊實(shí)現Flash燒寫(xiě)的方法。
本文引用地址:http://dyxdggzs.com/article/171023.htmF2812片內Flash簡(jiǎn)介 TMS320F2812原理與開(kāi)發(fā)
F2812帶有128 KBxl6位的片內Flash存儲器,分為4個(gè)8 KBxl6位和6個(gè)16 KBxl6位的扇區,用戶(hù)可以單獨擦除、編程和驗證Flash的一個(gè)扇區而不會(huì )影響其他扇區,但不能用F1ash的一個(gè)扇區執行Flash的算法對其他扇區擦除或編程。F1ash還可映射到程序數據空間,因此它既可用于執行代碼,也可存儲數據信息。
TI代碼產(chǎn)生工具所產(chǎn)生的目標文件是一種模塊化文件格式一一COFF格式,即.out文件。程序中的代碼和數據在COFF格式文件中以段形式形成,不同的段存放不同類(lèi)型的內容.應用中通過(guò)編寫(xiě)連接器命令文件(.cmd)將這些段正確地分配到DSP的地址空間,DSP集成開(kāi)發(fā)環(huán)境CCS經(jīng)編譯鏈接之后。生成.out文件和.map文件。.map文件詳細描述了.cmd文件中定義的各段起始地址以及使用長(cháng)度。而out文件為COFF格式,DSP能夠識別,但不能直接燒寫(xiě)到Flash,必須將.out文件轉換為Flash能識別的數據格式,即.hex的數據文件。利用CCS轉換和.hex轉換工具HEX2000進(jìn)行轉換。
基于JTAG的燒寫(xiě)技術(shù)
3.1 CCS插件燒寫(xiě)技術(shù)
利用燒寫(xiě)插件完成Flash的燒寫(xiě)無(wú)需數據轉換,只需通過(guò)程序調試生成.out文件即可。由于調試階段程序的.cmd文件存放在F2812的RAM,而燒寫(xiě)階段程序則存放在Flash,即調試階段程序的重新定位不能在CCS環(huán)境下運行,需要編寫(xiě)兩個(gè)不同的.cmd文件。
3.2 Flash281x_API函數燒寫(xiě)技術(shù)
F1ash281x API函數庫燒寫(xiě)技術(shù)是利用TI公司的編程算法.該算法定義良好,操作簡(jiǎn)單,而且可以脫離燒寫(xiě)插件,真正實(shí)現在線(xiàn)燒寫(xiě)。
編程算法中函數定義如下:(1)擦除扇區的函數為Uintl6F1ash2812 Erase(SectorMask,FStatus),其中,SectorMask為擦除指定扇區;Fstatus為狀態(tài)值,判斷操作是否成功。(2)燒寫(xiě)程序到F1ash函數為Uintl6 Flash2812_Program(FlashAddr,BuffAddr,Length,FStatus),其中FlashAddr為程序在Flash中燒寫(xiě)的起始地址;BuffAddr為程序當前存放在內存空間的首地址:Length為程序長(cháng)度;Fstatus為狀態(tài)值,判斷操作是否成功。(3)校驗燒寫(xiě)到Flash中的程序為Uintl6 Flash2812_Verifv(&FlashAddr,&BuffAddr,Length,&FStatus)。
Flash28x_API函數燒寫(xiě)步驟如下:
(1)先將.hex格式數據下載到F2812的內存.在CCS環(huán)境下完成File→Data→Load,并存放地址和數據長(cháng)度兩個(gè)參數,其中數據長(cháng)度可以通過(guò)HEX轉換為.map文件獲得。
(2)編寫(xiě)基于Flash281x_API函數的燒寫(xiě)程序。先擦除相應的Flash扇區,通過(guò)Flash2812_Erase函數完成;將數據的起始地址和數據長(cháng)度兩個(gè)參數分別賦給FlashAddr和Length變量,然后調用Flash2812_Program函數開(kāi)始燒寫(xiě),最后調用Flash2812_Verify函數確定燒寫(xiě)是否成功。
Flash API與用戶(hù)工程建立關(guān)聯(lián)后,目標代碼通過(guò)調用API函數,實(shí)現對Flash的擦除、燒寫(xiě)和校驗等操作,Flash的密碼保護值不全為0,否則Flash將被鎖死導使無(wú)法解鎖。
串口燒寫(xiě)FlaSh技術(shù)
基于JTAG的燒寫(xiě)技術(shù)必須在CCS環(huán)境下通過(guò)JTAG接口實(shí)現。雖然基于JTAG接口的兩種燒寫(xiě)方法易于操作,方便調試,但常常受空間和傳輸距離限制。比如一臺DSP系統安裝在復雜、封閉的環(huán)境下,當程序需要更新或升級時(shí),利用JTAG接口難以實(shí)現Flash的在線(xiàn)燒寫(xiě)。而通過(guò)串口燒寫(xiě)技術(shù)采用“程序”燒寫(xiě)“程序”的方法則不受限制。前一個(gè)“程序”指已固化程序,用于實(shí)現串口燒寫(xiě)的時(shí)機判斷、數據接收及燒寫(xiě)的具體實(shí)施等,該程序使用了Flash281x_API庫編程算法;而后一個(gè)“程序”是用戶(hù)的應用目標代碼。
實(shí)現串口燒寫(xiě)技術(shù)軟件分為PC機內用于數據發(fā)送的頂層軟件和目標機內的底層軟件。頂層軟件可實(shí)現用戶(hù)程序的解析等;而底層軟件可實(shí)現由串口發(fā)送的數據燒寫(xiě)至Flash。F2812 DSP每次上電復位,先運行底層軟件,判斷是否需要重新燒寫(xiě)Flash。若需要,則將串口發(fā)送的目標代碼燒寫(xiě)至F2812片內Flash指定扇區;否則將繼續執行原有的用戶(hù)目標代碼。
4.1 頂層軟件
頂層軟件可實(shí)現用戶(hù)程序的解析等工作。其用戶(hù)程序為.oul文件,頂層軟件主要完成.hex文件的解析,并將解析后的有用數據發(fā)送至目標DSP。.hex文件的組織格式嚴格,只要提取數據在內存中的存放地址和數據長(cháng)度就可以按照要求將數據發(fā)送給目標DSP。如果用戶(hù)程序很大而目標DSP的內存空間不足時(shí),該過(guò)程還可以分段進(jìn)行。頂層軟件可以使用VC++或者LabVIEW等實(shí)現。
4.2 底層軟件
底層軟件用于實(shí)現將串口發(fā)來(lái)的數據燒寫(xiě)至Flash.涉及到用戶(hù)程序的正確定位和復位后的啟動(dòng)過(guò)程,是整個(gè)軟件設計的重點(diǎn)。底層軟件主要實(shí)現以下功能:
(1)燒寫(xiě)程序搬移功能。由于F2812片上Flash不支持在其中一個(gè)扇區運行程序去擦除或燒寫(xiě)其他扇區,故完成接收數據和燒寫(xiě)Flash工作的這部分程序需搬移至片內RAM或片外RAM上運行。實(shí)現程序搬移的函數為:
其中,SourceAddr為Flash中程序的起始地址,即源程序開(kāi)始地址;SourceEndAddr為Flash中程序的結束地址,即源程結束序地址;DestAddr為搬移至內存的首地址。
(2)上電復位查詢(xún)功能。上電復位后查詢(xún)一個(gè)通用I/O端口的狀態(tài)以確定是否需要燒寫(xiě)程序。這個(gè)通用I/O端口可由用戶(hù)自行確定,但I/O端口占用后其特殊功能便不可用,上電復位后保證其確定狀態(tài),否則會(huì )不間斷燒寫(xiě)程序或者不能正確跳轉到用戶(hù)應用程序。
(3)接收PC機發(fā)送的數據并保存到目標DSP內存。這是在串口接收中斷服務(wù)子程序中完成的,并確定用于數據保存的這部分內存未占用。
(4)接收結束后將內存中的數據燒寫(xiě)至指定Flash扇區,這由Flash28lx_APl庫函數完成。圖1為底層應用軟件流程圖。
逆變器相關(guān)文章:逆變器工作原理
評論