1. gzyueqian
      13424082685
      首頁 > 新聞中心 > > 正文

      TMS320C5410燒寫Flash實(shí)現(xiàn)并行自舉引導(dǎo)

      更新時間: 2007-01-09 13:55:43來源: 粵嵌教育瀏覽量:1088

        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)?quot;0",而擦除命令可使"0"變?yōu)?quot;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)?quot;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)功能。

        (1)自舉引導(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

        ;地址

        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)功能。

      免費(fèi)預(yù)約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 免费在线观看日本A∨ | 亚洲欧美日韩性爱一区精品 | 亚洲欧美日韩一区二区三区在线 | 午夜精品在线直播的视频网站 | 日本韩国亚洲综合日韩欧美国产 | 三个少妇的按摩中文字幕 |