《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 其他 > 業(yè)界動(dòng)態(tài) > FLASH存儲(chǔ)器的在系統(tǒng)編程及其在DSP系統(tǒng)中的應(yīng)用

FLASH存儲(chǔ)器的在系統(tǒng)編程及其在DSP系統(tǒng)中的應(yīng)用

2009-04-02
作者:公茂忠 劉漢奎 徐殿國

??? 摘? 要: FLASH存儲(chǔ)器的在系統(tǒng)編程技術(shù)及其基本命令,并結(jié)合TMS320C3X系列DSP的上電系統(tǒng)自動(dòng)引導(dǎo)功能,介紹了利用該技術(shù)將用戶程序代碼燒寫到FLASH存儲(chǔ)器中的方法。該方法能夠?qū)崿F(xiàn)DSP系統(tǒng)上電后的用戶程序自動(dòng)引導(dǎo)。?

??? 關(guān)鍵詞: FLASH存儲(chǔ)器? DSP? 在系統(tǒng)編程? 上電引導(dǎo)

?

??? 現(xiàn)在,數(shù)字信號(hào)處理器(DSP)正越來越多地應(yīng)用到各種場(chǎng)合。而FLASH存儲(chǔ)器已成為DSP系統(tǒng)的一個(gè)基本配置,主要用來存放用戶程序代碼。目前FLASH存儲(chǔ)器正在從單純的EPROM的替換件演變?yōu)樵S多電路系統(tǒng)中的不可缺少的組成部分。?

??? 將用戶程序代碼裝入FLASH存儲(chǔ)器的方法有三種。一種方法是要求供應(yīng)商在存儲(chǔ)器發(fā)貨前將數(shù)據(jù)寫入,但無法滿足產(chǎn)品開發(fā)階段用戶修改程序的要求。另一種方法是用戶使用編程器自己編程。但由于芯片制造工藝的提高,芯片集成度越來越高,FLASH存儲(chǔ)器正在向小型化、貼片式發(fā)展,從而使表面貼裝或PLCC封裝的FLASH存儲(chǔ)器難以利用編程器編程。第三種方法是將存儲(chǔ)器安裝到用戶電路板上進(jìn)行編程。這包括現(xiàn)在普遍采用的在系統(tǒng)編程(In System Programming,ISP)。這種編程方式是通過系統(tǒng)的微處理器實(shí)現(xiàn)對(duì)FLASH存儲(chǔ)器的編程,不需要其它編程設(shè)備和附加編程電源,具有靈活、方便的優(yōu)點(diǎn),因此廣泛應(yīng)用在DSP系統(tǒng)中。本文結(jié)合TMS320C3X系列DSP的上電引導(dǎo)表的產(chǎn)生及燒寫方法分析FLASH存儲(chǔ)器的在系統(tǒng)編程技術(shù)。?

1 FLASH存儲(chǔ)器的在系統(tǒng)編程技術(shù)?

1.1 AMF400B FLASH存儲(chǔ)器簡(jiǎn)介?

??? AMF400B 是AMD公司生產(chǎn)的FLASH存儲(chǔ)器,這種FLASH存儲(chǔ)器編程簡(jiǎn)單,下面以此為例對(duì)FLASH存儲(chǔ)器的編程進(jìn)行介紹。?

??? AMF400B的主要特點(diǎn)有:僅需5V單電源供電便可使內(nèi)部產(chǎn)生高電壓進(jìn)行編程和擦除操作;完全支持JEDEC單電源FLASH 存儲(chǔ)器標(biāo)準(zhǔn);支持在系統(tǒng)編程,用戶只需向其命令寄存器寫入標(biāo)準(zhǔn)的微處理器指令,具體編程、擦除操作便由內(nèi)部電路實(shí)現(xiàn);主系統(tǒng)可以通過查詢特定的管腳或數(shù)據(jù)線監(jiān)控編程、擦除操作是否完成;可以對(duì)某一扇區(qū)進(jìn)行操作,而不影響其它部分的數(shù)據(jù);有硬件數(shù)據(jù)保護(hù)功能,以防止誤操作。?

1.2 編程命令?

??? 雖然用戶僅需向FLASH存儲(chǔ)器的特定寄存器寫入地址和數(shù)據(jù)命令,就可對(duì)FLASH存儲(chǔ)器編程,但是如果寫入的地址和數(shù)據(jù)錯(cuò)誤或?qū)懭氲捻樞虿徽_,就會(huì)導(dǎo)致FLASH存儲(chǔ)器復(fù)位。下面介紹幾個(gè)最常用的編程命令。?

??? 讀數(shù)據(jù)命令:該命令不需要特定的時(shí)序,在電路上電或內(nèi)部編程擦除操作結(jié)束后,自動(dòng)進(jìn)入讀數(shù)據(jù)狀態(tài)。只需給出要讀取的地址,即可讀出該地址的內(nèi)容。?

??? 復(fù)位命令:該命令使存儲(chǔ)器復(fù)位,并進(jìn)入讀數(shù)據(jù)狀態(tài)。向任何一個(gè)地址寫入數(shù)據(jù)0xF0就能使FLASH存儲(chǔ)器復(fù)位。在進(jìn)行編程、擦除和自動(dòng)選擇命令模式之前,都應(yīng)先復(fù)位。此外,在編程或擦除等正常操作中若出現(xiàn)錯(cuò)誤,也應(yīng)寫復(fù)位命令退出。?

??? 自動(dòng)選擇命令:該命令可以使主系統(tǒng)讀取存儲(chǔ)器生產(chǎn)廠家、設(shè)備代碼以及是否被保護(hù)等信息。?

??? 編程命令:該命令是一個(gè)4總線周期指令。以兩個(gè)解鎖周期開始,緊接著一個(gè)編程建立命令,最后是要編程的地址和數(shù)據(jù)。寫完該地址和數(shù)據(jù)后,內(nèi)置編程算法自動(dòng)啟動(dòng),進(jìn)行FLASH存儲(chǔ)器編程。編程算法完成后,進(jìn)入讀取數(shù)據(jù)狀態(tài)。編程時(shí)序如表1所示。?

?

?

??? 擦除命令:該命令有片擦除和扇區(qū)擦除兩種。兩種擦除命令基本相似,片擦除指令用得較多,這里僅介紹片擦除指令。片擦除命令是一個(gè)6總線周期的操作,也以兩個(gè)解鎖周期開始,接著一個(gè)建立周期,再接著兩個(gè)解鎖周期,最后是擦除周期。該擦除命令啟動(dòng)內(nèi)部擦除算法,自動(dòng)完成擦除操作。其時(shí)序如表2所示。?

?

?

??? 由于只有擦除指令能使“0”變?yōu)椤?”,而編程指令不能使“0”寫為“1”,所以用戶在進(jìn)行FLASH存儲(chǔ)器燒寫時(shí),應(yīng)先擦除,再進(jìn)行編程。?

1.3 FLASH存儲(chǔ)器操作的檢查機(jī)制?

??? 對(duì)采用在系統(tǒng)編程的FLASH存儲(chǔ)器,整個(gè)燒寫過程都由用戶控制,用戶必須了解FLASH存儲(chǔ)器的各狀態(tài)位,以便知道編程或擦除是否完成。?

??? FLASH內(nèi)部提供了幾個(gè)供用戶讀取的狀態(tài)位。其中常用的有:數(shù)據(jù)線的DQ2(跳變位)、 DQ5(超時(shí)標(biāo)志位)、DQ6(跳變位)、DQ7(數(shù)據(jù)查詢位)和管腳RY/BY#。?

??? 有三種方法可以判斷某種操作是否進(jìn)行完。一種是判斷管腳RY/BY#的狀態(tài)。在編程、擦除或擦除懸掛操作過程中,RY/BY#管腳為“0”;操作完成后變?yōu)椤?”。另一種是用DQ7和DQ5判斷。DQ7位在編程或擦除過程中輸出的是寫入該位數(shù)據(jù)的反碼,而當(dāng)操作完成時(shí),該位輸出變?yōu)閷懭朐撐坏臄?shù)據(jù),因此查詢此位可以判斷操作進(jìn)程。但還要讀取DQ5的狀態(tài),若為“1”,操作超時(shí),應(yīng)再讀一次DQ7的狀態(tài),若DQ7輸出仍不是寫入的數(shù)據(jù),則操作失敗,應(yīng)將FLASH復(fù)位。其流程如圖1所示。還有一種是檢測(cè)跳變位。在對(duì)FLASH存儲(chǔ)器進(jìn)行編程或擦除時(shí),對(duì)任何地址進(jìn)行連續(xù)的讀會(huì)引起DQ6不斷跳變,而一旦操作結(jié)束就停止跳變。其流程如圖2所示。

?

?

1.4 FLASH存儲(chǔ)器的操作程序?

??? 采用前面的命令字和操作進(jìn)程檢測(cè)方法,用戶就可以用DSP編程語言編寫FLASH存儲(chǔ)器操作程序了。下面給出擦除和編程子程序的部分代碼。?

/*Sample codes for erase and program*/?

cerase:?PUSH???DP?????????????????? ?

?????????PUSH?? R0???????????????????? ?

?????????....???/*擦除命令*/?

chkc: LDI *AR0,R0?

?????? NOP????? ?????? /*檢查擦除是否完成*/?

?????? NOP?

?????? XOR *AR0,R0?

?????? BNZ ??? chkc?

?????? POP??? ?R0?

?????? POP ??? DP?

?????? RETS?

sprg: PUSH ?? DP???????????????? ?

?????? PUSH??? R0?????????????????? ?

?????? ....???????? ?????? /*編程命令*/?

chkp: LDI *-AR2(1),R0?

?????? NOP?? ????????? /*檢查編程是否完成*/?

?????? NOP?

?????? XOR???? ??????? *-AR2(1),R0?

?????? BNZ???? chkp ?

???????POP???? R0?

?????? POP???? DP?

?????? RETS?

2 TMS320C3X系列DSP的上電引導(dǎo)功能?

??? 實(shí)際DSP電路中,調(diào)試后的用戶程序必須能夠脫離仿真器獨(dú)立運(yùn)行,這就涉及到如何將用戶程序代碼編程到FLASH存儲(chǔ)器中。用戶程序執(zhí)行有兩種方式:一種是上電后用戶程序直接在FLASH存儲(chǔ)器中運(yùn)行;另一種是上電后將用戶程序從FLASH存儲(chǔ)器引導(dǎo)到高速數(shù)據(jù)存儲(chǔ)器中運(yùn)行。由于第一種方式影響程序的運(yùn)行速度,現(xiàn)在大多數(shù)實(shí)際電路都采用第二種方法。下面以TI公司的TMS320C3X系列DSP為例,說明如何由仿真器最初生成的可執(zhí)行文件實(shí)現(xiàn)第二種方法的過程。?

2.1 MS320C3X的上電引導(dǎo)程序和引導(dǎo)表?

??? 引導(dǎo)程序(boot loader)是在一些DSP(如C3X,C4X系列)片內(nèi)固化的一個(gè)程序,它負(fù)責(zé)上電時(shí)初始化存儲(chǔ)器。換句話說,它將程序從非易失性存儲(chǔ)器(如EPROM或FLASH存儲(chǔ)器)中調(diào)入系統(tǒng)的存儲(chǔ)器中。?

??? 引導(dǎo)程序要調(diào)入的代碼稱為引導(dǎo)表(boot table)。引導(dǎo)表中除了包括源代碼之外還,包含一些附加信息。這些信息指導(dǎo)引導(dǎo)程序的具體執(zhí)行過程。一方面,存放引導(dǎo)表的介質(zhì)一般都是物理總線寬度小的存儲(chǔ)器(如8位,16位等),而DSP系統(tǒng)總線的寬度一般都是32位的(對(duì)C3X,C4X系列),因此就存在著代碼的拆分與組合問題,這就需要一些附加信息來“告訴”引導(dǎo)程序;另一方面,TI的DSP的可執(zhí)行文件是COFF格式的,它將程序代碼分為很多不同的段(如.text,.bss,.const等),這些段的大小和存儲(chǔ)地址都是不同的,因此也需要額外的信息來說明。因此可以說引導(dǎo)表是由程序代碼和一些附加信息組成的一種數(shù)據(jù)結(jié)構(gòu)。?

??? 每一種DSP,其引導(dǎo)表的數(shù)據(jù)結(jié)構(gòu)也是不同的,但其基本結(jié)構(gòu)差不多。具體來說引導(dǎo)表的格式主要由下面幾部分組成:首先是一個(gè)包含引導(dǎo)表數(shù)據(jù)寬度和其它數(shù)據(jù)總線控制寄存器值的文件頭;接著是COFF文件中各個(gè)段的數(shù)據(jù),其中每個(gè)段又都包含一個(gè)該段的文件頭來指示該段的代碼長(zhǎng)度及目標(biāo)地址;最后是一個(gè)結(jié)束段,表明程序代碼的結(jié)尾。?

2.2 如何產(chǎn)生引導(dǎo)表?

??? 由于COFF文件格式與引導(dǎo)表格式對(duì)用戶是透明的,因此用戶可以自己編程由COFF格式生成引導(dǎo)表。這無疑是一項(xiàng)很繁瑣的工作,幸好DSP公司一般都在它們的開發(fā)軟件中提供了一個(gè)轉(zhuǎn)換工具,如TI公司的HEX30工具。這樣,用戶需要做的只是提供一個(gè)命令文件,即可由轉(zhuǎn)換工具生成可以上電引導(dǎo)的引導(dǎo)表。?

??? 在生成引導(dǎo)表時(shí),應(yīng)特別注意幾個(gè)“字寬度”的概念。只有正確理解這幾個(gè)概念,才能生成正確的引導(dǎo)表。首先是目標(biāo)字寬度。它指COFF文件內(nèi)原始數(shù)據(jù)的寬度,是指處理器的操作碼長(zhǎng)度。對(duì)特定DSP,該長(zhǎng)度是固定的,不能改變。其次是數(shù)據(jù)寬度,可用-datawidth設(shè)定,它指在COFF文件中存有的某段數(shù)據(jù)的邏輯寬度。再次是存儲(chǔ)器寬度,可用-memorywidth設(shè)定,它指存儲(chǔ)器系統(tǒng)的物理寬度。最后是ROM寬度,用-romwidth設(shè)定。它指每塊ROM設(shè)備的物理寬度,同時(shí)也對(duì)應(yīng)HEX30工具輸出文件的寬度。下面的例子可以說明這幾個(gè)字寬度的概念。?

??? 例如,DSP為TMS320C32,用來存儲(chǔ)程序的FLASH存儲(chǔ)器是16位的,只用一塊FLASH。則命令文件可以按如下編寫:?

/*Command file for the hex utility*/?

??? prog.out?????????? ;COFF文件名?

??? -boot???????????? ;引導(dǎo)所有段的內(nèi)容?

??? -i??????????????? ;輸出文件的格式?

??? -memorywidth 16?

??? -bootorg 1000h?

??? ROMS?

??? {?

??? EPROM:? org=1000H, len=2000H,?

??? romwidth=16,files={prog.i0}?

??? }?

3 利用ISP對(duì)上電引導(dǎo)FLASH存儲(chǔ)器編程?

??? 上述的命令文件中有一個(gè)選項(xiàng)-i,這是指定輸出文件格式的選項(xiàng)。TI公司HEX工具可以支持多種格式,如ASCII-HEX、Intel、Motorola、TI-tagged、Tektronix等,這些文件都是文本格式的文件,都有固定的格式。以Intel格式為例,生成的文件的每行都有一9個(gè)字符的前綴,結(jié)尾有2個(gè)字符的檢驗(yàn)位。若用EPROM編程器,則此文件就是編程器的輸入文件,可以直接使用。但對(duì)前面所說的在系統(tǒng)編程,編程程序本身就是一段DSP程序,要想讓此程序識(shí)別生成的引導(dǎo)表,還需要對(duì)文件進(jìn)行轉(zhuǎn)換。?

??? 由于編程程序也是一段DSP程序代碼,最后生成的也是COFF格式,因此可以將引導(dǎo)表作為編程程序的一個(gè)初始化段,程序運(yùn)行時(shí)將該段的內(nèi)容寫到FLASH所在的空間即可。?

??? 剩下的問題就是如何將HEX工具生成的文件轉(zhuǎn)化為DSP程序能識(shí)別的文件格式。由前面的內(nèi)容可知,每種格式的文件都包含自己獨(dú)特的頭文件,因此可以編寫一段簡(jiǎn)單的C語言程序?qū)⑦@些與引導(dǎo)無關(guān)的“頭”去掉,分離出引導(dǎo)表,然后按特定格式將這部分內(nèi)容寫成一個(gè)數(shù)據(jù)文件。在編程程序中,為引導(dǎo)表建立一個(gè)段,將此數(shù)據(jù)文件嵌入即可。這樣,運(yùn)行編程程序就能將引導(dǎo)表內(nèi)容燒寫到指定的FLASH存儲(chǔ)器中。整個(gè)編程過程如圖3所示。?

?

?

??? 例如,最初的COFF文件為prog.out,C語言程序?qū)EX工具生成的prog.i0文件轉(zhuǎn)化為prog.dat,那么最后的燒寫程序類似下面所給出的格式。?

??? /*A sample FLASH programming routine*/?

??? ....?

??? code?? .sect ″.FLASH″?

??? .include prog.dat?

??? ....?

??? _main: ?

??? ....??????????? ??????????? /*初始化及擦除子程序*/?

??? LDI @CODE_PTR,AR3 ???? /*CODE_PTR的值是code*/?

??????? LDI code_len,AR4?????? /*要燒寫的代碼長(zhǎng)度*/?

??????? CALL FLASH_mprg???? /*調(diào)用編程子程序*/?

??? ....?

??? FLASH_mprg:?

??? ....?

??????? CALL sprg?? ??????? /*調(diào)用單個(gè)字編程子程序*/?

??????? BNZ FLASH_mprg?

??????? ....?

??????? RETS?

??? 前面各部分,結(jié)合TMS320C3X系列DSP的上電引導(dǎo)功能,介紹了利用在系統(tǒng)編程技術(shù)將用戶程序代碼編寫到FLASH存儲(chǔ)器中的方法,給出了相應(yīng)環(huán)節(jié)的程序流程圖和部分操作的程序示例。通過實(shí)際TMS320C32的DSP電路調(diào)試實(shí)驗(yàn),證明本文的方法能夠?qū)崿F(xiàn)FLASH存儲(chǔ)器的在系統(tǒng)編程和DSP系統(tǒng)上電后的用戶程序自動(dòng)引導(dǎo)。?

參考文獻(xiàn)?

1 TMS320C3X User’ Guide. Texas Instruments,1997?

2 TMS320C3X/4X Assembly Language Tools User’s Guide.Texas Instruments,1997?

3 Markus Levy. 閃速存儲(chǔ)器設(shè)計(jì)工具概覽. 電子設(shè)計(jì)技術(shù)EDN China, 1996(12):42~45?

4 Antony Watts. 正確選擇非易失性存儲(chǔ)器.電子設(shè)計(jì)技術(shù)EDN China,1996(6):38~43

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請(qǐng)及時(shí)通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。