原子的模拟IIC驱动24c64读取数据一直是0xFF

2019-07-20 23:16发布

 我移植正点原子的模拟IIC程序之后,根据我的硬件做了如下修改:
1、修改头文件的宏定义为“#define EE_TYPE AT24C64”驱动24c64,
2、配置PA0为SCL,  A1为SDA.
3、修改初始化以及头文件里面的输入输出为PA0和PA1.

在main()中依然添加此函数:
u8 AT24CXX_Check(void)
{
u8 temp;
temp=AT24CXX_ReadOneByte(255);//避免每次开机都写AT24CXX    
if(temp==0X55)return 0;    
else//排除第一次初始化的情况
{
AT24CXX_WriteOneByte(255,0X55);
    temp=AT24CXX_ReadOneByte(255);   
if(temp==0X55)return 0;
}
return 1;   
}

我仿真进入此函数之后,每次读出来的temp=0xFF.
一直很郁闷,不知道问题到底出在哪里?请帮忙分析一下。谢谢。 
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
33条回答
79lonely
1楼-- · 2019-07-21 02:48
回复【8楼】驯马师:
---------------------------------
请问一下 我也出现了temp=0xff 的情况 请问多了那个ACK
正点原子
2楼-- · 2019-07-21 07:42
[mw_shl_code=c,true]//在AT24CXX指定地址读出一个数据 //ReadAddr:开始读数的地址 //返回值 :读到的数据 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);//发送高地址 }else IIC_Send_Byte(0XA0+((ReadAddr/256)<<1)); //发送器件地址0XA0,写数据 IIC_Wait_Ack(); IIC_Send_Byte(ReadAddr%256); //发送低地址 IIC_Wait_Ack(); IIC_Start(); if(EE_TYPE>AT24C16)IIC_Send_Byte(0XA1); //进入接收模式 else IIC_Send_Byte(0XA1+((ReadAddr/256)<<1)); //进入接收模式 IIC_Wait_Ack(); temp=IIC_Read_Byte(0); IIC_Stop();//产生一个停止条件 return temp; } //在AT24CXX指定地址写入一个数据 //WriteAddr :写入数据的目的地址 //DataToWrite:要写入的数据 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); //发送字节 IIC_Wait_Ack(); IIC_Stop();//产生一个停止条件 delay_ms(10); }[/mw_shl_code] 这是最新代码,没有多ACK的
多的是在>24C16这个if的最后,会有个ACK,实际是不需要的。
冰是睡着的水
3楼-- · 2019-07-21 09:08
回复【楼主位】驯马师:
---------------------------------
你还没有修改完毕!!有个.h文件。。。
驯马师
4楼-- · 2019-07-21 11:54
 精彩回答 2  元偷偷看……
冰是睡着的水
5楼-- · 2019-07-21 15:46
回复【3楼】驯马师:
---------------------------------
原子的驱动可以支持64的。。你看看是不是硬件的问题。
正点原子
6楼-- · 2019-07-21 21:12
看你用的是不是最新的,老版本的读写多了一个ACK,要去掉。新版本的去掉了。

一周热门 更多>