OpenEdv-开源电子网

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

MINI 板子 iic 使用24C256的一个 bug

[复制链接]

3

主题

18

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
214
金钱
214
注册时间
2013-8-31
在线时间
41 小时
发表于 2017-5-25 00:31:35 | 显示全部楼层 |阅读模式
由于要使用24wc256 将原来板子上的02 更换为256
1.修改24cxx.h文件下的      #define EE_TYPE AT24C256
2.修改24cxx.c 文件下的     u8 AT24CXX_Check(void)
[mw_shl_code=applescript,true]u8 AT24CXX_Check(void)
{
        u8 temp;
        temp=AT24CXX_ReadOneByte(32767);//                          
        if(temp==0X55)return 0;                  
        else
        {
                AT24CXX_WriteOneByte(32767,0X55);
            temp=AT24CXX_ReadOneByte(32767);          
                if(temp==0X55)return 0;
        }
        return 1;                                                                                          
}[/mw_shl_code]
测试出现乱码
开机 单独读一个字节时 正确 再读错误为255
此时bug出现   2.3  和3.0 的例程里面均有该bug
下面为3.0例程的 源程序
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();
    IIC_Send_Byte(ReadAddr%256);  
    IIC_Wait_Ack();        
    IIC_Start();              
    IIC_Send_Byte(0XA1);           //&#189;&#248;&#200;&#235;&#189;&#211;&#202;&#213;&#196;&#163;&#202;&#189;               
    IIC_Wait_Ack();     
    temp=IIC_Read_Byte(0);           
    IIC_Stop();//&#178;ú&#201;ú&#210;&#187;&#184;&#246;&#205;&#163;&#214;&#185;&#204;&#245;&#188;&#254;        
    return temp;
}

eeprom大于 16时就会使用高低地址  源程序出错在使用了两次等待应答   将上面的应答屏蔽即可 如下
u8 AT24CXX_ReadOneByte(u16 ReadAddr)
{                  
    u8 temp=0;                                                                                   
    IIC_Start();  
    if(EE_TYPE>AT24C16)
    {
        IIC_Send_Byte(0XA0);       //·&#162;&#203;&#205;&#208;&#180;&#195;ü&#193;&#238;
        IIC_Wait_Ack();
        IIC_Send_Byte(ReadAddr>>8);//·&#162;&#203;&#205;&#184;&#223;&#181;&#216;&#214;·
//        IIC_Wait_Ack();           屏蔽或者删除即可
    }else IIC_Send_Byte(0XA0+((ReadAddr/256)<<1));   //·&#162;&#203;&#205;&#198;÷&#188;&#254;&#181;&#216;&#214;·0XA0,&#208;&#180;&#202;&#253;&#190;&#221;      

    IIC_Wait_Ack();
    IIC_Send_Byte(ReadAddr%256);   //·&#162;&#203;&#205;&#181;&#205;&#181;&#216;&#214;·
    IIC_Wait_Ack();        
    IIC_Start();              
    IIC_Send_Byte(0XA1);           //&#189;&#248;&#200;&#235;&#189;&#211;&#202;&#213;&#196;&#163;&#202;&#189;               
    IIC_Wait_Ack();     
    temp=IIC_Read_Byte(0);           
    IIC_Stop();//&#178;ú&#201;ú&#210;&#187;&#184;&#246;&#205;&#163;&#214;&#185;&#204;&#245;&#188;&#254;        
    return temp;
}


再次测试问题解决
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

17

主题

111

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
252
金钱
252
注册时间
2012-11-3
在线时间
30 小时
发表于 2017-5-25 08:39:31 | 显示全部楼层
谢谢分享。换成AT24C256,确实用不了
老夫驾鹤,有事烧纸!
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-8-20 21:51

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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