OpenEdv-开源电子网

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

24C02改为24c08,check()函数一直读出0xFF

[复制链接]

3

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
140
金钱
140
注册时间
2016-10-18
在线时间
24 小时
发表于 2018-11-19 12:12:39 | 显示全部楼层 |阅读模式
1金钱
24c02读写正常,将24c02芯片换为24C08,check()返回一直是0xFF?代码如下:
u8 AT24CXX_ReadOneByte(u16 ReadAddr)
{                                  
        u8 temp=0;                                                                                                                                                               
        IIC_Start();  
        ///Devices Addr
        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();
       
        ///data Addr
        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;
}


void AT24CXX_WriteOneByte(u16 WriteAddr,u8 DataToWrite)
{                                                                                                                                                                                          
    IIC_Start();
        ///Devices Addr
        if(EE_TYPE>AT24C16)
        {
                IIC_Send_Byte(0XA0);          
                IIC_Wait_Ack();
                IIC_Send_Byte(WriteAddr>>8);
        }else
        {
                IIC_Send_Byte(0XA0+((WriteAddr/256)<<1));  
        }         
        IIC_Wait_Ack();
       
        ///Data Addr:
        IIC_Send_Byte(WriteAddr%256);   
        IIC_Wait_Ack();        
       
        ///Data:
        IIC_Send_Byte(DataToWrite);                                                     
        IIC_Wait_Ack();                                
        IIC_Stop();
        //delay_ms(10);       
        delay_ms(20);                
}

u8 AT24CXX_Check(void)
{
        u8 temp;
        temp=AT24CXX_ReadOneByte(55);          
        if(temp==0X55) return 0;                  
        else
        {
                AT24CXX_WriteOneByte(55,0X55);
                delay_ms(2);///
                temp=AT24CXX_ReadOneByte(55);          
                if(temp==0X55) return 0;
        }
        return 1;                                                                                          
}

引脚配置:
无标题.jpg
按大家说的方法,将SDA改为推完输出或开漏输出,初始check均返回0xFF(check中的位置,我用的是55,0~1023其他地址也试了,均返回0xFF);
24c08应该没有问题,换过一片,仍然不好用。
原来板上用的是24c02没有问题,现在改为24C08就不好用了,大家帮忙看看哪用问题,万分感谢

最佳答案

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-11-19 12:12:40 | 显示全部楼层
自然谷 发表于 2018-11-20 11:29
原子哥,我是按你的电路自己焊的一个实验板,引脚配置是正确的。现在可以正常访问24c08了。但有个问题不 ...

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2018-11-20 02:25:43 | 显示全部楼层
代码都不对。。。IO配置的代码有问题
回复

使用道具 举报

3

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
140
金钱
140
注册时间
2016-10-18
在线时间
24 小时
 楼主| 发表于 2018-11-20 11:29:06 | 显示全部楼层
正点原子 发表于 2018-11-20 02:25
代码都不对。。。IO配置的代码有问题

原子哥,我是按你的电路自己焊的一个实验板,引脚配置是正确的。现在可以正常访问24c08了。但有个问题不明,如图: wenti.png
芯片手册中起始时序是SCL稳定,改变SDA;这时程序不应该是SCL=1;放到SDA=1;这句之前吗?
回复

使用道具 举报

2

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2019-5-8
在线时间
20 小时
发表于 2019-5-9 16:00:05 来自手机 | 显示全部楼层
24c02改为24c08 程序哪地方改了呀  
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-21 01:44

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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