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

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

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

??? 摘? 要: FLASH存儲器的在系統(tǒng)編程技術及其基本命令,并結合TMS320C3X系列DSP的上電系統(tǒng)自動引導功能,介紹了利用該技術將用戶程序代碼燒寫到FLASH存儲器中的方法。該方法能夠實現DSP系統(tǒng)上電后的用戶程序自動引導。?

??? 關鍵詞: FLASH存儲器? DSP? 在系統(tǒng)編程? 上電引導

?

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

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

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

1.1 AMF400B FLASH存儲器簡介?

??? AMF400B 是AMD公司生產的FLASH存儲器,這種FLASH存儲器編程簡單,下面以此為例對FLASH存儲器的編程進行介紹。?

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

1.2 編程命令?

??? 雖然用戶僅需向FLASH存儲器的特定寄存器寫入地址和數據命令,就可對FLASH存儲器編程,但是如果寫入的地址和數據錯誤或寫入的順序不正確,就會導致FLASH存儲器復位,。下面介紹幾個最常用的編程命令,。?

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

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

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

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

?

?

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

?

?

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

1.3 FLASH存儲器操作的檢查機制?

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

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

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

?

?

1.4 FLASH存儲器的操作程序?

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

/*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的上電引導功能?

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

2.1 MS320C3X的上電引導程序和引導表?

??? 引導程序(boot loader)是在一些DSP(如C3X,C4X系列)片內固化的一個程序,它負責上電時初始化存儲器,。換句話說,它將程序從非易失性存儲器(如EPROM或FLASH存儲器)中調入系統(tǒng)的存儲器中,。?

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

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

2.2 如何產生引導表?

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

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

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

/*Command file for the hex utility*/?

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

??? -boot???????????? ;引導所有段的內容?

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

??? -memorywidth 16?

??? -bootorg 1000h?

??? ROMS?

??? {?

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

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

??? }?

3 利用ISP對上電引導FLASH存儲器編程?

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

??? 由于編程程序也是一段DSP程序代碼,最后生成的也是COFF格式,因此可以將引導表作為編程程序的一個初始化段,程序運行時將該段的內容寫到FLASH所在的空間即可。?

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

?

?

??? 例如,最初的COFF文件為prog.out,C語言程序將HEX工具生成的prog.i0文件轉化為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?????? /*要燒寫的代碼長度*/?

??????? CALL FLASH_mprg???? /*調用編程子程序*/?

??? ....?

??? FLASH_mprg:?

??? ....?

??????? CALL sprg?? ??????? /*調用單個字編程子程序*/?

??????? BNZ FLASH_mprg?

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

??????? RETS?

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

參考文獻?

1 TMS320C3X User’ Guide. Texas Instruments,1997?

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

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

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

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