當前位置:首頁 > 電源 > 數(shù)字電源
[導讀]介紹在TMS320C5410環(huán)境下對Am29LV200B Flash存儲器進行程序燒寫,并且實現(xiàn)了TMS320C5410上電后用戶程序并行自舉引導。

摘要:介紹在TMS320C5410環(huán)境下對Am29LV200B Flash存儲器進行程序燒寫,并且實現(xiàn)了TMS320C5410上電后用戶程序并行自舉引導。

    關(guān)鍵詞:Am29LV200B Flash DSP 并行自舉引導 自舉表

  Flash是一種可在線進行電擦寫,掉電后信息不丟失的存儲器。它具有低功耗、大容量、擦寫速度快等特點,并且內(nèi)部嵌入算法完成對芯片的操作,因而在數(shù)字信號處理系統(tǒng)中得到了廣泛的應用。本文通過一個完整的實例,介紹Am29LV200B Flash存儲器的燒寫方法,實現(xiàn)TMS320C5410(以下簡稱C5410)上電后用戶程序的并行自舉引導。

1 Am29LV200B Flash存儲器

1.1 Flash存儲器簡介

  Am29LV200B是AMD公司生產(chǎn)的Flash存儲器,其主要特點有:3 V單電源供電,可使內(nèi)部產(chǎn)生高電壓進行編程和擦除操作;支持JEDEC單電源Flash存儲器標準;只需向其命令寄存器寫入標準的微處理器指令,具體編程、擦除操作由內(nèi)部嵌入的算法實現(xiàn),并且可以通過查詢特定的引腳或數(shù)據(jù)線監(jiān)控操作是否完成;可以對任一扇區(qū)進行讀、寫或擦除操作,而不影響其它部分的數(shù)據(jù)。本文中128K×16位Am29LV200B Flash 映射為C5410的片外數(shù)據(jù)存儲空間,地址為:0x8000~0xFFFF,數(shù)據(jù)總線16位,用于16位方式的并行引導裝載。128K的Flash ROM用32K地址分四頁進行訪問,上電加載程序時使用Flash ROM的第3頁。

1.2 Flash存儲器的操作命令

  向Flash存儲器的特定寄存器寫入地址和數(shù)據(jù)命令,就可對Flash存儲器編程,但要按一定的順序操作,否則就會導致Flash存儲器復位。由于編程指令不能使"0"寫為"1",只能使"1"變?yōu)?0",而擦除命令可使"0"變?yōu)?1",所以正確順序是先擦除,后編程。下面就介紹幾個常用的操作命令:編程命令、擦除命令、讀數(shù)據(jù)命令、復位命令。

 ?、?編程命令。該命令向Flash的指定地址中寫入數(shù)據(jù),需要四個總線周期,前兩個是解鎖周期,第三個是建立編程命令,最后一個周期完成向編程地址中寫入編程數(shù)據(jù),如表1所列。

表1 編程命令

周期 1(解鎖) 2(解鎖) 3(建立) 4(編程)
地址 0x555 0x2AA 0x555 pa(編程地址)
數(shù)據(jù) 0xAA 0x55 0xA0 pa(編程數(shù)據(jù))

  由于向每個編程地址寫入數(shù)據(jù)都需要四個周期,所以在循環(huán)寫Flash時使用宏比較簡單。Flash ROM的首地址為0x8000,故偏移地址0x555對應物理地址就為0x8555。編程程序如下:

_WRITECOMMAND .macro pa,pd ;單一周期編程的寫命

;令宏,pa是編程地址,pd是編程數(shù)據(jù)

PSHM AR1

STM pa,AR1 ;AR1指向編程地址

LD pd,A

STL A,*AR1 ;把編程數(shù)據(jù)放入AR1的編程地址中

RPT #12

NOP

POPM AR1

.endm

_WRITEFlash .macro par,pdr ;編程宏,par是編程地址寄存

;器,pdr是存放編程數(shù)據(jù)的寄存器

_WRITECOMMAND #8555H,#0AAH ; 周期1(解鎖)

_WRITECOMMAND #82AAH,#055H ; 周期2(解鎖)

_WRITECOMMAND #8555H, #0A0H ; 周期3(建立)

LD pdr, A ; 周期4(編程)

STL A, par ; 把pdr寄存器中數(shù)據(jù)放入par

;寄存器的地址中

RPT #12

NOP

_JUDGE par, pdr ;檢測編程是否正確,見Flash

;的操作檢測

.endm

_WRITECOMMAND是實現(xiàn)一個周期編程的寫命令宏,而_WRITEFlash是完成對指定地址編程的四個完整周期。

表2 擦除命令

周期 1(解鎖) 2(解鎖) 3(建立) 4(解鎖) 5(解鎖) 6(片擦除) 6(扇區(qū)擦除)
地址 0x555 0x2AA 0x555 0x555 0x2AA 0x555 SA(扇區(qū)地址)
數(shù)據(jù) 0xAA 0x55 0x80 0xAA 0x55 0x10 0x30

 ?、?擦除命令。該命令有片擦除和扇區(qū)擦除兩種,都需要6個總線周期,前兩個解鎖周期,第三個建立周期,四、五兩個解鎖周期,最后是片擦除或扇區(qū)擦除周期,如表2所列。一旦執(zhí)行編程或擦除命令后,就啟動Flash的內(nèi)部編程或擦除算法,自動完成編程或擦除操作。擦除程序如下:

_ERASEFlash .macro ;擦除宏

_WRITECOMMAND #8555H,#0AAH ; 周期1(解鎖)

_WRITECOMMAND #82AAH,#055H ; 周期2(解鎖)

_WRITECOMMAND #8555H,#080H ; 周期3(建立)

_WRITECOMMAND #8555H,#0AAH ; 周期4(解鎖)

_WRITECOMMAND #82AAH,#055H ; 周期5(解鎖)

_WRITECOMMAND #8555H,#010H ; 周期6(片擦除)

STM #8555H,AR3

LD #010H ,A

STL A,*AR5

_JUDGE *AR3,*AR5 ;檢測是擦除結(jié)束,見Flash的

;操作檢測

.endm

 ?、?讀數(shù)據(jù)命令。上電或內(nèi)部編程、擦除操作結(jié)束后就進入讀數(shù)據(jù)狀態(tài),寫入要讀取的地址即可讀出該地址的數(shù)據(jù)。

 ?、?復位命令。它使存儲器復位,進入讀數(shù)據(jù)狀態(tài),向任何一個地址寫入數(shù)據(jù)0xF0就能使Flash存儲器復位。在進行編程、擦除之前,都應先復位,在編程或擦除等正常操作中出現(xiàn)錯誤時也要復位。復位程序如下:

_RESETFlash .macro

_WRITECOMMAND #8001H,#0F0H

;向8001H寫入0F0H使Flash復位

RPT #12

NOP

.endm

1.3 Flash的操作檢測

  Flash內(nèi)部的編程或擦除算法可自動完成編程或擦除操作,但我們必須了解其內(nèi)部的操作檢測機制,以便知道操作是否完成或正確。常用檢測的狀態(tài)位有:跳變位(DQ6)、超時標志位(DQ5)、數(shù)據(jù)查詢位(DQ7)和Ready/Busy引腳(RY/)。檢測的方法有三種。第一種是判斷引腳RY/的狀態(tài),在編程、擦除或擦除掛起操作過程中,RY/引腳一直為"0",操作完成后變?yōu)?1"。 第二種是檢測跳變位DQ6,在編程或擦除時對任何地址進行連續(xù)的讀均引起DQ6連續(xù)跳變,直至操作結(jié)束才停止跳變。最后一種是使用數(shù)據(jù)線的DQ7、DQ5:DQ7位在編程或擦除過程中輸出的數(shù)是寫入該位數(shù)據(jù)的反碼,當操作完成時輸出才變?yōu)閷懭朐撐坏臄?shù)據(jù);DQ5的狀態(tài)為"1"時表示操作超時,此時應再讀一次DQ7的狀態(tài),若DQ7輸出仍不是寫入的數(shù)據(jù),則操作失敗,復位Flash,其流程如圖1所示。

  檢測程序如下:

_JUDGE .macro par,pdr;檢測宏程序。par是編程地址寄存

;器,pdr是存放編程數(shù)據(jù)的寄存器

_JUDGEBEGIN?: PSHM AR1

LD pdr,B ;獲取寫入的數(shù)據(jù)

AND #00FFh,B ;取被寫入數(shù)據(jù)的DQ7~DQ0

LD par,A ;讀被燒寫地址的數(shù)據(jù)

AND #00FFh,A ;取DQ7~DQ0

STL A ,TEMP ;保存

LD A,-7,A ;讀DQ7狀態(tài)

XOR B,-7,A ;是否是反碼?

BC _JUDGESUCCESS?,AEQ

; DQ7不是反碼而是寫入數(shù)據(jù)表示操作成功

BITF TEMP,#20h

BC _JUDGEBEGIN?,ntc

;DQ5=1表示操作超時

LD par,A ;再讀被燒寫地址的數(shù)據(jù)

AND #00FFh,A

LD A,-7,A

XOR B,-7,A

BC _JUDGESUCCESS?,AEQ

; DQ7不是寫入數(shù)據(jù),表示操作失敗

_JUDGEERRO?

_RESETFlash ;復位Flash

_JUDGESUCCESS?

POPM AR1

.endm

2 C5410 的自舉引導

  脫離仿真器獨立運行程序一般有兩種方式:一種是上電后用戶程序直接在Flash存儲器中運行,這種運行速度比較慢;另一種是上電或復位后將用戶程序從Flash存儲器引導到高速數(shù)據(jù)存儲器中運行,此方法最常用,可以較低的成本實現(xiàn)高速的運行。為了實現(xiàn)這個過程就必須運用DSP自舉引導功能。

 ?。?)自舉引導

  C5410上電復位后,首先檢查MP/MC狀態(tài):如果為高電平,說明DSP處于微處理器工作方式,即從外部程序存儲器0FF80H地址開始執(zhí)行用戶程序;若為低電平,說明DSP被設(shè)置為微計算機工作方式,從片內(nèi)ROM的0FF80H地址開始執(zhí)行程序。0FF80H地址存放的是中斷向量表,它實為一條分支轉(zhuǎn)移指令(BD 0F800H),使程序跳轉(zhuǎn)至0F800H執(zhí)行自舉引導程序(Bootloader)。Bootloader是固化在DSP芯片內(nèi)ROM中的一段程序代碼,其功能是將用戶程序從外部加載至片內(nèi)RAM或擴展的RAM中,使其高速運行。在搬運程序之前,Bootloader首先完成初始化工作:使中斷無效,內(nèi)部RAM映射到程序/數(shù)據(jù)區(qū)(OVLY=1),對程序和數(shù)據(jù)區(qū)均設(shè)置7個等待狀態(tài)等。C5410有以下幾種自舉引導方式:主機接口HPI、并行口(8/16位)、標準串行口(MCBSP0是16位引導模式,MCBSP2是8位引導模式)以及I/O口(8/16位)自舉引導方式。

 ?。?)并行自舉引導

  這種方式是比較常用的一種,外部存儲器的字寬為8位或16位。在自舉引導時,通過外部并行接口總線將這些代碼從數(shù)據(jù)存儲空間傳送到程序存儲空間,而且可以重新設(shè)置SWWSR及BSCR寄存器的內(nèi)容。并行自舉引導方式首先從地址為0FFFFH的I/O口讀取自舉表首地址的內(nèi)容,如果此內(nèi)容不符合8位或16位的引導方式,就從地址為0FFFFH的數(shù)據(jù)存儲器讀取,進行8位或16位并行自舉引導。所以,在燒寫Flash數(shù)據(jù)的同時,也要在0FFFFH燒入自舉表的首地址。引導流程如圖2所示。

(3)建立自舉表

  自舉表內(nèi)容不僅包括欲加載的各段代碼,而且包括各段代碼長度、各代碼段存放的目標地址、程序入口地址等信息。若要完成自舉引導功能,必須建立正確的自舉表。自舉表可以由hex500格式轉(zhuǎn)換器自動生成;也可以手動建立自舉表,就是把被燒寫的程序直接放在燒寫程序中,根據(jù)被燒寫程序的相關(guān)信息手動建立自舉表。

3 C5410 燒寫Flash和并行自舉引導

  下面通過一個Flash燒寫實例,介紹怎樣將用戶程序燒寫進Flash,以及怎樣手動建立自舉表,并且脫離仿真器以并行自舉引導方式使用戶程序獨立運行。被燒寫和燒寫程序如下:

  .title "FLASH"

  .mmregs

SWCR .set 002BH

TEMP .set 0060H

  .data

  .sect ".BOOT"

  .label BOOTTABLE ; 自舉表開始

  .word 10AAH ; 16位自舉標記

  .word 7FFFH ; 7個等待周期(SWWSR)

  .word 0F000H ; 塊轉(zhuǎn)換寄存器(BSCR)

  .word 0000h ; 程序入口XPC

  .word 0200h ; 程序入口地址(MAIN_START)

  .word LOADEND - LOADSTART

  ; 程序塊長度(0116H)

  .word 0000h ; 存放目標XPC

  .word 0100h ; 存放目標地址

LOADSTART: ;中斷向量表開始地址

  .copy "vector.asm";復位處跳轉(zhuǎn)MAIN_START

MAIN_START: ;被燒寫的主程序

  STM #0F7h,SP

  STM #012Ch,PMST

  ;IPTR=01(中斷向量指針為100,指向目標地址),MP/MC=0,OVLY=1,AVIS=0,DROM=1, CLKOFF=1

LOOPF:RSBX XF ;XF置低

  CALL DELAY ;延時

  SSBX XF ;XF置高

  CALL DELAY

  B LOOPF

DELAY:PSHM AR6

  STM #0090H,AR6

DELAY_LOOP:

  RPT #0FF0h

  NOP

  BANZ DELAY_LOOP,*AR6-

  POPM AR6

  RET

LOADEND ; 被燒寫的程序結(jié)束

  .space 20h

  .mmregs

  .label FINDTABLE

  .word 8000h

  .text

ERASE_WRITE_Flash: ;燒寫程序開始

  STM #0FFA0H,PMST

  STM #07FFFH,SWWSR

  STM #0FFFFH,SWCR

  _RESETFlash ; Flash復位

  _ERASEFlash ;擦除Flash

WRIFlashSTART: ;開始編程Flash

  SSBX SXM

  RSBX OVM

  _RESETFLASH ; Flash復位

  STM #8000H,AR0 ;Flash起始地址8000H

  STM BOOTTABLE,AR5 ;被燒寫的源地址(自舉

 ?。槐硎椎刂罚?/P>

  STM #( LOADEND- BOOTTABLE),AR4

  ; 寫入011E個字

WRI_RPT

  _WRITEFlash *AR0,*AR5 ;調(diào)入編程宏

  LD *AR0+,A

  LD *AR5+,A ;完成AR0和AR5地址自動加1

  BANZ WRI_RPT,*AR4-

  STM #0FFFFH,AR0; AR0指向數(shù)據(jù)空間的FFFF

 ??;地址

  STM FINDTABLE,AR5

  _WRITEFlash *AR0,*AR5 ; 向數(shù)據(jù)空間的FFFF

;地址寫入自舉表的首地址8000H

ENDD: NOP

  B ENDD

  .end

  被燒寫的主程序是從MAIN_START開始,一直到LOADEND。程序的主要功能是不斷改變XF引腳的狀態(tài)。LOADSTART是中斷向量文件(vector.asm)的開始,在中斷復位(RESET)處放入一條跳轉(zhuǎn)到MAIN_START指令(BD MAIN_START)。ERASE_WRITE_FLASH是燒寫程序的開始,只要程序指針( PC)指向ERASE_WRITE_FLASH,開始運行就可以完成對Flash的燒寫操作。從自舉表首地址BOOTTABLE (0F8H)到LOADEND(0216H)存放的數(shù)據(jù)就是要寫入Flash的內(nèi)容,從LOADSTART到LOADEND的數(shù)據(jù)是DSP自舉程序從Flash搬運到片內(nèi)RAM的程序,具體如下:

00F8H: BOOTTABLE ; 自舉表開始

0100H: LOADSTART ;中斷向量表首地址

0100H: RESET :BD MAIN_START

... ;中斷向量表的內(nèi)容

0178H: RESERVED

0200H: MAIN_START

... ;主程序

0216H: LOADEND

  被燒寫的程序只需一個段,根據(jù)以上信息就可以完成自舉表的內(nèi)容,如表3所列。

表1 自舉表

數(shù)據(jù)區(qū)地址 內(nèi)   容 含    義
8000H 10AA 16位自舉標記
8001H 7FFF SWWSR
8002H F000 BSCR
8003H 0000 程序入口XPC
8004H 0200 程序入口地址
8005H 0123 程序段長度
8006H 0000 存放目標XPC
8007H 0100 存放目標地址
8008H F273 程序代碼1
8009H 0200 程序代碼2
…… …… ……
811DH FC00 程序代碼
811EH 0000 結(jié)束
…… …… ……
FFFFH 8000 自舉表存放首地址

  整個并行自舉引導過程為:C5410上電復位后,判斷MP/MC=0 處于微計算機工作方式,從片內(nèi)ROM的0FF80H處執(zhí)行中斷向量表的分支轉(zhuǎn)移指令(BD 0F800H),使程序跳轉(zhuǎn)至0F800H處執(zhí)行自舉引導程序。自舉引導程序完成初始化后,讀取數(shù)據(jù)空間的0FFFFH地址的內(nèi)容,找到自舉表首地址8000H,從8000H處開始讀取內(nèi)容。首先,是16位自舉標記(10AA)。然后分別是寄存器SWWSR及BSCR的內(nèi)容,程序入口地址、代碼段長度、存放代碼段的目標地址等信息。最后,根據(jù)這些信息把Flash的8008H到811EH的程序搬運到片內(nèi)RAM的100H開始的地址中,跳轉(zhuǎn)至片內(nèi)RAM 100H、即PC為100H、XPC為0,開始執(zhí)行用戶程序,完成用戶程序的并行自舉過程。

結(jié) 語

  把程序燒寫入Flash后,復位C5410,使其處于微計算機工作方式;使用示波器測試XF引腳,觀察程序運行正確與否。通過上述方法可完成C5410對Am29LV200B Flash 的燒寫,很好地實現(xiàn)了C5410上電后的用戶程序自舉引導功能。

本站聲明: 本文章由作者或相關(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)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

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

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

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

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

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

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

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學會聯(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ù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

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