初级会员

- 积分
- 99
- 金钱
- 99
- 注册时间
- 2014-7-11
- 在线时间
- 9 小时
|
20金钱
原子大哥,我将开发板上的AT24C02改成了AT24C04的4K大小的EEPROM,然后将例程代码重新修改了下,发现当读写高地址大于等于256地址空间数据的时候,单次读写,读出的数据都是正常的,但是我连续从256地址开始写入4Byte数据,然后再从256地址开始读数据,就不正常了,这是怎么回事呢?我的代码如下:[mw_shl_code=c,true]这是我写函数:
uint8_t EEPROM_WriteByte(uint16_t Write_Addr, uint8_t Write_Data)
{
I2C2_Start();
if(Write_Addr<256)
{
I2C2_SendByte(0XA0+((Write_Addr/256)<<1));
}
else
{
I2C2_SendByte(0XA0);
if(!I2C2_WaitAck())
{
I2C2_Stop();
return 0;
}
I2C2_SendByte(Write_Addr>>8);
}
if(!I2C2_WaitAck())
{
I2C2_Stop();
return 0;
}
I2C2_SendByte(Write_Addr%256);
if(!I2C2_WaitAck())
{
I2C2_Stop();
return 0;
}
I2C2_SendByte(Write_Data);
if(!I2C2_WaitAck())
{
I2C2_Stop();
return 0;
}
I2C2_Stop();
delay_ms(10);
return TRUE;
}
这是我读函数:
uint8_t EEPROM_ReadByte(uint16_t Read_Addr,uint8_t *read_Data)
{
uint8_t chipaddr, offsetaddr;
uint8_t Read_Data;
I2C2_Start();
if(Read_Addr<256)
{
I2C2_SendByte(0XA0+((Read_Addr/256)<<1));
}
else
{
I2C2_SendByte(0XA0);
if(!I2C2_WaitAck())
{
I2C2_Stop();
return 0;
}
I2C2_SendByte(Read_Addr>>8);
}
if(!I2C2_WaitAck())
{
I2C2_Stop();
return 0;
}
I2C2_SendByte(Read_Addr%256);
if(!I2C2_WaitAck())
{
I2C2_Stop();
return 0;
}
I2C2_Start();
I2C2_SendByte(0xA1);
if(!I2C2_WaitAck())
{
I2C2_Stop();
return 0;
}
*read_Data = I2C2_ReceiveByte();
I2C2_Stop();
return 1;
}
这是我的测试程序:(一下方式读出的temp数据试写入的数据)
rlt1 = EEPROM_WriteByte(257,0x40);//255
if(rlt1 != 1)
return 0;
rlt2 = EEPROM_ReadByte(257,&temp);
if(rlt2 != 1)
return 0;
一下代码操作读出的数据就不正常了:
for(i = 0; i < 4; i++)
{
rlt1 = EEPROM_WriteByte(256+i,wr_buf);//255
if(rlt1 != 1)
return 0;
}
for(i = 0; i < 4; i++)
{
rlt1 = EEPROM_ReadByte(256+i,&rev_buf);//255
if(rlt1 != 1)
return 0;
}
请教下论坛中各位大神及原子大哥帮忙看看这是怎么回事呢[/mw_shl_code]
|
|