一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

數(shù)據(jù)存儲芯片AT24C02簡介

CHANBAEK ? 來源:CSDN-_會飛_的魚 ? 作者:CSDN-_會飛_的魚 ? 2023-03-07 14:55 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一. 芯片簡介

AT24C02是一個2K位串行CMOS E2PROM,內(nèi)部含有256個8位字節(jié),采用先進(jìn)CMOS技術(shù)實(shí)質(zhì)上減少了器件的功耗。 AT24C02有一個8字節(jié)頁寫緩沖器,該器件通過IIC總線接口進(jìn)行操作,有一個專門的寫保護(hù)功能。

二. 芯片參數(shù)

1.特點(diǎn)

  • 工作電壓:1.8V~5.5V;
  • 低功耗CMOS技術(shù),工作電流1mA,待機(jī)電流1uA;
  • 應(yīng)用在內(nèi)部結(jié)構(gòu):128x8(1K),256x8(2K),512x8(4K),1024x8(8K),2048x8(16K);
  • 二線串行接口,支持標(biāo)準(zhǔn)IIC通信協(xié)議;
  • 雙向數(shù)據(jù)傳輸協(xié)議;
  • 兼容 400KHz傳輸速率(1.8V,2.5V,2.7V,3.6V);
  • 支持硬件寫保護(hù)功能;
  • 擦出次數(shù)可達(dá)10000次;
  • 存儲數(shù)據(jù)時間超過100年;

2.引腳定義

截圖20230301181839.png

A0-A2引腳為芯片地址,用于多器件工作模式; SDA、SCL分別為IIC通信的數(shù)據(jù)線和時鐘線; WP為寫保護(hù)引腳,當(dāng)該引腳接 GND 時,允許正常的讀/寫操作。 當(dāng)該引腳接 VCC 時,芯片啟動寫保護(hù)功能;

3.參考電路

截圖20230301181839.png

A0-A2接到GND上,地址固定為0; SCL、SDA引腳內(nèi)部為開漏輸出,所以需接上拉電阻; WP引腳接GND,表示芯片可讀可寫。

三. 通信接口

1.芯片讀寫地址

在進(jìn)行I2C通信時,主機(jī)發(fā)送啟動信號后,再發(fā)送尋址信號。 器件的地址有7位和10位,以7為地址尋址為例; 尋址信號由一個字節(jié)構(gòu)成,高7位為地址位,最低位為方向位,用來表示主機(jī)與從器件的數(shù)據(jù)傳輸方向;

方向位0代表主機(jī)接下來對從器件進(jìn)行寫操作; 方向位為1,表明主機(jī)接下來對器件進(jìn)行讀操作。

截圖20230301181839.png

如上圖,AT24C02的高4位是固定的,為1010b,低3位則由A0/A1/A2信號線的電平?jīng)Q定。 按照我們此處的連接, A0/A1/A2 均為 0,所以 EEPROM 的 7 位設(shè)備地址是:1010 000b ,即 0x50。

由于 I2C 通訊時常常是地址跟讀寫方向連在一起構(gòu)成一個 8 位數(shù),且當(dāng)R/W 位為 0 時,表示寫方向,所以加上 7 位地址,其值為“ 0xA0”,常稱該值為 I2C 設(shè)備的“寫地址”; 當(dāng) R/W 位為 1 時,表示讀方向,加上 7 位地址,其值為“ 0xA1”,常稱該值為“讀地址”。

A0/A1/A2輸入腳用于多個器件級聯(lián)時設(shè)置器件地址,當(dāng)這些腳懸空時默認(rèn)值為0。 當(dāng)使用AT24C02 時最大可級聯(lián)8個器件。 如果只有一個AT24C02被總線尋址,這三個地址輸入腳(A0、A1、A2 )可懸空(接地也可以)或連接到Vss,如果只有一個AT24C01被總線尋址這三個地址輸入腳(A0、A1、A2 )必須連接到Vss。

2.IIC通信

由于51單片機(jī)內(nèi)部無集成IIC控制硬件資源,所以需要軟件模擬IIC通信。 函數(shù)有四個,分別為IIC起始信號、IIC停止信號、IIC讀取字節(jié)、IIC寫入字節(jié)等函數(shù)。

/*********************IIC.h*************************************/


//--定義使用的IO口--//
sbit I2C_SCL = P2^1;
sbit I2C_SDA = P2^0;




//--聲明全局變量--//
void I2C_Delay10us();
void I2C_Start();           //起始信號:在I2C_SCL時鐘信號在高電平期間I2C_SDA信號產(chǎn)生一個下降沿
void I2C_Stop();            //終止信號:在I2C_SCL時鐘信號高電平期間I2C_SDA信號產(chǎn)生一個上升沿
uchar I2C_SendByte(uchar dat, uchar ack);//使用I2c讀取一個字節(jié)
uchar I2C_ReadByte();       //通過I2C發(fā)送一個字節(jié)。在I2C_SCL時鐘信號高電平期間,保持發(fā)送信號I2C_SDA保持穩(wěn)定




/*********************IIC.c*************************************/




//延時:1us
void I2C_Delay10us()
{
  uchar a, b;
  for(b=1; b>0; b--)
  {
    for(a=2; a>0; a--);
  }
}




// 起始信號:在I2C_SCL時鐘信號在高電平期間I2C_SDA信號產(chǎn)生一個下降沿
void I2C_Start()
{
  I2C_SDA = 1;
  I2C_Delay10us();
  I2C_SCL = 1;
  I2C_Delay10us();//建立時間是I2C_SDA保持時間>4.7us
  I2C_SDA = 0;
  I2C_Delay10us();//保持時間是>4us
  I2C_SCL = 0;      
  I2C_Delay10us();    
}




//終止信號:在I2C_SCL時鐘信號高電平期間I2C_SDA信號產(chǎn)生一個上升沿
void I2C_Stop()
{
  I2C_SDA = 0;
  I2C_Delay10us();
  I2C_SCL = 1;
  I2C_Delay10us();//建立時間大于4.7us
  I2C_SDA = 1;
  I2C_Delay10us();    
}




//通過I2C發(fā)送一個字節(jié)。在I2C_SCL時鐘信號高電平期間, 保持發(fā)送信號I2C_SDA保持穩(wěn)定
uchar I2C_SendByte(uchar dat, uchar ack)
{
  uchar a = 0,b = 0;//最大255,一個機(jī)器周期為1us,最大延時255us。
  for(a=0; a<8; a++)//要發(fā)送8位,從最高位開始
  {
    I2C_SDA = dat >> 7;   //起始信號之后I2C_SCL=0,所以可以直接改變I2C_SDA信號
    dat = dat << 1;
    I2C_Delay10us();
    I2C_SCL = 1;
    I2C_Delay10us();//建立時間>4.7us
    I2C_SCL = 0;
    I2C_Delay10us();//時間大于4us    
  }
  I2C_SDA = 1;
  I2C_Delay10us();
  I2C_SCL = 1;
  while(I2C_SDA && (ack == 1))//等待應(yīng)答,也就是等待從設(shè)備把I2C_SDA拉低
  {
    b++;
    if(b > 200)   //如果超過200us沒有應(yīng)答發(fā)送失敗,或者為非應(yīng)答,表示接收結(jié)束
    {
      I2C_SCL = 0;
      I2C_Delay10us();
      return 0;
    }
  }
  I2C_SCL = 0;
  I2C_Delay10us();
   return 1;    
}




// 使用I2c讀取一個字節(jié)
uchar I2C_ReadByte()
{
  uchar a = 0,dat = 0;
  I2C_SDA = 1;      //起始和發(fā)送一個字節(jié)之后I2C_SCL都是0
  I2C_Delay10us();
  for(a=0; a<8; a++)//接收8個字節(jié)
  {
    I2C_SCL = 1;
    I2C_Delay10us();
    dat <<= 1;
    dat |= I2C_SDA;
    I2C_Delay10us();
    I2C_SCL = 0;
    I2C_Delay10us();
  }
  return dat;    
}

.控制程序

實(shí)現(xiàn)了基本IIC通訊函數(shù)后,就可對AT24C02進(jìn)行操作,主要是寫入數(shù)據(jù)和讀取數(shù)據(jù)兩個函數(shù)。

芯片尋址可對內(nèi)部256B中的任一個進(jìn)行讀/寫操作,其尋址范圍為00FF,共256個尋址單位。 所以可任意在00FF地址寫入我們需要保存的數(shù)據(jù)。

1.AT24C02寫入數(shù)據(jù)

時序順序?yàn)? 發(fā)送開始信號,IIC啟動->發(fā)送器件地址,其中讀寫標(biāo)志位為寫->發(fā)送器件內(nèi)部存儲地址->向器件中寫入數(shù)據(jù)->發(fā)送停止信號,IIC停止;

//函數(shù)功能 : 往24c02的一個地址寫入一個數(shù)據(jù)
void At24c02Write(unsigned char addr,unsigned char dat)
{
  I2C_Start();
  I2C_SendByte(0xa0, 1);//發(fā)送寫器件地址
  I2C_SendByte(addr, 1);//發(fā)送要寫入內(nèi)存地址
  I2C_SendByte(dat, 0);  //發(fā)送數(shù)據(jù)
  I2C_Stop();
}

2.AT24C02讀取數(shù)據(jù)

時序順序?yàn)? 發(fā)送開始信號,IIC啟動->發(fā)送器件地址,其中讀寫標(biāo)志位為寫->發(fā)送器件內(nèi)部->發(fā)送開始信號,IIC再次啟動->發(fā)送器件地址,其中讀寫標(biāo)志位為讀->從器件讀出數(shù)據(jù)->返回所讀取的數(shù)據(jù);

截圖20230301181839.png

// 函數(shù)功能 :讀取24c02的一個地址的一個數(shù)據(jù)
unsigned char At24c02Read(unsigned char addr)
{
  unsigned char num;
  I2C_Start();
  I2C_SendByte(0xa0, 1); //發(fā)送寫器件地址
  I2C_SendByte(addr, 1); //發(fā)送要讀取的地址
  I2C_Start();
  I2C_SendByte(0xa1, 1); //發(fā)送讀器件地址
  num=I2C_ReadByte(); //讀取數(shù)據(jù)
  I2C_Stop();
  return num;  
}

3.AT24C02讀寫數(shù)據(jù)

實(shí)現(xiàn)以上的讀寫功能,就可以使用AT24C02來實(shí)現(xiàn)我們需要的功能。 功能為:使用按鍵1,寫入num0; 按鍵2,讀取num0; 按鍵3,使num0加1; 按鍵4,清零num0;

void main()
{
  unsigned int num0 = 0,num1 = 0,num2 = 0,n;




  LcdInit();
  while(1)
  {
    if(K1 == 0)     //按鍵1按下,將num0寫入eeprom
    {
      Delay10ms(1);
      if(K1 == 0)
        {At24c02Write(2,num0);
        At24c02Write(3,num0);}
      while((n < 20)&&(K3==0))
      {
        n++;
        Delay10ms(1);  
      }      
      n=0;
      n=0;
    }
    if(K2 == 0)     //按鍵2按下,讀取eeprom數(shù)據(jù)
    {
      Delay10ms(1);
      if(K2 == 0)
        {num1 = At24c02Read(2);
        num2 = At24c02Read(3);  }
      while((n < 20)&&(K2 == 0))
      {
        n++;
        Delay10ms(1);  
      }      
      n=0;
    }      
    if(K3 == 0)     //按鍵3按下,使num0自加1
    {
      Delay10ms(1);
      if(K3 == 0)
        num0++;
      while((n < 50)&&(K3 == 0))
      {
        n++;
        Delay10ms(1);  
      }      
      n=0;
      if(num0==256)
        num0=0;
    }
    if(K4 == 0)     //按鍵4按下,清零
    {
      Delay10ms(1);
      if(K4 == 0)
        num0 = 0;
      while((n < 50) && (K4 == 0))
      {
        n++;
        Delay10ms(1);  
      }      
      n=0;
    }
    LCD_Display();  
  }
}
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    9005

    瀏覽量

    153780
  • 緩沖器
    +關(guān)注

    關(guān)注

    6

    文章

    2056

    瀏覽量

    47056
  • 數(shù)據(jù)存儲
    +關(guān)注

    關(guān)注

    5

    文章

    999

    瀏覽量

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

    關(guān)注

    11

    文章

    935

    瀏覽量

    44163
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    直插AT24C02存儲芯片認(rèn)識與使用#pcb設(shè)計(jì)

    fpga芯片存儲芯片24CAT24C02
    jf_97106930
    發(fā)布于 :2022年08月27日 10:00:34

    如何保存float型數(shù)據(jù)AT24C02或flash 存儲芯片

    chat和int型數(shù)據(jù)保存到AT24C02或flash芯片中,這個好辦,但是如何保存float型數(shù)據(jù)AT24C02或flash
    發(fā)表于 02-07 00:14

    【OneNET麒麟座試用體驗(yàn)】6.EEPROM存儲AT24C02的使用

    AT24C02是一款EEPROM存儲芯片,存儲大小只有256字節(jié),沒有聽錯,就是字節(jié),相比我們512K的Flash,那么這么小的空間能干什么呢? 因?yàn)镕lash只能整頁擦出再重新寫,而且Flash
    發(fā)表于 04-01 10:36

    AT24C02芯片工作原理是什么

    AT24C02芯片工作原理在IIC通信時,一般有寫和讀兩種操作,我們用AT24C02來具體講解。AT24C02芯片工作原理
    發(fā)表于 07-29 09:04

    如何使用IIC總線和AT24C02存儲芯片去讀寫代碼呢

    AT24C02存儲芯片有哪些功能特性?IIC總線有哪些特征呢?如何使用IIC總線和AT24C02存儲芯片去讀寫代碼呢?
    發(fā)表于 11-25 06:45

    AT24C02的相關(guān)資料推薦

    AT24C02(I2C總線)_AT24C02數(shù)據(jù)存儲&秒表(定時器掃描按鍵數(shù)碼管)小白極客的51單片機(jī)筆記(自用)第一部分—
    發(fā)表于 12-10 06:15

    AT24C02資料手冊

    at24c02資料手冊 中文資料很實(shí)用的at24c02資料
    發(fā)表于 03-22 17:38 ?83次下載

    讀寫AT24C02 并顯示

    關(guān)于AT24C02存儲芯片的介紹,便于各位查閱
    發(fā)表于 05-16 17:38 ?11次下載

    I2C_at24c02仿真程序

    iic 傳輸協(xié)議, at24c02 存儲芯片仿真,帶程序和protues電路圖
    發(fā)表于 06-17 17:40 ?32次下載

    AT24C02

    AT24C02
    發(fā)表于 01-24 16:00 ?13次下載

    AT24C02資料

    AT24C02資料
    發(fā)表于 12-06 17:14 ?29次下載
    <b class='flag-5'>AT24C02</b>資料

    AT24C02和AT240C04芯片存儲小數(shù)的代碼和工程文件免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是AT24C02和AT240C04芯片存儲小數(shù)的代碼和工程文件免費(fèi)下載。
    發(fā)表于 06-08 08:00 ?16次下載
    <b class='flag-5'>AT24C02</b>和AT240<b class='flag-5'>C</b>04<b class='flag-5'>芯片</b><b class='flag-5'>存儲</b>小數(shù)的代碼和工程文件免費(fèi)下載

    EEPROM存儲芯片AT24C02芯片手冊

    EEPROM存儲芯片AT24C02芯片手冊(嵌入式開發(fā)培訓(xùn)需要學(xué)多久)-EEPROM存儲芯片AT24C02
    發(fā)表于 07-30 13:20 ?184次下載
    EEPROM<b class='flag-5'>存儲芯片</b><b class='flag-5'>AT24C02</b><b class='flag-5'>芯片</b>手冊

    藍(lán)橋杯單片機(jī)——AT24C02存儲

    基礎(chǔ))AT24C02存儲器容量為256*8(2kB),通信接口采用雙線串行接口(SCL時鐘線、SDA串行數(shù)據(jù)線);雙線數(shù)據(jù)傳送協(xié)議為:ISO/IEC7816-3同步協(xié)議。寫字節(jié)時序:根
    發(fā)表于 11-23 17:36 ?28次下載
    藍(lán)橋杯單片機(jī)——<b class='flag-5'>AT24C02</b><b class='flag-5'>存儲</b>器

    Linux驅(qū)動開發(fā)-編寫(EEPROM)AT24C02驅(qū)動

    AT24C02是IIC接口的EEPROM存儲芯片,這顆芯片非常經(jīng)典,百度搜索可以找到非常多的資料,大多都是51、STM32單片機(jī)的示例代碼,大多采用模擬時序、裸機(jī)系統(tǒng)運(yùn)行。當(dāng)前文章介紹在Linux
    的頭像 發(fā)表于 09-17 15:29 ?4346次閱讀
    Linux驅(qū)動開發(fā)-編寫(EEPROM)<b class='flag-5'>AT24C02</b>驅(qū)動