打印

AT24C512的读写问题

[复制链接]
3508|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Angel3598|  楼主 | 2013-2-26 18:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
为什么AT24C512的连续写和连续读不行呢,读出来的总是FF,不知道是没有连续写有问题还是连续读有问题,哪位大哥指点一下,非常感谢。
沙发
uet_cache| | 2013-2-26 19:00 | 只看该作者
你的问题太大了。你可以用好的硬件对存储芯片指定地址写指定数据。用你的硬件对该地址只读。读对了,再考虑写的问题。

使用特权

评论回复
板凳
Angel3598|  楼主 | 2013-2-26 20:23 | 只看该作者
uet_cache 发表于 2013-2-26 19:00
你的问题太大了。你可以用好的硬件对存储芯片指定地址写指定数据。用你的硬件对该地址只读。读对了,再考虑 ...

大哥 你帮我看下


unsigned char I2C_WritePageByte(unsigned char *SendByte, unsigned char length, unsigned int  WriteAddress, unsigned char DeviceAddress)
{               
    if(!I2C_Start())
                        return FALSE;
    I2C_SendByte( DeviceAddress );//设置器件地址
    if(!I2C_WaitAck()){I2C_Stop(); return FALSE;}
    I2C_SendByte((unsigned char)((WriteAddress>>8)&0XFF));   //设置高起始地址              
    I2C_WaitAck();
    I2C_SendByte((unsigned char)(WriteAddress&0XFF));
    I2C_WaitAck();
    while(length!=0)
                {
      I2C_SendByte(*SendByte);
                        Systick_Delay_1ms(3);
                        if(length == 1)I2C_NoAck();
      else I2C_Ack();                                
                        SendByte++;
                        length--;
                        //Systick_Delay_1ms(3);
                }
    //I2C_WaitAck();   
    I2C_Stop();
        //注意:因为这里要等待EEPROM写完,可以采用查询或延时方式(10ms)
    Systick_Delay_1ms(3);
    return TRUE;
}
这个是写
//读出1串数据         存放读出数据  待读出长度      待读出地址       器件类型(24c16或SD2403)       
unsigned char I2C_ReadByte(char* pBuffer,   unsigned char length,     unsigned int  ReadAddress, unsigned char DeviceAddress)
{               
    if(!I2C_Start())return FALSE;
    I2C_SendByte(DeviceAddress);//器件地址
    if(!I2C_WaitAck()){I2C_Stop(); return FALSE;}   
          I2C_SendByte((unsigned char)((ReadAddress>>8)&0XFF));   //设置低起始地址           
    I2C_WaitAck();       
    I2C_SendByte((unsigned char)(ReadAddress&0XFF));
    I2C_WaitAck();       
    I2C_Start();
    I2C_SendByte( DeviceAddress | 0x01);
    I2C_WaitAck();
    while(length)
    {
      *pBuffer = I2C_ReceiveByte();
      if(length == 1)I2C_NoAck();
      else I2C_Ack();
      pBuffer++;
      length--;
    }
    I2C_Stop();
    return TRUE;
}
这个是读

怎么就是不行呢 是什么地方的原因啊

使用特权

评论回复
地板
Angel3598|  楼主 | 2013-2-26 20:23 | 只看该作者
大家 看看留点意见啊 谢谢 各位!!

使用特权

评论回复
5
lirunze| | 2013-8-18 16:01 | 只看该作者
我也遇到这个问题了啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

24

帖子

0

粉丝