摘 要: 以實際的圖像監(jiān)控系統(tǒng)為背景,介紹了對S29AL008D Flash存儲器進(jìn)行操作的指令格式和控制方法。通過CPLD實現(xiàn)DSP和Flash存儲器之間的硬件連接,給出了部分VHDL源程序。利用TMS320C5509A DSP通過CPLD快速譯碼實現(xiàn)Flash燒寫具有接口簡單、通用性強(qiáng)的優(yōu)點,在實踐中證明了方法的有效性。
關(guān)鍵詞: DSP;S29AL008D;CPLD譯碼;Flash燒寫
數(shù)字信號處理器DSP因其運算精度高,實時性強(qiáng)等特點,在通信、工業(yè)控制和消費類電子等領(lǐng)域得到了廣泛應(yīng)用,成為進(jìn)行數(shù)字信號處理的首選器件。在圖像監(jiān)控系統(tǒng)中,往往要對大量的數(shù)據(jù)和應(yīng)用程序進(jìn)行處理和非易失性存儲。采用Flash存儲器對這些大量數(shù)據(jù)和應(yīng)用程序進(jìn)行存儲是一種性價比較高的選擇。本文設(shè)計的以TI公司DSP芯片TMS320VC5509A(以下簡稱VC5509A)為主處理器的圖像監(jiān)控系統(tǒng)中,使用了AMD公司S29AL008D Flash存儲器作為數(shù)據(jù)和應(yīng)用程序存儲芯片。使用VC5509A對S29AL008D進(jìn)行操作,在硬件接口設(shè)計中采用CPLD進(jìn)行譯碼和時序控制。
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]。當(dāng)DSP中的CPU訪問VC5509A程序存儲空間時,通過外部存儲器接口(EMIF)對外部存儲空間進(jìn)行管理。外部存儲空間被分成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ù)/地址復(fù)用功能,為S29AL008D Flash存儲器提供高6位地址[4]。VC5509A和CPLD與S29AL008D的硬件接口電路如圖2所示[5]。通過CPLD的快速譯碼功能在CE2空間模擬1個Flash高位地址控制寄存器(換頁控制寄存器)FPCR,上電復(fù)位后通過寫FPCR控制FLASH的高位地址來實現(xiàn)換頁功能。此處用VHDL對XC9536XL進(jìn)行編程將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 進(jìn)行讀寫訪問之前,要對DSP內(nèi)相關(guān)寄存器進(jì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的讀寫過程必須嚴(yán)格按照S29AL008D提供的命令時序來完成。表1給出了S29AL008D對數(shù)據(jù)字進(jìn)行復(fù)位、擦除、讀、寫的命令時序[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進(jìn)行寫操作前必須先擦除片內(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ù)進(jìn)行校驗以及判斷操作是否正確完成。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)具有操作方便,易于擴(kuò)展等優(yōu)點。
對DSP外部Flash編程雖不是一項關(guān)鍵技術(shù),但它在整個DSP嵌入式系統(tǒng)開發(fā)中卻有著至關(guān)重要的作用。如果開發(fā)者在設(shè)計之初就掌握了這項技術(shù),將會大大方便系統(tǒng)的調(diào)試,縮短開發(fā)時間。
參考文獻(xiàn)
[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].北京:清華大學(xué)出版社,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的引導(dǎo)加載方法設(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.