蓝桥杯嵌入式——24C02存储器基本原理

介绍

24C02存储器容量为258个字节,也就是258×8个位 = 2K个位(2KB),2000个bit

24C04对应4KB, 24C08对应8KB

24C02的芯片地址为1010(A)    (Read=1,Write=0)   0xA1读 0xA0写

因为A2 A1 A0分别对应下图中的E3 E2 E1而他们都接地对应为1010 000,最后一位由读或写决定

所以24C02的地址只能为1010 0000(0xA0)   或1010 0001(0xA1)

写操作时序

写字节时序

开始态——>器件地址——>首字节地址(从256个字节的哪一个开始写)——>要写入的数据——>停止态

写页面时序

AT24C02写

void i2c_write(unsigned char *pucBuf, unsigned char ucAddr, unsigned char ucNum)
                  /* *pucBuf: 写的内容,从数组里取   
                      ucAddr: 要写的那个字节的地址      
                      ucNum:  从写的内容往后推要写多少个数据
                  */
{
    I2CStart();
    I2CSendByte(0xa0);            //发送器件地址,以写的方式访问
    I2CWaitAck();                //等待应答

    I2CSendByte(ucADDr);          //发送字节地址
    I2CWaitAck();

    while (ucNum--)                //循环ucNum次
 {
     I2CSendByte(*pucBuf++);        //发送数据
     I2CWaitAck();



 }  
    I2CStop();
    delay(500);

}
//如果*pucBuf等于一个数组S,ucAddr等于8,ucNum等于10,
则EEPROM会把数组里从S[0]开始到S[9]这几个数据写入从8开始到17这几个字节地址里

i2c_write(s, 8, 10);




读操作时序

void i2c_read(unsigned char* pucBuf, unsigned char ucAddr, unsigned char ucNum)
              /*pucBuf:把读到的数据放入pucBuf这个数组里  
                ucAddr: 读24C02里哪个地址的内容  
                ucNum : 从这个地址开始我们要读几个内容     */

{
    I2Cstart();
    I2CSendByte(0xa0);        //0:先写器件地址
    I2CWaitAck();

    I2CSendByte(ucAddr);      //再写进去我要读的位置 ,接下来读的时候直接读器件地址它就会自动去看写的字节地址
    I2CWaitAck();

     I2Cstart();
     I2CSendByte(0xa1);       //1:读这个器件地址
     I2CWaitAck();

     while(ucNum--)
{
    *pucBuf++ = I2CReceiveByte();    //根据上一个阶段写的字节地址开始读并返回到数组里,读几个就控制几次循环
    if(ucNum)
        I2CSendAck();            //每读完一个字节都要发送一次ACk应答信号
    else
        I2CSendNotAck();             //直到最后一次就不发ACK信号

}


    I2CStop();
}

                                                                                                                                                                                                                        笔记来自蚂蚁工厂科技教程

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值