|
AT45DB021B |
![]() |
AT45DB021B 的PDF資料下載,267388K |
其他型號 |
AT45DB021B的供應(yīng)商: |
聯(lián)系人:王先生/李先生 電話:0755-83978851/0755-83978851 |
聯(lián)系人:趙小姐 電話:0755-83035189 |
聯(lián)系人:韓雪 電話:0755-23489224 |
聯(lián)系人:林先生 電話:0755-83035162 |
|
>>更多供應(yīng)商 |
AT45DB021B在電力參數(shù)監(jiān)測中的應(yīng)用
概述
在智能電力設(shè)備中,往往要對電網(wǎng)的一些歷史數(shù)據(jù)進行記錄,以便更好的了解電網(wǎng)的運行狀況,因此需要一個大容量、接口方式簡單的存儲器,AT45DB021系列是一個較好的選擇。AT45DB021B是264Kbyte串行接口可編程閃速存儲器,該器件具有SPI串行接口,可以方便的與單片機和微機通訊,同時還具有體積小、存儲量大、電壓低等優(yōu)點。
主要特性
AT45DB021B的主要特點如下:
1.單電源供電(2.7V-3.6V),SPI串行接口符合SPI標(biāo)準(zhǔn);
2.具有264Kbyte主存儲器,1024頁,每頁264字節(jié);
3.低功耗,4mA的典型讀電流,休眠電流2 A;
4.20MHz的最大時鐘頻率,具有硬件寫保護功能;
5.帶有雙264 字節(jié)的數(shù)據(jù)緩沖器,可在對主存儲區(qū)操作同時對緩沖區(qū)寫入或讀取數(shù)據(jù);
6.具有多種封裝形式。
本文采用8管腳的SOIC封裝形式,具有體積小的優(yōu)勢,其封裝外形見圖1及引腳功能見表1。
工作原理
AT45DB021B主存儲區(qū)共分1024頁(PAGE),每頁264字節(jié),共2,162,688位,此外,還有2個SRAM數(shù)據(jù)緩沖區(qū)(264字節(jié)/BUFFER),可以對主存儲區(qū)任一頁和任一數(shù)據(jù)緩沖區(qū)中的任一起始地址進行數(shù)據(jù)讀或?qū)懖僮鳎瑢χ鞔鎯^(qū)的讀寫操作可以直接進行也可以通過任一數(shù)據(jù)緩沖區(qū),另外一個顯著的特點就是在對主存儲區(qū)進行操作的同時,還可以對任一數(shù)據(jù)緩沖區(qū)進行讀寫。由于AT45DB021B具有SPI串行接口,因此硬件連接十分簡單。該芯片具有在線可編程功能且不需要高的編程電壓(編程電壓仍為電源電壓)。圖2為AT45DB021B的內(nèi)部結(jié)構(gòu)框圖。
對AT45DB021B的操作由主機發(fā)出的指令控制,一個有效的指令在 /CS的下降沿開始,包括一個8位的操作碼,要進行操作的頁地址和緩沖區(qū)地址的位置,所有指令和數(shù)據(jù)都從最高位開始。表2是AT45DB021B的主要的操作命令。
操作命令說明:
1.關(guān)于狀態(tài)存儲器:它是一個8位的只讀存儲器,用于指示AT45DB021B的工作狀況,如圖所示:
BIT7用于顯示AT45DB021B的狀態(tài),BIT7位=1時,說明AT45DB021B不忙,可以對其進行指令操作,BIT7位=0時,指示AT45DB021B忙,可以通過檢測BIT7位來實時了解AT45DB021B的狀態(tài),以下幾種操作將導(dǎo)致BIT7位=0:使用內(nèi)建擦除周期從緩存到主存?zhèn)魉筒僮,不使用?nèi)建擦除周期從緩存到主存?zhèn)魉筒僮,頁擦除操作,主存儲器頁讀寫操作等。
2.主存儲器頁讀:主存儲器頁讀指令可以對1024頁中的任意頁進行讀操作,命令碼為:8位操作碼+5位保留碼+10位頁地址碼+9位頁內(nèi)起始地址碼+32位無關(guān)碼;操作碼為52H或D2H,5位保留碼用于對片子的上下兼容,10位頁地址碼用于確定對主存儲器的哪一頁進行操作,9位頁內(nèi)起始地址碼來確定頁內(nèi)操作的起始地址,后32為無關(guān)碼用來配合時序。當(dāng)/CS為0時,主機向器件的SCK引腳發(fā)送時鐘信號,引導(dǎo)操作碼和地址從SI引腳寫入器件,當(dāng)最后一位寫入后的下一個時鐘周期,頁內(nèi)數(shù)據(jù)將從SO引腳輸出。
3.通過緩沖存儲器對主存儲器寫操作:
命令碼為:操作碼+5位保留碼+10位頁地址碼+9位頁內(nèi)起始地址碼,其中操作碼為82H時,數(shù)據(jù)通過緩沖存儲器1向主存儲器寫,為85H時,數(shù)據(jù)通過緩沖存儲器2向主存儲器寫操作。
應(yīng)用實例
AT45DB021B具有264Kbyte的主存儲區(qū),因此可廣泛應(yīng)用于數(shù)據(jù)存儲等領(lǐng)域 ,可與單片機構(gòu)成一個大容量的數(shù)據(jù)采集系統(tǒng),在智能高壓無功補償器中,AT45DB021B用于存儲過去60天的電壓、電流的有效值和電網(wǎng)的一些運行參數(shù),以便了解電網(wǎng)的歷史運行狀況,這是一般存儲器達不到的。圖3給出了由MSP430F149超低功耗FLASH型單片機與AT45DB021B構(gòu)成的數(shù)據(jù)存儲電路,并給出了對AT45DB021B讀寫操作的C語言程序,由于AT45DB021B具有SPI接口,具體的時序要滿足SPI時序要求,在此不再詳述。
#include <Msp430x14x.h>
#define SCK_1 P4OUT = BIT7 //SCK=1
#define SCK_0 P4OUT &=~ BIT7 //SCK=0
#define SI_1 P5OUT = BIT0 //CPU向AT寫1
#define SI_0 P5OUT &=~ BIT0 //CPU向AT寫0
#define SO_IN ((P5IN & 0x02) == 0x02) //CPU讀.
#define DIR_IN P5DIR &=~ BIT1; P5OUT = BIT1 //I/O輸入,接受AT的數(shù)據(jù)
#define DIR_OUT P5DIR = BIT1; P5OUT = BIT1 //I/O輸出
#define STARTOP P4OUT = BIT6; _NOP(); P4OUT &=~ BIT6
#define ENDOP P4OUT &=~ BIT6; _NOP(); P4OUT = BIT6
#define HIGHTOLOW {_NOP(); SCK_1; _NOP(); SCK_0; _NOP();}
int tempArray[150];
void Init(void) //MSP430F149引腳初始化;
{
P4DIR = BIT6;
P4OUT = BIT6;
P4DIR = BIT7;
P4OUT = BIT7;
P5DIR = BIT0;
P5OUT = BIT0;
P5DIR = BIT1;
P5OUT = BIT1;
}
寫一字節(jié)子程序:
void Wr1byte(unsigned char tt)
{ unsigned char i;
for (i=0; i<8; j++)
{
if ((tt & 0x80) == 0x80)
SI_1;
else
SI_0;
HIGHTOLOW;
tt = tt<< 1;
}
}
讀一字節(jié)子程序:
unsigned char Rd1byte(void)
{unsigned char i,medBit=0;
char Data=0;
for (i=0; i<8; i++)
{ HIGHTOLOW;
_NOP();
if (SO_IN )
medBit = 1; //if(SO==1)medBit=1;
else
medBit = 0;
Data = (Data << 1) medBit;
return Data;
}
}
對AT45DB021進行寫操作子函數(shù): (通過緩沖存儲器2對主存儲器寫操作)
參數(shù):pInData 指向要寫入數(shù)據(jù)的指針
mm 寫入數(shù)據(jù)數(shù)組的大小
startPage 將數(shù)據(jù)寫入主存的起始頁地址
startByte 將數(shù)據(jù)寫入主存的起始頁地址中的起始字節(jié)地址
void WriteMemory(const int *pInData, unsigned char mm, unsigned int startPage, unsigned int startByte)
{
unsigned char i, j;
unsigned char opCode;
char lowData;
char highData;
opCode = 0x85; //opCode=0x82 is also available.
lowData = highData = 0;
SCK_0;
_NOP();
STARTOP;
_NOP();
Wr1byte(opCode );
for (j=0; j<5; j++)
HIGHTOLOW;
//send startPage address //發(fā)送起始頁地址子程序;
//send startByte address //發(fā)送頁內(nèi)起始地址子程序;
for (j=0; j<mm; j++) //對目的地址寫操作,先寫低字節(jié)后寫高字節(jié)
{
lowData = (char)(*(pInData + j));
Wr1byte(lowData);
highData = (char)((*(pInData + j)) >> 8);
Wr1byte(highData);
}
ENDOP;
_NOP();
SI_1;
}
讀出AT45DB021存儲的數(shù)據(jù)(主存儲器頁讀, 讀出字)
參數(shù):mm 讀出數(shù)據(jù)數(shù)組的大小
startPage 讀出數(shù)據(jù)的起始頁地址
startByte 讀出數(shù)據(jù)的起始頁地址中的起始字節(jié)地址
返回值:無
void ReadMemory(unsigned char mm, unsigned int startPage, unsigned int startByte)
{
unsigned char i, j;
unsigned char opCode;
unsigned char medBit;
char lowData;
char highData;
opCode = 0x52;
lowData = highData = 0;
medBit = 0;
SCK_0;
_NOP();
STARTOP;
_NOP();
Wr1byte(opCode );
for (j=0; j<5; j++)
HIGHTOLOW; //5位保留碼;
//send startPage address //發(fā)送起始頁地址子程序;
//send startByte address //發(fā)送頁內(nèi)起始地址子程序;
for (j=0; j<32; j++)
HIGHTOLOW; //32位無關(guān)碼;
DIR_IN;
for (j=0; j<mm; j++)
{
lowData= Rd1byte();
highData= Rd1byte();
tempArray[j] = ((int)highData << 8) + lowData;
}
ENDOP;
SI_1;
_NOP();
DIR_OUT;
}
|
|||
|
© 2025 維庫電子市場網(wǎng)(udpf.com.cn) 版權(quán)所有 經(jīng)營許可證編號:浙B2-20050339 版權(quán)聲明
二十一年專注打造優(yōu)質(zhì)電子元器件采購網(wǎng)、IC交易平臺。 |