24C02芯片介紹
EEPROM (Electrically Erasable Programmable read only memory),帶電可擦可編程只讀存儲(chǔ)器——一種掉電后數(shù)據(jù)不丟失的存儲(chǔ)芯片。
24Cxx芯片是EEPROM芯片的一種,它是基于IIC總線的存儲(chǔ)器件,遵循二線制協(xié)議,由于其具有接口方便,體積小,數(shù)據(jù)掉電不丟失等特點(diǎn),在儀器儀表及工業(yè)自動(dòng)化控制中得到大量的應(yīng)用。24Cxx在電路的作用主要是在掉電的情況下保存數(shù)據(jù)。
本文使用的是24C02芯片,總?cè)萘渴?k個(gè)bit(256個(gè)字節(jié))。這里芯片名稱里的02代表著總?cè)萘俊?/p>
24C02芯片的引腳分布和具體的作用見(jiàn)下圖:

引腳名稱 | 說(shuō)明 |
A0-A2 | 地址輸入線 |
SDA | 數(shù)據(jù)線 |
SCL | 時(shí)鐘線 |
WP | 寫保護(hù) |
GND、VCC | 提供電源 |
下圖是本文中24C02和STM32的引腳連接圖:

從圖中可以看出:A0、A1、A2都為0。
對(duì)于并聯(lián)在一條IIC總線上的每個(gè)IC都有唯一的地址。那么看一下從器件地址,可以看出對(duì)于不同大小的24Cxx,具有不同的從器件地址。由于24C02為2k容量,也就是說(shuō)只需要參考圖中第一行的內(nèi)容:

根據(jù)圖中的內(nèi)容:如果是寫24C02的時(shí)候,從器件地址為10100000(0xA0);讀24C02的時(shí)候,從器件地址為10100001(0xA1)。
24C02芯片的時(shí)序圖
這部分的內(nèi)容應(yīng)結(jié)合上文:I2C總線的數(shù)據(jù)傳送的內(nèi)容一起理解。
24C02字節(jié)寫時(shí)序

對(duì)24C02芯片進(jìn)行寫字節(jié)操作的時(shí)候,步驟如下:
(1) 開(kāi)始位,后面緊跟從器件地址位(0xA0),等待應(yīng)答,這是為了在IIC總線上確定24C02的從地址位置;
(2) 確定操作24C02的地址,等待應(yīng)答,也就是將字節(jié)寫入到24C02中256個(gè)字節(jié)中的位置;
(3) 確定需要寫入24C02芯片的字節(jié),等待應(yīng)答,停止位。
24C02字節(jié)讀時(shí)序

對(duì)24C02芯片進(jìn)行讀字節(jié)操作的時(shí)候,步驟如下:
(1)開(kāi)始位,后面緊跟從器件地址位(0xA0),等待應(yīng)答,這是為了在IIC總線上確定24C02的從地址位置;
(2)確定操作24C02的地址,等待應(yīng)答,也就是從24C02中256個(gè)字節(jié)中讀取字節(jié)的位置;
(3)再次開(kāi)始位,后面緊跟從器件地址位(0xA1),等待應(yīng)答;
(4)獲取從24C02芯片中讀取的字節(jié),發(fā)出非應(yīng)答信號(hào),停止位。
進(jìn)行數(shù)據(jù)傳送時(shí),在SCL為高電平期間,SDA線上電平必須保持穩(wěn)定,只有SCL為低時(shí),才允許SDA線上電平改變狀態(tài)。并且每個(gè)字節(jié)傳送時(shí)都是高位在前;
對(duì)于應(yīng)答信號(hào),ACK=0時(shí)為有效應(yīng)答位,說(shuō)明從機(jī)已經(jīng)成功接收到該字節(jié),若為1則說(shuō)明接受不成功;
如果從機(jī)需要延遲下一個(gè)數(shù)據(jù)字節(jié)開(kāi)始傳送的時(shí)間,可以通過(guò)把SCL電平拉低并保持來(lái)強(qiáng)制主機(jī)進(jìn)入等待狀態(tài);
主機(jī)完成一次通信后還想繼續(xù)占用總線在進(jìn)行一次通信,而又不釋放總線,就要利用重啟動(dòng)信號(hào)。它既作為前一次數(shù)據(jù)傳輸?shù)慕Y(jié)束,又作為后一次傳輸?shù)拈_(kāi)始;
總線沖突時(shí),按“低電平優(yōu)先”的仲裁原則,把總線判給在數(shù)據(jù)線上先發(fā)送低電平的主器件;
在特殊情況下,若需禁止所有發(fā)生在I2C總線上的通信,可采用封鎖或關(guān)閉總線,具體操作為在總線上的任一器件將SCL鎖定在低電平即可;
SDA仲裁和SCL時(shí)鐘同步處理過(guò)程沒(méi)有先后關(guān)系,而是同時(shí)進(jìn)行的。
讀取24C02芯片程序
#define AT24C01 127
#define AT24C02 255
#define AT24C04 511
#define AT24C08 1023
#define AT24C16 2047
#define AT24C32 4095
#define AT24C64 8191
#define AT24C128 16383
#define AT24C256 32767
//Mini STM32開(kāi)發(fā)板使用的是24c02,所以定義EE_TYPE為AT24C02
#define EE_TYPE AT24C02
//初始化IIC接口
void AT24CXX_Init(void)
{
IIC_Init();
}
//在AT24CXX指定地址讀出一個(gè)數(shù)據(jù)
//ReadAddr:開(kāi)始讀數(shù)的地址
//返回值 :讀到的數(shù)據(jù)
u8 AT24CXX_ReadOneByte(u16 ReadAddr)
{
u8 temp=0;
IIC_Start();
if(EE_TYPE>AT24C16) //為了兼容24Cxx中其他的版本
{
IIC_Send_Byte(0XA0); //發(fā)送寫命令
IIC_Wait_Ack();
IIC_Send_Byte(ReadAddr>>8); //發(fā)送高地址
IIC_Wait_Ack();
}else IIC_Send_Byte(0XA0+((ReadAddr/256)<<1)); //發(fā)送器件地址0XA0,寫數(shù)據(jù)
IIC_Wait_Ack();
IIC_Send_Byte(ReadAddr%256); //發(fā)送低地址
IIC_Wait_Ack();
IIC_Start();
IIC_Send_Byte(0XA1); //進(jìn)入接收模式
IIC_Wait_Ack();
temp=IIC_Read_Byte(0); //讀一個(gè)字節(jié),非應(yīng)答信號(hào)信號(hào)
IIC_Stop(); //產(chǎn)生一個(gè)停止條件
return temp;
}
//在AT24CXX指定地址寫入一個(gè)數(shù)據(jù)
//WriteAddr :寫入數(shù)據(jù)的目的地址
//DataToWrite:要寫入的數(shù)據(jù)
void AT24CXX_WriteOneByte(u16 WriteAddr,u8 DataToWrite)
{
IIC_Start();
if(EE_TYPE>AT24C16)
{
IIC_Send_Byte(0XA0); //發(fā)送寫命令
IIC_Wait_Ack();
IIC_Send_Byte(WriteAddr>>8); //發(fā)送高地址
}else
{
IIC_Send_Byte(0XA0+((WriteAddr/256)<<1)); //發(fā)送器件地址0XA0,寫數(shù)據(jù)
}
IIC_Wait_Ack();
IIC_Send_Byte(WriteAddr%256); //發(fā)送低地址
IIC_Wait_Ack();
IIC_Send_Byte(DataToWrite); //發(fā)送字節(jié)
IIC_Wait_Ack();
IIC_Stop(); //產(chǎn)生一個(gè)停止條件
delay_ms(10);
}
//在AT24CXX里面的指定地址開(kāi)始寫入長(zhǎng)度為L(zhǎng)en的數(shù)據(jù)
//該函數(shù)用于寫入16bit或者32bit的數(shù)據(jù).
//WriteAddr :開(kāi)始寫入的地址
//DataToWrite:數(shù)據(jù)數(shù)組首地址
//Len :要寫入數(shù)據(jù)的長(zhǎng)度2,4
void AT24CXX_WriteLenByte(u16 WriteAddr,u32 DataToWrite,u8 Len)
{
u8 t;
for(t=0;t>(8*t))&0xff);
}
}
//在AT24CXX里面的指定地址開(kāi)始讀出長(zhǎng)度為L(zhǎng)en的數(shù)據(jù)
//該函數(shù)用于讀出16bit或者32bit的數(shù)據(jù).
//ReadAddr :開(kāi)始讀出的地址
//返回值 :數(shù)據(jù)
//Len :要讀出數(shù)據(jù)的長(zhǎng)度2,4
u32 AT24CXX_ReadLenByte(u16 ReadAddr,u8 Len)
{
u8 t;
u32 temp=0;
for(t=0;t
;t++)>;t++)>
-
EEPROM
+關(guān)注
關(guān)注
9文章
1103瀏覽量
85034 -
存儲(chǔ)芯片
+關(guān)注
關(guān)注
11文章
969瀏覽量
44571 -
IIC總線
+關(guān)注
關(guān)注
1文章
67瀏覽量
22226
發(fā)布評(píng)論請(qǐng)先 登錄
24C02驅(qū)動(dòng)【掉電保存】

24C02的連續(xù)讀和寫
請(qǐng)問(wèn)24C02是16Byte緩沖的嗎?
EEPROM多字節(jié)讀寫操作時(shí)序相關(guān)資料下載
24c02/24c01/24c04讀寫程序
24c01/24c02中文資料
寫入一個(gè)字節(jié)到24c02并讀出來(lái)驗(yàn)證

寫一個(gè)字節(jié)到24c02中(源程序)
24C02中IIC總線的應(yīng)答信號(hào)(ACK)時(shí)序圖分析
24C02讀寫操作程序設(shè)計(jì)實(shí)例,24C02 read / write process
使用51單片機(jī)進(jìn)行EEPROM存儲(chǔ)器24C02讀取存儲(chǔ)多字節(jié)的程序免費(fèi)下載

單片機(jī):EEPROM 多字節(jié)讀寫操作時(shí)序

24C02 EEPROM 51匯編程序設(shè)計(jì)

STM32入門開(kāi)發(fā): 介紹IIC總線、讀寫AT24C02(EEPROM)(采用模擬時(shí)序)

評(píng)論