0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

EEPROM芯片24C02的字節(jié)寫時序和字節(jié)讀時序

嵌入式應(yīng)用開發(fā) ? 來源:嵌入式應(yīng)用開發(fā) ? 作者:嵌入式應(yīng)用開發(fā) ? 2022-05-16 15:09 ? 次閱讀


24C02芯片介紹
EEPROM (Electrically Erasable Programmable read only memory),帶電可擦可編程只讀存儲器——一種掉電后數(shù)據(jù)不丟失的存儲芯片。

24Cxx芯片是EEPROM芯片的一種,它是基于IIC總線的存儲器件,遵循二線制協(xié)議,由于其具有接口方便,體積小,數(shù)據(jù)掉電不丟失等特點,在儀器儀表工業(yè)自動化控制中得到大量的應(yīng)用。24Cxx在電路的作用主要是在掉電的情況下保存數(shù)據(jù)。

本文使用的是24C02芯片,總?cè)萘渴?k個bit(256個字節(jié))。這里芯片名稱里的02代表著總?cè)萘俊?/p>

24C02芯片的引腳分布和具體的作用見下圖:

pYYBAGKB926Ae-GaAAA9F3D-YBA581.png24C02 引腳圖
引腳名稱 說明
A0-A2 地址輸入線
SDA 數(shù)據(jù)線
SCL 時鐘
WP 寫保護
GND、VCC 供電


下圖是本文中24C02和STM32的引腳連接圖:

poYBAGKB-DiAXBfyAAEhRMSpQRw767.png引腳連接圖

從圖中可以看出:A0、A1、A2都為0。

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

pYYBAGKB-FiACV9iAACMQdZpGhw408.png設(shè)備地址

根據(jù)圖中的內(nèi)容:如果是寫24C02的時候,從器件地址為10100000(0xA0);讀24C02的時候,從器件地址為10100001(0xA1)。

24C02芯片的時序圖
這部分的內(nèi)容應(yīng)結(jié)合上文:I2C總線的數(shù)據(jù)傳送的內(nèi)容一起理解。

24C02字節(jié)寫時序

poYBAGKB-I2AZmvcAACKyy8epDA520.png寫時序


對24C02芯片進行寫字節(jié)操作的時候,步驟如下:

(1) 開始位,后面緊跟從器件地址位(0xA0),等待應(yīng)答,這是為了在IIC總線上確定24C02的從地址位置;
(2) 確定操作24C02的地址,等待應(yīng)答,也就是將字節(jié)寫入到24C02中256個字節(jié)中的位置;
(3) 確定需要寫入24C02芯片的字節(jié),等待應(yīng)答,停止位。
24C02字節(jié)讀時序

poYBAGKB-M2AfPqfAADJWM6fWGA088.png讀時序


對24C02芯片進行讀字節(jié)操作的時候,步驟如下:

(1)開始位,后面緊跟從器件地址位(0xA0),等待應(yīng)答,這是為了在IIC總線上確定24C02的從地址位置;
(2)確定操作24C02的地址,等待應(yīng)答,也就是從24C02中256個字節(jié)中讀取字節(jié)的位置;
(3)再次開始位,后面緊跟從器件地址位(0xA1),等待應(yīng)答;
(4)獲取從24C02芯片中讀取的字節(jié),發(fā)出非應(yīng)答信號,停止位。

進行數(shù)據(jù)傳送時,在SCL為高電平期間,SDA線上電平必須保持穩(wěn)定,只有SCL為低時,才允許SDA線上電平改變狀態(tài)。并且每個字節(jié)傳送時都是高位在前;
對于應(yīng)答信號,ACK=0時為有效應(yīng)答位,說明從機已經(jīng)成功接收到該字節(jié),若為1則說明接受不成功;
如果從機需要延遲下一個數(shù)據(jù)字節(jié)開始傳送的時間,可以通過把SCL電平拉低并保持來強制主機進入等待狀態(tài);
主機完成一次通信后還想繼續(xù)占用總線在進行一次通信,而又不釋放總線,就要利用重啟動信號。它既作為前一次數(shù)據(jù)傳輸?shù)慕Y(jié)束,又作為后一次傳輸?shù)拈_始;
總線沖突時,按“低電平優(yōu)先”的仲裁原則,把總線判給在數(shù)據(jù)線上先發(fā)送低電平的主器件;
在特殊情況下,若需禁止所有發(fā)生在I2C總線上的通信,可采用封鎖或關(guān)閉總線,具體操作為在總線上的任一器件將SCL鎖定在低電平即可;
SDA仲裁和SCL時鐘同步處理過程沒有先后關(guā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開發(fā)板使用的是24c02,所以定義EE_TYPE為AT24C02
#define EE_TYPE AT24C02
//初始化IIC接口
void AT24CXX_Init(void)
{
IIC_Init();
}
//在AT24CXX指定地址讀出一個數(shù)據(jù)
//ReadAddr:開始讀數(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);           //進入接收模式      
IIC_Wait_Ack();  
       temp=IIC_Read_Byte(0);     //讀一個字節(jié),非應(yīng)答信號信號    
       IIC_Stop();        //產(chǎn)生一個停止條件     
return temp;
}
//在AT24CXX指定地址寫入一個數(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)生一個停止條件 
delay_ms(10);  
}
//在AT24CXX里面的指定地址開始寫入長度為Len的數(shù)據(jù)
//該函數(shù)用于寫入16bit或者32bit的數(shù)據(jù).
//WriteAddr  :開始寫入的地址  
//DataToWrite:數(shù)據(jù)數(shù)組首地址
//Len        :要寫入數(shù)據(jù)的長度2,4
void AT24CXX_WriteLenByte(u16 WriteAddr,u32 DataToWrite,u8 Len)
{   
u8 t;
for(t=0;t>(8*t))&0xff);
}                
}

//在AT24CXX里面的指定地址開始讀出長度為Len的數(shù)據(jù)
//該函數(shù)用于讀出16bit或者32bit的數(shù)據(jù).
//ReadAddr   :開始讀出的地址 
//返回值     :數(shù)據(jù)
//Len        :要讀出數(shù)據(jù)的長度2,4
u32 AT24CXX_ReadLenByte(u16 ReadAddr,u8 Len)
{   
u8 t;
u32 temp=0;
for(t=0;t
;t++)>;t++)>

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • EEPROM
    +關(guān)注

    關(guān)注

    9

    文章

    1002

    瀏覽量

    81053
  • 存儲芯片
    +關(guān)注

    關(guān)注

    11

    文章

    874

    瀏覽量

    42868
  • IIC總線
    +關(guān)注

    關(guān)注

    1

    文章

    66

    瀏覽量

    20259
收藏 人收藏

    評論

    相關(guān)推薦

    24C02驅(qū)動【掉電保存】

    24C02是一個2Kbit的串行EEPROM存儲芯片,可存儲256個字節(jié)數(shù)據(jù)。工作電壓范圍為1.8V到6.0V,具有低功耗CMOS技術(shù),自定時擦寫周期,1000000次編程/擦除周期,
    的頭像 發(fā)表于 07-17 09:24 ?1435次閱讀
    <b class='flag-5'>24C02</b>驅(qū)動【掉電保存】

    24C02的連續(xù)讀和

    最近在用24C02,可在網(wǎng)上找到的總是單個字節(jié)24c02讀寫,想一串字符一直沒搞明白...不過最終功夫不負有心人,還是弄好了開是上傳上來和大家交流一下~{:soso_e100:}初
    發(fā)表于 08-23 12:53

    請問24C02是16Byte緩沖的嗎?

    眾所周知,I2C EEPROM可以按字節(jié)訪問,也可以按頁訪問。24C02一般緩沖區(qū)是8Byte,24C04以上的大容量ROM緩沖區(qū)有16/3
    發(fā)表于 09-16 23:41

    EEPROM字節(jié)讀寫操作時序相關(guān)資料下載

    不完全一樣,ATMEL 公司的 24C02 的這個寫入時間最高不超過 5 ms。在往非易失區(qū)域的過程,EEPR
    發(fā)表于 11-24 07:01

    24c02/24c01/24c04讀寫程序

    24c02/24c01/24c04  I2C EEPROM字節(jié)讀寫驅(qū)動程序,
    發(fā)表于 10-07 12:39 ?19次下載

    24c01/24c02中文資料

    24c01/24c02是一個1K/2K/4K/8K/16K 位串行CMOS E2PROM, 內(nèi)部含有128/256/512/1024/2048 個8 位字節(jié),CATALYST 公司的先進CMOS 技術(shù)實質(zhì)上減少了器件的功耗.CA
    發(fā)表于 10-07 12:43 ?4949次下載

    寫入一個字節(jié)24c02并讀出來驗證

    寫入一個字節(jié)24c02并讀出來驗證 本課的程序已經(jīng)包含了上一顆的內(nèi)容,增加了
    發(fā)表于 08-09 22:01 ?3104次閱讀
    寫入一個<b class='flag-5'>字節(jié)</b>到<b class='flag-5'>24c02</b>并讀出來驗證

    一個字節(jié)24c02中(源程序)

    一個字節(jié)24c02中(源程序) 24c02是一個非揮發(fā)eeprom存儲器器件,采用的IIC總線技術(shù)。
    發(fā)表于 08-11 19:17 ?2869次閱讀

    24C02中IIC總線的應(yīng)答信號(ACK)時序圖分析

    24C02中IIC總線的應(yīng)答信號(ACK)時序圖分析,很好的單片機學(xué)習(xí)資料。
    發(fā)表于 03-21 17:30 ?93次下載

    24c02基礎(chǔ)程序

    24c02寫入調(diào)用程序 用于初次接觸24c02 學(xué)習(xí)24c02用的
    發(fā)表于 07-12 15:14 ?24次下載

    24C02讀寫操作程序設(shè)計實例,24C02 read / write process

    );? //從24c02的地址address中讀取一個字節(jié)數(shù)據(jù)void x24c02_write(uchar address,uchar info);? //向24c02的addres
    的頭像 發(fā)表于 09-20 19:41 ?1431次閱讀

    使用51單片機進行EEPROM存儲器24C02讀取存儲多字節(jié)的程序免費下載

    本文檔的主要內(nèi)容詳細介紹的是使用51單片機進行EEPROM存儲器24C02讀取存儲多字節(jié)的程序免費下載。
    發(fā)表于 06-05 17:51 ?15次下載
    使用51單片機進行<b class='flag-5'>EEPROM</b>存儲器<b class='flag-5'>24C02</b>讀取存儲多<b class='flag-5'>字節(jié)</b>的程序免費下載

    單片機:EEPROM字節(jié)讀寫操作時序

    不完全一樣,ATMEL 公司的 24C02 的這個寫入時間最高不超過 5 ms。在往非易失區(qū)域的過程,E
    發(fā)表于 11-16 14:21 ?8次下載
    單片機:<b class='flag-5'>EEPROM</b> 多<b class='flag-5'>字節(jié)</b>讀寫操作<b class='flag-5'>時序</b>

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

    最近在學(xué)習(xí)匯編完成常用芯片的控制,并預(yù)留一些接口。24C02是我購買的開發(fā)板上的芯片,故先從他入手。(更新中)24C02數(shù)據(jù)手冊理解推薦的數(shù)據(jù)手冊2
    發(fā)表于 11-23 09:51 ?5次下載
    <b class='flag-5'>24C02</b> <b class='flag-5'>EEPROM</b> 51匯編程序設(shè)計

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

    時序的,本文采用的是模擬時序,下篇文章就介紹配置STM32的IIC硬件時序讀寫AT24C02和AT24C08。模擬
    發(fā)表于 11-25 20:06 ?39次下載
    STM32入門開發(fā): 介紹IIC總線、讀寫AT<b class='flag-5'>24C02</b>(<b class='flag-5'>EEPROM</b>)(采用模擬<b class='flag-5'>時序</b>)