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条回答
zhangqing1001
1楼-- · 2019-08-17 11:04

注释掉这里的代码试一下

我这里24c128是可以的

八度空间
2楼-- · 2019-08-17 12:52
回复【楼主位】ChrisLiu1017:
---------------------------------
注意芯片A0、A1、A2这几个管脚的定义,A0、A1是硬件设备地址选择,A2是选择存储区域用的
ChrisLiu1017
3楼-- · 2019-08-17 15:57
這我有看Datasheet A0~A2是chip select. 在硬件上都接地.
程式碼用原子哥的,無法正常讀寫。
八度空间
4楼-- · 2019-08-17 21:40
 精彩回答 2  元偷偷看……
八度空间
5楼-- · 2019-08-18 01:13
或者你用我这个试下,还在测试阶段的,完全按照思路来的,估计还存在很多bug,呵呵
beyond696
6楼-- · 2019-08-18 06:01
USB-I2C适配器:
http://item.taobao.com/item.htm?spm=a230r.1.14.3.BNa6Zp&id=15219447009

一周热门 更多>