1. 程式人生 > >CY62256 Static RAM 的資料讀寫操作

CY62256 Static RAM 的資料讀寫操作

CY62256 Static RAM 的讀寫

CY62256是一個32K*8位的靜態RAM,適合一些小的專案和給一些RAM不大的MCU使用,最近正好試了一下這個東西,發現這個東西也很好用,但是網上的資料比較少,就拿出來寫一寫。

下面是CY62256的一些基本引數:
Temperature ranges
❐ Commercial: 0 °C to +70 °C
❐ Industrial: –40 °C to +85 °C
❐ Automotive-A: –40 °C to +85 °C
❐ Automotive-E: –40 °C to +125 °C
High speed: 55 ns


Voltage range: 4.5 V to 5.5 V operation
Low active power
❐ 275 mW (max)
Low standby power (LL version)
❐ 82.5 W (max)
Available in Pb-free and non Pb-free 28-pin (600-mil) PDIP,28-pin (300-mil) narrow SOIC, 28-pin TSOP I, and 28-pin reverse TSOP I packages

Logic Block Diagram
Logic Block Diagram

DIP

Pin

由上面的引腳定義和框圖中可以看出,CY62256共有15根地址線,8根資料線,其中,6根為列地址線,9根為行地址線,這幾根地址線又通過譯碼器選擇相應的地址,因此我們在寫地址時,既可以逐列存取,也可以逐行存取,也可以將這15根地址線看作一個整體進行操作,除此之外,還有OE輸出使能(讀使能),WE寫使能和CE片選線。

下面是CY62256讀資料時的時序:

writecycle

可見,我們在讀資料時,要先將OE線拉低,CE先拉低,同時,為了保證地址的有效性,我們可以採取先準備好地址,然後拉低CE和OE線,最後讀資料。

而在讀資料過程中,
read

可以看到,我們在更換地址讀取資料時,資料的準備不是立即完成的,而是至少要經過一段時間之後才有效,因此在讀取資料時也應注意。

寫資料的操作只講一個通過WE控制的時序:
這裡寫圖片描述

和讀資料也是類似的,我們可以先準備地址,即先寫好地址後,再拉低CE和WE線,然後寫資料,連續的寫資料操作時,可以保持CE低電平,通過WE的高低電平來控制資料的寫入。

下面是用STC89C51寫的並經過驗證的讀寫程式

首先是位定義

//Control Pin

sbit WE=P3^5;
sbit OE=P3^4;
sbit CE=P3^3;

//Row Address
sbit A2=P2^0;
sbit A3=P2^1;
sbit A4=P2^2;
sbit A5=P2^3;
sbit A6=P2^4;
sbit A7=P2^5;
sbit A8=P2^6;
sbit A9=P2^7;
sbit A10=P3^7;

//Column Address
sbit A0=P1^0;
sbit A1=P1^1;
sbit A11=P1^2;
sbit A12=P1^3;
sbit A13=P1^4;
sbit A14=P1^5;

然後是一些基本的寫地址和寫資料操作

//寫行地址

void SetAddressRow(unsigned int Address)
{
    A2   =  Address & 0x0001;
    A3   =  Address & 0x0002;
    A4   =  Address & 0x0004;
    A5   =  Address & 0x0008;
    A6   =  Address & 0x0010;
    A7   =  Address & 0x0020;
    A8   =  Address & 0x0040;
    A9   =  Address & 0x0080;
    A10  =  Address & 0x0100;
}


//寫列地址
void SetAddressColumn(unsigned char Address)
{
    A0  =  Address & 0x01;
    A1  =  Address & 0x02;
    A11 =  Address & 0x04;
    A12 =  Address & 0x08;
    A13 =  Address & 0x10;
    A14 =  Address & 0x20;
}

//寫資料
void WriteDate(unsigned char Date)
{
    P0 = Date;
}

然後就是向CY62256裡某一地址寫資料

//列地址2^6=64 行地址2^9=512 列地址 0~64 行地址 0~512 
void WriteToCy62256(unsigned char ColumnAddress,unsigned int RowAddress,unsigned char Date)
{
    SetAddressRow(RowAddress);
    SetAddressColumn(ColumnAddress);

    CE = 0;
    OE = 1;
    WE = 0;

    WriteDate(Date);

    WE = 1;
    CE = 1;

}

從CY62256裡某一地址讀資料

unsigned char ReadFromCy62256(unsigned char ColumnAddress,unsigned int RowAddress)
{
    unsigned char Date=0;   

    SetAddressRow(RowAddress);
    SetAddressColumn(ColumnAddress);

    CE = 0;
    OE = 0;

    Date = P0;

    CE = 1;
    OE = 1;

    return Date;

}