18576478035 发表于 2021-4-10 17:16

24C16C读写不成功

Rand_Write_Eeprom(0,0X55);
a2b_test_data = Rand_Read_Eepeom(0);
//at24c16CËæ»úд
void        Rand_Write_Eeprom(u16 data_addr,u8 data)
{
          u8 ret ;
          u8 addr ;
                iic2key_Start();
                iic2key_SendByte(0xA0);
          ret = iic2key_Wait_Ack();
        //addr = data_addr>>8;
//          iic2key_SendByte(addr);                                //¼Ä´æÆ÷¸ßλ
//          ret = iic2key_Wait_Ack();
          addr = data_addr ;
          iic2key_SendByte(addr);                                //¼Ä´æÆ÷µÍλ
          ret = iic2key_Wait_Ack();                  
          iic2key_SendByte(data);
          ret = iic2key_Wait_Ack();                  
          iic2key_Stop();

}
//AT24C16CËæ»ú¶Á
u8        Rand_Read_Eepeom(u16 data_addr)
{
          u8 ret ;
          u8 addr ;
          u8 rec_data ;
                iic2key_Start();
                iic2key_SendByte(0xa0);
          ret = iic2key_Wait_Ack();
//          addr = data_addr>>8;
//          iic2key_SendByte(addr);                                //¼Ä´æÆ÷¸ßλ
//          ret = iic2key_Wait_Ack();
          addr = data_addr ;
          iic2key_SendByte(addr);                                //¼Ä´æÆ÷µÍλ
          ret = iic2key_Wait_Ack();                  
          iic2key_Start();
       iic2key_SendByte(0xa1);
          ret = iic2key_Wait_Ack();       
          rec_data = iic2key_RecvByte(1);
          iic2key_Stop();       
          return rec_data ;
}
调用24C16C随机读写函数ACK都是正常的,但是读取的值一直是0XFF是怎么回事??

ayb_ice 发表于 2021-4-12 13:34

写是需要时间的,虽然应答是成功的

cainiao518 发表于 2021-4-12 15:26

或许根本没写进去

18576478035 发表于 2021-4-13 09:45

已经做了延时处理了啊

18576478035 发表于 2021-4-13 09:47

正常的话是5MS,我已经在中间延时了500MS

ayb_ice 发表于 2021-4-13 09:50

18576478035 发表于 2021-4-13 09:47
正常的话是5MS,我已经在中间延时了500MS

那就是真有问题,检查程序

ayb_ice 发表于 2021-4-13 09:52

18576478035 发表于 2021-4-13 09:47
正常的话是5MS,我已经在中间延时了500MS

读写都发送0xa0地址肯定是不对的

18576478035 发表于 2021-4-13 11:12

ayb_ice 发表于 2021-4-13 09:52
读写都发送0xa0地址肯定是不对的

有啥问题呢?读的时候先发送A0在发送A1,

18576478035 发表于 2021-4-13 11:13

这个程序读写24C02和24C256都没有问题,这个C16C也是够奇怪的

ayb_ice 发表于 2021-4-13 11:24

18576478035 发表于 2021-4-13 11:12
有啥问题呢?读的时候先发送A0在发送A1,

是的,理解错了,

但你的程序并没有判断返回值,可能并没有正确返回,返回值判断调试的关键
其次要注意读取后要发送非应答位,

18576478035 发表于 2021-4-13 14:32

ayb_ice 发表于 2021-4-13 11:24
是的,理解错了,

但你的程序并没有判断返回值,可能并没有正确返回,返回值判断调试的关键


仿真的时候可以看到ret都是0 ,而且rec_data = iic2key_RecvByte(1);这个函数参数是1的时候就是非应答位

ayb_ice 发表于 2021-4-13 15:22

18576478035 发表于 2021-4-13 14:32
仿真的时候可以看到ret都是0 ,而且rec_data = iic2key_RecvByte(1);这个函数参数是1的时候就是非应答位 ...

返回都正确的话,就应该是正确的,现在不正确,肯定是有问题

仿真不代表真实情况,当然也可能是其它问题引起的
页: [1]
查看完整版本: 24C16C读写不成功