目前拿到一顆EEPROM 256K
使用原子的碼修改#define EE_TYPE AT24C256
AT24CXX_WriteOneByte(511,0x55);
但讀到的temp=AT24CXX_ReadOneByte(511); temp=0xFF;
下列是原子的代碼,找了論坛很多版本看起來都沒問題,之前在用24LC02時也沒問題。
請問還需要修改那裡才OK。
void AT24CXX_WriteOneByte(u16 WriteAddr,u8 DataToWrite)
{
IIC_Start();
if(EE_TYPE>AT24C16)
{
IIC_Send_Byte(0XA0); //發送寫命令
IIC_Wait_Ack();
IIC_Send_Byte(WriteAddr>>8);//發送高地址
}else
{
IIC_Send_Byte(0XA0+((WriteAddr/256)<<1)); //發送器地址0XA0,寫數據
}
IIC_Wait_Ack();
IIC_Send_Byte(WriteAddr%256); //發送低地址
IIC_Wait_Ack();
IIC_Send_Byte(DataToWrite); //發送Data
IIC_Wait_Ack();
IIC_Stop(); //產生一個停止指令
delay_ms(10);
}
u8 AT24CXX_ReadOneByte(u16 ReadAddr)
{
u8 temp=0;
IIC_Start();
if(EE_TYPE>AT24C16)
{
IIC_Send_Byte(0XA0); //開送寫的命令
IIC_Wait_Ack();
IIC_Send_Byte(ReadAddr>>8);//發送高位址
//IIC_Wait_Ack();
}else IIC_Send_Byte(0XA0+((ReadAddr/256)<<1)); //發送器件位址0XA0,寫資料
IIC_Wait_Ack();
IIC_Send_Byte(ReadAddr%256); //發送低位址
IIC_Wait_Ack();
IIC_Start();
//IIC_Send_Byte(0XA1+((ReadAddr/256)<<1)); //進入接收模式
IIC_Send_Byte(0xA1);
IIC_Wait_Ack();
temp=IIC_Read_Byte(0);
IIC_Stop(); //產生一個停止條件
return temp;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
---------------------------------
哥们儿,如何解决的,我也遇到相同问题了,求解哈
E2还是有很多特性不可替代,比如说字节擦除,少量数据要频繁改写的时候很有用。速度也快很多,擦一个字节和擦4K的扇区速度不问可知……
一周热门 更多>