EEPROM(帶電可擦可編程只讀存儲器)是用戶可更改的只讀存儲器,可通過高于普通電壓的作用來擦除和重編程(重寫)。不像EPROM芯片,EEPROM不需從計算機中取出即可修改。在一個EEPROM中,當計算機在使用的時候可頻繁地反復編程,因此EEPROM的壽命是一個很重要的設計考慮參數。EEPROM是一種特殊形式的閃存,其應用通常是個人電腦中的電壓來擦寫和重編程 。-(來自百度)
該芯片特性(AT93C46):
1、高速操作,最大速度3MHZ的讀寫操作。
2、1KB的存儲空間。
3、寬電壓輸入(1.8V-6V)。
4、可通過ORG(6腳)來選擇8位-16位數據流
5、上電寫保護功能
6、1百萬個編程周期
7、100年的數據保存壽命
01引腳連接及時序
管腳名稱 | 功能 |
---|---|
CS(1) | 芯片片選信號(高電平有效) |
SK(2) | 數據傳輸的時鐘信號 |
DI(3) | 串行數據輸入 |
DO(4) | 串行數據輸入 |
GND(5) | 電源地 |
ORG(6) | 數據位選擇(GND:8Bit數據流 VCC:16位數據流) |
NC(7) | 空腳 |
VCC(8) | +1.8V-6V電壓 |
內部結構:
連接方式如圖:
C93_CS->CS
C93_SCK->SCK
C93-DI->DI
C93_DO->DO(引腳配置為輸入模式)
除DO引腳配置為輸入模式外,其余引腳均配置為輸出模式。
時序圖:
寫時序:
讀時序:
寫保護使能(Disable):
去寫保護:(Enable)
另外還有幾條指令我們需要知道的
寫入的數據包含1位開始位兩位操作位及地址位。
02編程方法操作
因為擦除等指令需要4.5V上的電壓這里提供不了,所以并沒有使用,但是寫入數據的時候會自動覆蓋原先數據,所以不用擔心
其代碼如下:
/****************************************/
/*****AT93C46 EEPROM 驅動 8Bit數據流 ****/
/****************************************/
//2021.09.03 羊羊課代表By DDY
//讀取及寫入需要存在一定時間間隔,請注意。
void Start_Bit()//寫入開始位
{
AT93C_CS_L;
AT93C_CLK_L;
AT93C_DI_H; //待寫入1
AT93C_CS_H;//選中芯片
AT93C_CLK_H;
AT93C_CLK_L;//給時鐘信號
AT93C_DI_L;//置位引腳
}
void AT93_Clock()//時鐘信號
{
AT93C_CLK_H;
HAL_Delay(1);
AT93C_CLK_L;
}
void AT93_Send_9_Dat(uint16_t Data)
{
for(uint8_t i=0;i< 9;i++)//加上面的開始位
{ //送進的格式為1 01XXXXXXX 指令加地址
if(Data&(0x100 >>i))
AT93C_DI_H;
else AT93C_DI_L;
AT93_Clock();
}
}
void AT93C_Enable(uint8_t Bit)
{
uint8_t Temp=0;
if(Bit) Temp=0x98;//Enable寫使能
else Temp=0x80; //Disable寫禁使能
AT93C_CS_L;//引腳電平重置
AT93C_CLK_L;//引腳電平重置
AT93C_CS_H;//選中芯片
for(uint8_t i=0;i< 10;i++)//發送10位指令
{
if(Temp&0x80 >>i)
AT93C_DI_H ;
else AT93C_DI_L;
AT93_Clock();
}
AT93C_CS_L;//置低降低功耗
AT93C_DI_L;
}
void AT93C_Write(uint8_t Addr,uint8_t Data)
{
AT93C_Enable(1);//寫使能
Addr|=0x80;//數據變為1XXXXXXX
Start_Bit(); //寫一個開始位
AT93_Send_9_Dat(Addr);
AT93C_DI_L;
for(uint8_t i=0;i< 8;i++) //送進8Bit數據
{
if(Data&(0x80 >>i))
AT93C_DI_H;
else AT93C_DI_L;
AT93_Clock();
}
AT93C_CS_L;//置低降低功耗
AT93C_Enable(0); //禁寫使能
}
uint8_t AT93C_Read(uint8_t Addr)//讀該地址的8Bit數據
{
uint8_t Data=0;
AT93C_Enable(1);
Start_Bit();
AT93_Send_9_Dat((0x7f&Addr)|0x100);//數據變成10XXXXXXX;
AT93_Clock();
for(uint8_t i=0;i< 8;i++)//接收8位數據
{
if(AT93C_ReadDO)
{
Data|=0x80 >>i;
}
AT93_Clock();
}
AT93C_CS_L;//置低降低功耗
AT93C_Enable(0);
return Data;
}
//extern char str[20];
//void Test()
//{
// temp=AT93_Read(0x01);
// sprintf(str,"%03d",temp);
// OLED_Show_Str(96,0,str,Font8x16,0);
// Updata_OLED();
// HAL_Delay(100);
// temp+=1;
// AT93C_Write(0x01,temp);
//}
-
芯片
+關注
關注
455文章
50851瀏覽量
423903 -
閃存
+關注
關注
16文章
1789瀏覽量
114944 -
存儲器
+關注
關注
38文章
7493瀏覽量
163873 -
計算機
+關注
關注
19文章
7500瀏覽量
88018 -
EEPROM
+關注
關注
9文章
1020瀏覽量
81633
發布評論請先 登錄
相關推薦
評論