• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

24c02的程序正常,换 了24c512就不行了

3fte 2017-05-11 浏览量:2057

同样的程序,在STC上,使用24c02就可以正常读写,由于容量不够,换了24c512 ,但是读不出来了。

使用的是I2C的接口,都是I2C啊,应该是一样的吧。

首先,程序是没有问题的,在24c02上是对的。

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 不一样的。

    看看手册上的两个协议吧。按协议改程序,或是找一下,有很多这样的程序

    https://wenku.baidu.com/view/5a69adeef8c75fbfc77db273.html

    这个是512的,地址有两个字节


    这个是02的,地址一个字节。



    • 发布于 2017-05-11
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:5
  • 程序感觉是不能通用的。

    一个是02一个是512,容量不同,我去找找手册,一会儿回答你。

    • 发布于2017-05-11
    • 举报
    • 评论 0
    • 0
    • 0

  • 单片机的I2C接口有寻址范围的,具体你可以参考一下这篇文章


    http://wenda.so.com/q/1367578047065801​

    • 发布于2017-05-11
    • 举报
    • 评论 0
    • 0
    • 0

  • 24c512容量是512kb 也就是64KB 地址位一个八位肯定不够 所以要用两个字节来选址
    • 发布于2017-05-12
    • 举报
    • 评论 0
    • 0
    • 0

  • 当然不一样,24c02的寻址空间和24c512不一样,24c02的容量为2*1024/8=256,寻址空间从0x00到0xff,而24c512的容量为512*1024/8=65535,寻址空间从0x0000到0xffff。由于IIC传输一个周期只能传一个字节的数据,因此24c02传输地址只需要一个IIC周期,即传输一次地址,而24c512却要两个IIC周期,即传输两次地址,先传高八位再传低八位。然后楼主可以看下这两个器件的读写函数有啥不同。



    int AT24C02_ReadOneByte(int addr)
    {  
    int temp=0;        
     IIC_Start();  
    IIC_Send_Byte(0xa0);
    IIC_Wait_Ack();
    IIC_Send_Byte(addr%256);
    IIC_Wait_Ack();    
    IIC_Start();     
    IIC_Send_Byte(0xa1);   
    IIC_Wait_Ack();  
      temp=IIC4_Read_Byte(0);   
      IIC_Stop();   
    return temp;
    }


    void AT24C02_WriteOneByte(int addr,char data)
    {          
    IIC_Start();  
    IIC_Send_Byte(0xa0);
    IIC_Wait_Ack();   
    IIC_Send_Byte(addr%256);
    IIC_Wait_Ack();     
    IIC_Send_Byte(data);       
    IIC_Wait_Ack();         
    IIC_Stop();
    }

    void AT24C512_WriteOneByte(int addr,char data)
    {          
    IIC_Start();  
    IIC_Send_Byte(0xa0);
    IIC_Wait_Ack();
    IIC_Send_Byte(addr>>8);
    IIC_Wait_Ack();   
    IIC_Send_Byte(addr%256);
    IIC_Wait_Ack();     
    IIC_Send_Byte(data);       
    IIC_Wait_Ack();         
    IIC_Stop();
    }


    int AT24C512_ReadOneByte(int addr)
    {  
    int temp=0;        
    IIC_Start();  
    IIC_Send_Byte(0xa0);
    IIC_Wait_Ack();
    IIC_Send_Byte(addr>>8);   
    IIC_Wait_Ack(); 
    IIC_Send_Byte(addr%256);
    IIC_Wait_Ack();    
    IIC_Start();     
    IIC_Send_Byte(0xa1);   
    IIC_Wait_Ack();  
      temp=IIC_Read_Byte(0);   
      IIC_Stop();   
    return temp;
    }

    • 发布于2017-05-11
    • 举报
    • 评论 0
    • -1
    • 0

相关问题

问题达人换一批

24c02的程序正常,换 了24c512就不行了