EEPROM 24LC256問題請教

2019-08-17 05:23发布

目前拿到一顆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; 
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
ChrisLiu1017
1楼-- · 2019-08-18 08:18
感謝各位回覆~問題已解決~~
toddchen
2楼-- · 2019-08-18 11:55
回复【7楼】ChrisLiu1017:
---------------------------------
哥们儿,如何解决的,我也遇到相同问题了,求解哈
cddxcdx
3楼-- · 2019-08-18 13:04
 精彩回答 2  元偷偷看……
muhongqing
4楼-- · 2019-08-18 17:46
怎么解决的?   给个例子看看?
qsjit
5楼-- · 2019-08-18 19:46
toddchen 发表于 2014-1-23 13:29
EEPROM太小,现在还要用吗?&nbsp;FLASH中划一块也比24C02大。
如果嫌小,W25QXX的不是也好用吗?&nbsp;那 ...

E2还是有很多特性不可替代,比如说字节擦除,少量数据要频繁改写的时候很有用。速度也快很多,擦一个字节和擦4K的扇区速度不问可知……

一周热门 更多>