《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計應(yīng)用 > 一種基于CPLD譯碼的DSP外部Flash燒寫方法
一種基于CPLD譯碼的DSP外部Flash燒寫方法
張芝賢1,邱委華1,朱慶賢2,王
摘要: 以實際的圖像監(jiān)控系統(tǒng)為背景,介紹了對S29AL008D Flash存儲器進行操作的指令格式和控制方法。通過CPLD實現(xiàn)DSP和Flash存儲器之間的硬件連接,給出了部分VHDL源程序。利用TMS320C5509A DSP通過CPLD快速譯碼實現(xiàn)Flash燒寫具有接口簡單、通用性強的優(yōu)點,在實踐中證明了方法的有效性。
關(guān)鍵詞: DSP CPLD VHDL TMS320C5509A
Abstract:
Key words :

  摘 要: 以實際的圖像監(jiān)控系統(tǒng)為背景,介紹了對S29AL008D Flash存儲器進行操作的指令格式和控制方法。通過CPLD實現(xiàn)DSP和Flash存儲器之間的硬件連接,給出了部分VHDL源程序。利用TMS320C5509A DSP通過CPLD快速譯碼實現(xiàn)Flash燒寫具有接口簡單、通用性強的優(yōu)點,在實踐中證明了方法的有效性。
    關(guān)鍵詞: DSP;S29AL008D;CPLD譯碼;Flash燒寫

 

   數(shù)字信號處理器DSP因其運算精度高,實時性強等特點,在通信、工業(yè)控制和消費類電子等領(lǐng)域得到了廣泛應(yīng)用,成為進行數(shù)字信號處理的首選器件。在圖像監(jiān)控系統(tǒng)中,往往要對大量的數(shù)據(jù)和應(yīng)用程序進行處理和非易失性存儲。采用Flash存儲器對這些大量數(shù)據(jù)和應(yīng)用程序進行存儲是一種性價比較高的選擇。本文設(shè)計的以TI公司DSP芯片TMS320VC5509A(以下簡稱VC5509A)為主處理器的圖像監(jiān)控系統(tǒng)中,使用了AMD公司S29AL008D Flash存儲器作為數(shù)據(jù)和應(yīng)用程序存儲芯片。使用VC5509A對S29AL008D進行操作,在硬件接口設(shè)計中采用CPLD進行譯碼和時序控制。
1 VC5509A及其外部存儲空間
    TMS320VC5509A是TI公司的一款16位高速低功耗定點DSP芯片,主要應(yīng)用于對音頻、靜態(tài)圖像的數(shù)字信號處理,是設(shè)計便攜設(shè)備的較佳解決方案。該DSP芯片在核心電壓為1.35 V時最大工作頻率為144 MHz;地址線為24位,對地址的尋址范圍為16 M×8 bit或8 M×16 bit。VC5509A采用統(tǒng)一的編址方式,即存儲空間地址沒有重疊但是尋址方式卻有2種不同的方式:字節(jié)尋址和字尋址[1]。當DSP中的CPU訪問VC5509A程序存儲空間時,通過外部存儲器接口(EMIF)對外部存儲空間進行管理。外部存儲空間被分成CE0~CE3 4個空間,分別由EMIF的CE0#~CE3#引腳管理,外部存儲空間劃分如圖1所示[2]。CEn#(n=0~3)與外設(shè)的片選端連接。

 


2 硬件電路設(shè)計
2.1 VC5509A與Flash的硬件連接
    使用PGE封裝的VC5509A對外只提供14條地址線引腳,因此只能尋址8 K×16 bit的空間范圍[3],要對S29AL008D的512 K×16 bit存儲空間尋址需19條地址線。解決辦法是用CPLD實現(xiàn)鎖存譯碼使D[5:0]具有數(shù)據(jù)/地址復用功能,為S29AL008D Flash存儲器提供高6位地址[4]。VC5509A和CPLD與S29AL008D的硬件接口電路如圖2所示[5]。通過CPLD的快速譯碼功能在CE2空間模擬1個Flash高位地址控制寄存器(換頁控制寄存器)FPCR,上電復位后通過寫FPCR控制FLASH的高位地址來實現(xiàn)換頁功能。此處用VHDL對XC9536XL進行編程將FPCR映射到0x400000,由于篇幅限制僅給出如下部分核心源程序:
    begain
    fce<=ce1;
    foe<=aoe;
    fwe<=awe;
    addr<=a3&a2&a1;
    datain<=d5&d4&d3&d2&d1&d0;
    facs<='1' when ce2='0' and addr='000'   
        else'0';
    FAR:process(facs,awe,reset)
    begain
    if reset='0'  then
       fa<='000000';
    else if reset='1' then
if awe'event and awe='1' then
       if facs='1' then
    fa<=datain(5 downto 0);
            end if;
         end if;
      end if;  
    end process;
    dataout<=fa when aoe='0' and facs='1'
    else 'ZZZZZZ';
    ……


2.2 VC5509ADSP相關(guān)寄存器的初始化
    在DSP對S29AL008D 進行讀寫訪問之前,要對DSP內(nèi)相關(guān)寄存器進行正確的設(shè)置。此系統(tǒng)的初始化設(shè)置如下[6-7]:
    ioport unsigned int *ebsr=(unsigned int *) 0x6c00;
    ioport unsigned int *egcr=(unsigned int *) 0x800;
    ioport unsigned int *ce11=(unsigned int *) 0x806;
    ioport unsigned int *ce12=(unsigned int *) 0x807;
    ioport unsigned int *ce13=(unsigned int *) 0x808;
    *ebsr=0x01;   //外部總線選擇寄存器選定完全EMIF模式
    *egcr=0x0a10;    //關(guān)閉ARDY控制
    在CPU一半工作頻率下,設(shè)置CE1
    *ce11=0x162a     //設(shè)置存儲器模式為異步16位,讀操作的setup、strobe、hold與寫操作的相同
    *ce12=0x162a; //寫操作的setup、strobe、hold
    *ce13=0;
2.3 Flash存儲器的操作
    對S29AL008D的讀寫過程必須嚴格按照S29AL008D提供的命令時序來完成。表1給出了S29AL008D對數(shù)據(jù)字進行復位、擦除、讀、寫的命令時序[7]。

           


    Flash操作寫子函數(shù)C程序如下:
    # define flash_ba 0x200000
    //ptr是FLASH存儲器映射在整個DSP系統(tǒng)地址空間中的基地址
    # define FAR
    unsigned int PA,PD;
    void write_se(unsigned int se_addr,unsigned int se_data)
    {
      unsigned int *flash_adr,*FAR=(unsignedint*)
         0x400000;
     flash_adr=(unsigned int * )
         (flash_ba+se_addr);
     //se_addr由FAR和A[13:1]來決定
        *flash_adr=se_data;
    }
    對Flash進行寫操作前必須先擦除片內(nèi)原有的數(shù)據(jù)。Flash的整片字擦除操作時序C語言實現(xiàn)如下:
    void Erase-Chip()
    {
       void write_se (0x555,0xAA);
       void write_se 0x2AA,0x55);
       void write_se 0x555,0x80);
       void write_se 0x555,0Xaa);
       void write_se 0x2AA,0x55);
       void write_se 0x555,0x10);
    }
    Flash要對寫入的數(shù)據(jù)進行校驗以及判斷操作是否正確完成。Flash寫校驗C語言實現(xiàn)如下:
    void program_check (void)
    {
        unsigned int algorithm_out;
        unsigned int datapolling_bit;
        unsigned int exceed_time;
        algorithm_out = read_arry( PA);
        datapolling_bit = intalgorith_out &0x80;
    exceed_time = algorithm_out &0x20 ;
    while((datapolling_bit !=PD&0x0080)
            &&(exceed_time != 0x20))
        {
        algorith_out = read_arry( PA);
        datapolling_bit = algorith_out &0x80;
        exceed_time = algorith_out &0x20;
        }
    if (exceed_time = = 0x20)
        {
         datapolling_bit =read_arry(PA) &0x80 ;
        if (datapolling_bit !=PD & 0x0080)
         {
          reset_flash();
          wrong();
          }
         }
    }
    Flash字編程程序如下:
    void Word-Program(void)

    {
        write_se (0x555,0xAA);
        write_se 0x2AA,0x55) 
        write_se (0x555,0XA0);
        write_se (PA,PD);
        program_check();
    }
    由于篇幅所限,本文僅給出部分核心程序代碼,讀者可利用上述代碼編寫一個完整的程序。
    本文以解決DSP靜態(tài)圖像無線傳輸系統(tǒng)項目中對大規(guī)模程序和大量圖像數(shù)據(jù)的存儲問題為背景,并最終在整個系統(tǒng)調(diào)試中實現(xiàn)其存儲功能和程序的二次加載。經(jīng)驗證,本接口設(shè)計和編程實現(xiàn)具有操作方便,易于擴展等優(yōu)點。
    對DSP外部Flash編程雖不是一項關(guān)鍵技術(shù),但它在整個DSP嵌入式系統(tǒng)開發(fā)中卻有著至關(guān)重要的作用。如果開發(fā)者在設(shè)計之初就掌握了這項技術(shù),將會大大方便系統(tǒng)的調(diào)試,縮短開發(fā)時間。


參考文獻
[1] Texas Instruments. TMS320VC5509 DSP external memory interface(EMIF) reference guide[S]. Literature Number:SP-2 RU670, October 2003.
[2] 彭啟琮,武樂琴.TMS320VC55X系列DSP的CPU與外設(shè)[M].北京:清華大學出版社,2005:191-212.
[3] Texas Instruments.TMS320C55x DSP CPU reference guide[S]. Literature Number:SPRU371F,F(xiàn)ebruary 2004.
[4] 申敏,鄧矣冰.DSP原理及其在移動通信系統(tǒng)中的應(yīng)用[M].北京:人民郵電出版社,2001:130-139.
[5] 劉偉,閆玉華.基于CPLD譯碼的DSP二次Bootloader方法[J].電子技術(shù)應(yīng)用,2008,34(10):61-63.
[6] 李坤,肖恒.TMS320VC33的引導加載方法設(shè)計與實現(xiàn)[J].電子技術(shù)應(yīng)用,2003,23(2):166-168.
[7] Publication number S29AL008D_00 revision A amendment 3. Issue Date June 16, 2005.

 

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。