www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

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

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

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

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

1 Am29LV200B Flash存儲器

1.1 Flash存儲器簡介

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

1.2 Flash存儲器的操作命令

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

  ① 編程命令。該命令向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對應(yīng)物理地址就為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是實(shí)現(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é)束后就進(jìn)入讀數(shù)據(jù)狀態(tài),寫入要讀取的地址即可讀出該地址的數(shù)據(jù)。

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

_RESETFlash .macro

_WRITECOMMAND #8001H,#0F0H

;向8001H寫入0F0H使Flash復(fù)位

RPT #12

NOP

.endm

1.3 Flash的操作檢測

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

_JUDGESUCCESS?

POPM AR1

.endm

2 C5410 的自舉引導(dǎo)

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

 ?。?)自舉引導(dǎo)

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

  (2)并行自舉引導(dǎo)

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

(3)建立自舉表

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

3 C5410 燒寫Flash和并行自舉引導(dǎo)

  下面通過一個Flash燒寫實(shí)例,介紹怎樣將用戶程序燒寫進(jìn)Flash,以及怎樣手動建立自舉表,并且脫離仿真器以并行自舉引導(dǎo)方式使用戶程序獨(dú)立運(yùn)行。被燒寫和燒寫程序如下:

  .title "FLASH"

  .mmregs

SWCR .set 002BH

TEMP .set 0060H

  .data

  .sect ".BOOT"

  .label BOOTTABLE ; 自舉表開始

  .word 10AAH ; 16位自舉標(biāo)記

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

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

  .word 0000h ; 程序入口XPC

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

  .word LOADEND - LOADSTART

  ; 程序塊長度(0116H)

  .word 0000h ; 存放目標(biāo)XPC

  .word 0100h ; 存放目標(biāo)地址

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

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

MAIN_START: ;被燒寫的主程序

  STM #0F7h,SP

  STM #012Ch,PMST

  ;IPTR=01(中斷向量指針為100,指向目標(biāo)地址),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復(fù)位

  _ERASEFlash ;擦除Flash

WRIFlashSTART: ;開始編程Flash

  SSBX SXM

  RSBX OVM

  _RESETFLASH ; Flash復(fù)位

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

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

 ??;表首地址)

  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

 ?。坏刂?/P>

  STM FINDTABLE,AR5

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

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

ENDD: NOP

  B ENDD

  .end

  被燒寫的主程序是從MAIN_START開始,一直到LOADEND。程序的主要功能是不斷改變XF引腳的狀態(tài)。LOADSTART是中斷向量文件(vector.asm)的開始,在中斷復(fù)位(RESET)處放入一條跳轉(zhuǎn)到MAIN_START指令(BD MAIN_START)。ERASE_WRITE_FLASH是燒寫程序的開始,只要程序指針( PC)指向ERASE_WRITE_FLASH,開始運(yùn)行就可以完成對Flash的燒寫操作。從自舉表首地址BOOTTABLE (0F8H)到LOADEND(0216H)存放的數(shù)據(jù)就是要寫入Flash的內(nèi)容,從LOADSTART到LOADEND的數(shù)據(jù)是DSP自舉程序從Flash搬運(yùn)到片內(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位自舉標(biāo)記
8001H 7FFF SWWSR
8002H F000 BSCR
8003H 0000 程序入口XPC
8004H 0200 程序入口地址
8005H 0123 程序段長度
8006H 0000 存放目標(biāo)XPC
8007H 0100 存放目標(biāo)地址
8008H F273 程序代碼1
8009H 0200 程序代碼2
…… …… ……
811DH FC00 程序代碼
811EH 0000 結(jié)束
…… …… ……
FFFFH 8000 自舉表存放首地址

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

結(jié) 語

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

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

中國北京(2025年9月10日)—— 業(yè)界領(lǐng)先的半導(dǎo)體器件供應(yīng)商兆易創(chuàng)新GigaDevice(股票代碼 603986)亮相于深圳國際會展中心舉辦的第26屆中國國際光電博覽會(展位號:12C12),全面展示GD25 SPI...

關(guān)鍵字: 光通信 MCU Flash

在嵌入式系統(tǒng)中,F(xiàn)lash存儲器因其非易失性、高密度和低成本特性,成為代碼存儲和關(guān)鍵數(shù)據(jù)保存的核心組件。然而,MCU驅(qū)動Flash讀寫時,開發(fā)者常因?qū)τ布匦岳斫獠蛔慊虿僮髁鞒淌韬觯萑胄阅芟陆怠?shù)據(jù)損壞甚至硬件損壞的陷...

關(guān)鍵字: MCU驅(qū)動 Flash

深圳2025年4月24日 /美通社/ -- 4月23日,2025上海國際車展盛大啟幕,全球汽車產(chǎn)業(yè)的目光聚焦于這場科技與創(chuàng)新的盛宴。在眾多展示亮點(diǎn)中,汽車AI+應(yīng)用無疑是最大的熱點(diǎn)之一,“駕控超級大腦”技術(shù)概念、車機(jī)交互...

關(guān)鍵字: GB EMMC Flash PS

在自動駕駛、機(jī)器人與工業(yè)檢測領(lǐng)域,激光雷達(dá)作為環(huán)境感知的核心傳感器,其技術(shù)路線正從機(jī)械式向固態(tài)化演進(jìn)。MEMS、OPA與Flash作為固態(tài)激光雷達(dá)的三大主流架構(gòu),分別通過微機(jī)電系統(tǒng)、光學(xué)相控陣與泛光面陣技術(shù)實(shí)現(xiàn)掃描與探測...

關(guān)鍵字: MEMS OPA Flash

在嵌入式系統(tǒng)開發(fā)中,外部存儲介質(zhì)的選擇和管理至關(guān)重要。SPI Flash以其高容量、低功耗、高速率等特點(diǎn),成為眾多嵌入式設(shè)備的首選存儲方案。然而,如何高效管理SPI Flash存儲,避免數(shù)據(jù)丟失、提高讀寫性能,是開發(fā)者必...

關(guān)鍵字: 嵌入式SPI Flash LittleFS

STM32單片機(jī)作為一種高性能、低功耗的嵌入式微控制器,廣泛應(yīng)用于各種電子設(shè)備中。在實(shí)際應(yīng)用中,為了擴(kuò)展存儲空間或?qū)崿F(xiàn)數(shù)據(jù)的持久化存儲,經(jīng)常需要使用外部FLASH存儲器。本文將詳細(xì)介紹STM32單片機(jī)如何讀寫外部FLAS...

關(guān)鍵字: STM32 Flash

在嵌入式系統(tǒng)和存儲設(shè)備領(lǐng)域,F(xiàn)lash和EEPROM(電可擦可編程只讀存儲器)因其非易失性存儲特性而被廣泛應(yīng)用。這些存儲設(shè)備能夠在斷電后保持?jǐn)?shù)據(jù),對于需要長期保存配置參數(shù)、程序代碼或用戶數(shù)據(jù)的應(yīng)用來說至關(guān)重要。然而,關(guān)于...

關(guān)鍵字: Flash EEPROM
關(guān)閉