OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5994|回复: 8

IC》我把EE_TYPE改为AT24c512并加是#define AT24C512 65535 ,芯片的检测就无法通过了,大家怎么看????

[复制链接]

3

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2013-6-4
在线时间
3 小时
发表于 2013-7-3 04:28:06 | 显示全部楼层 |阅读模式
#define AT24C512 65535   //张恒修改
//Mini STM32开发板使用的是24c02,所以定义EE_TYPE为AT24C02
#define EE_TYPE AT24C512


我用的是战舰开发板,我把AT24c02的接口改了之后接自己的24c02可以通过自检,工作正常
但是我把EE_TYPE改为AT24c512之后并加上这行#define AT24C512 65535
自检就无法通过了,为什么???
我的24c512是还是新的啊 
大家试过没啊,求教各位
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

34

主题

63

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
222
金钱
222
注册时间
2013-9-25
在线时间
1 小时
发表于 2015-7-15 11:12:23 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
问题找到了
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));   

//IIC_Wait_Ack();    //这句去掉就OK了
    IIC_Send_Byte(ReadAddr%256);   
IIC_Wait_Ack();     
IIC_Start();        
IIC_Send_Byte(0XA1);       
IIC_Wait_Ack();  
    temp=IIC_Read_Byte(0);    
    IIC_Stop();     
return temp;
}
回复 支持 1 反对 0

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2013-7-3 10:47:57 | 显示全部楼层
你用的我们什么时候的代码?
试试这个:

ALIENTEK MINISTM32 实验16 IIC实验.rar

104.39 KB, 下载次数: 544

我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

34

主题

63

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
222
金钱
222
注册时间
2013-9-25
在线时间
1 小时
发表于 2015-7-14 14:48:18 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
我刚刚用您给的代码测试,读出来的数据不对,数据没能写进去,能指点下吗?原子先生,更改调试代码如下:

MCU是STM32F103R8T6,IIC端口还是PB10和PB11,EEPROM 是AT24C512

#define AT24C512 65535
#define EE_TYPE AT24C512

int main(void)
 {  

delay_init();        
NVIC_Configuration();   
uart_init(9600);  
 
  AT24CXX_Init();

while(1)
{

AT24CXX_WriteOneByte(0x0000,0xaa);
AT24CXX_WriteOneByte(0x0001,0x99);
if(USART_RX_STA&0x8000)
{
USART1->DR = AT24CXX_ReadOneByte(0x0000);
while((USART1->SR&0x40) == 0);
USART1->DR = AT24CXX_ReadOneByte(0x0001);
while((USART1->SR&0x40) == 0);
USART1->DR = AT24CXX_Check();
while((USART1->SR&0x40) == 0);
USART_RX_STA=0; 
}

}
}

u8 AT24CXX_Check(void)
{
u8 temp;
temp=AT24CXX_ReadOneByte(65535);    
if(temp==0X55)return 0;    
else
{
AT24CXX_WriteOneByte(65535,0X55);
    temp=AT24CXX_ReadOneByte(65535);   
if(temp==0X55)return 0;
}
return 1;   
}
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165516
金钱
165516
注册时间
2010-12-1
在线时间
2116 小时
发表于 2015-7-14 22:40:28 | 显示全部楼层
回复【3楼】kelly_li:
---------------------------------
加延时,然后先调通单个字节读写再说。
你放while里面,无延时,不妥。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

20

主题

102

帖子

0

精华

初级会员

Rank: 2

积分
183
金钱
183
注册时间
2013-7-17
在线时间
30 小时
发表于 2016-10-22 23:01:16 | 显示全部楼层
kelly_li 发表于 2015-7-15 11:12
回复【4楼】正点原子:
---------------------------------
问题找到了
u8&nbsp;AT24CXX_ReadOneByte(u16&nb ...

终于找到问题了
谢谢啦~~~
回复 支持 反对

使用道具 举报

26

主题

63

帖子

0

精华

高级会员

Rank: 4

积分
506
金钱
506
注册时间
2016-4-6
在线时间
102 小时
发表于 2017-3-2 12:56:01 | 显示全部楼层
你好  请问你的at24c512的驱动可以给我看看吗
回复 支持 反对

使用道具 举报

62

主题

275

帖子

4

精华

金牌会员

Rank: 6Rank: 6

积分
1155
金钱
1155
注册时间
2012-3-4
在线时间
80 小时
发表于 2018-1-2 14:44:03 | 显示全部楼层
机械式teli 发表于 2017-3-2 12:56
你好  请问你的at24c512的驱动可以给我看看吗

原子的代码去掉两个多余的ACK就可以了,当芯片大于16的时候
回复 支持 反对

使用道具 举报

3

主题

5

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2019-3-18
在线时间
7 小时
发表于 2020-3-21 23:02:40 | 显示全部楼层
我也遇见了这个问题,一直调不通,想问一下你是怎么解决的呀
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-23 05:25

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表