摘 要: 以實際的圖像監控系統為背景,介紹了對S29AL008D Flash存儲器進行操作的指令格式和控制方法。通過CPLD實現DSP和Flash存儲器之間的硬件連接,給出了部分VHDL源程序。利用TMS320C5509A DSP通過CPLD快速譯碼實現Flash燒寫具有接口簡單、通用性強的優點,在實踐中證明了方法的有效性。
關鍵詞: DSP;S29AL008D;CPLD譯碼;Flash燒寫
數字信號處理器DSP因其運算精度高,實時性強等特點,在通信、工業控制和消費類電子等領域得到了廣泛應用,成為進行數字信號處理的首選器件。在圖像監控系統中,往往要對大量的數據和應用程序進行處理和非易失性存儲。采用Flash存儲器對這些大量數據和應用程序進行存儲是一種性價比較高的選擇。本文設計的以TI公司DSP芯片TMS320VC5509A(以下簡稱VC5509A)為主處理器的圖像監控系統中,使用了AMD公司S29AL008D Flash存儲器作為數據和應用程序存儲芯片。使用VC5509A對S29AL008D進行操作,在硬件接口設計中采用CPLD進行譯碼和時序控制。
1 VC5509A及其外部存儲空間
TMS320VC5509A是TI公司的一款16位高速低功耗定點DSP芯片,主要應用于對音頻、靜態圖像的數字信號處理,是設計便攜設備的較佳解決方案。該DSP芯片在核心電壓為1.35 V時最大工作頻率為144 MHz;地址線為24位,對地址的尋址范圍為16 M×8 bit或8 M×16 bit。VC5509A采用統一的編址方式,即存儲空間地址沒有重疊但是尋址方式卻有2種不同的方式:字節尋址和字尋址[1]。當DSP中的CPU訪問VC5509A程序存儲空間時,通過外部存儲器接口(EMIF)對外部存儲空間進行管理。外部存儲空間被分成CE0~CE3 4個空間,分別由EMIF的CE0#~CE3#引腳管理,外部存儲空間劃分如圖1所示[2]。CEn#(n=0~3)與外設的片選端連接。
2 硬件電路設計
2.1 VC5509A與Flash的硬件連接
使用PGE封裝的VC5509A對外只提供14條地址線引腳,因此只能尋址8 K×16 bit的空間范圍[3],要對S29AL008D的512 K×16 bit存儲空間尋址需19條地址線。解決辦法是用CPLD實現鎖存譯碼使D[5:0]具有數據/地址復用功能,為S29AL008D Flash存儲器提供高6位地址[4]。VC5509A和CPLD與S29AL008D的硬件接口電路如圖2所示[5]。通過CPLD的快速譯碼功能在CE2空間模擬1個Flash高位地址控制寄存器(換頁控制寄存器)FPCR,上電復位后通過寫FPCR控制FLASH的高位地址來實現換頁功能。此處用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相關寄存器的初始化
在DSP對S29AL008D 進行讀寫訪問之前,要對DSP內相關寄存器進行正確的設置。此系統的初始化設置如下[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; //關閉ARDY控制
在CPU一半工作頻率下,設置CE1
*ce11=0x162a //設置存儲器模式為異步16位,讀操作的setup、strobe、hold與寫操作的相同
*ce12=0x162a; //寫操作的setup、strobe、hold
*ce13=0;
2.3 Flash存儲器的操作
對S29AL008D的讀寫過程必須嚴格按照S29AL008D提供的命令時序來完成。表1給出了S29AL008D對數據字進行復位、擦除、讀、寫的命令時序[7]。
Flash操作寫子函數C程序如下:
# define flash_ba 0x200000
//ptr是FLASH存儲器映射在整個DSP系統地址空間中的基地址
# 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進行寫操作前必須先擦除片內原有的數據。Flash的整片字擦除操作時序C語言實現如下:
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要對寫入的數據進行校驗以及判斷操作是否正確完成。Flash寫校驗C語言實現如下:
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靜態圖像無線傳輸系統項目中對大規模程序和大量圖像數據的存儲問題為背景,并最終在整個系統調試中實現其存儲功能和程序的二次加載。經驗證,本接口設計和編程實現具有操作方便,易于擴展等優點。
對DSP外部Flash編程雖不是一項關鍵技術,但它在整個DSP嵌入式系統開發中卻有著至關重要的作用。如果開發者在設計之初就掌握了這項技術,將會大大方便系統的調試,縮短開發時間。
參考文獻
[1] Texas Instruments. TMS320VC5509 DSP external memory interface(EMIF) reference guide[S]. Literature Number:SP-2 RU670, October 2003.
[2] 彭啟琮,武樂琴.TMS320VC55X系列DSP的CPU與外設[M].北京:清華大學出版社,2005:191-212.
[3] Texas Instruments.TMS320C55x DSP CPU reference guide[S]. Literature Number:SPRU371F,February 2004.
[4] 申敏,鄧矣冰.DSP原理及其在移動通信系統中的應用[M].北京:人民郵電出版社,2001:130-139.
[5] 劉偉,閆玉華.基于CPLD譯碼的DSP二次Bootloader方法[J].電子技術應用,2008,34(10):61-63.
[6] 李坤,肖恒.TMS320VC33的引導加載方法設計與實現[J].電子技術應用,2003,23(2):166-168.
[7] Publication number S29AL008D_00 revision A amendment 3. Issue Date June 16, 2005.