打印

AT24C512 写入数据每256个地址写入相同数据问题

[复制链接]
2773|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zzzzzzzzz1111|  楼主 | 2021-11-11 21:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在使用AT24C512数据过程中,当向地址0写入数据时,地址256、512、(累加256)都会同时写入这个数据。向向地址1写入数据时,地址257、513、(累加256),其他地址也是相同情况。写入数据和读取数据都是正确没问题的  这样相当于最后只用到了256个地址,找不到任何问题,芯片也换了3个了,买了不同店的芯片。这是写入数据的代码,看哪位大拿能指点下,或者有遇到过类似问题的没有
//**********************************************//
//函数名称: void write_rom(uchar addr, uchar data)
//函数功能: 写数据到 ROM
//传入参数: addr 写入的地址
//返回参数: write_rom 待写入的数据
//编写时间: 2021-10-16
//**********************************************//
void write_rom(int addr, uchar data1)
{
        uchar ch,i;
        start_rom() ;
        write_byte_rom(0xA0) ; //选择写操作
        ack_rom() ;
        ch=(unsigned char)addr/256;
        write_byte_rom(ch) ; //写入地址高八位
        ack_rom() ;
        ch=(unsigned char)addr%256;
        write_byte_rom(ch) ; //写入地址低八位
        ack_rom() ;
        write_byte_rom(data1) ; //写入数据
        ack_rom() ;
        stop_rom() ;
        for(i=0x20; i!=0; i--)
        {
                delay5us() ;
                delay5us() ;
                delay5us() ;
                delay5us() ;
                delay5us() ;
                delay5us() ;
                delay5us() ;
                delay5us() ;
                delay5us() ;
                delay5us() ;
                delay5us() ;
                delay5us() ;
                delay5us() ;
}
}

使用特权

评论回复

相关帖子

沙发
ningling_21| | 2021-11-12 08:44 | 只看该作者
如果能排除了硬件或许是程序问题

使用特权

评论回复
板凳
qiangtech| | 2021-11-12 09:14 | 只看该作者
用逻辑分析仪监视一下I2C的通迅,或许可以很快发现问题。

使用特权

评论回复
地板
hxfxt| | 2021-11-12 14:43 | 只看该作者
在某一个地址写一个数据,示波器观察下I2C线上是否有对其他地址进行操作的情况。排除程序的问题

使用特权

评论回复
5
elife| | 2021-11-12 19:29 | 只看该作者
没有用过,芯片都有问题也不应该。你是怎么确认其他的地址都被改写了,或许读的程序有问题,其实没有写到其他地址。分析一下你读芯片的接口数据。

使用特权

评论回复
6
study1234| | 2021-11-16 08:31 | 只看该作者
ch=(unsigned char)addr/256
此语句错误,结果是ch永远为0

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝