OpenEdv-开源电子网

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

at24c256写数据会覆盖之前的

[复制链接]

6

主题

13

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2016-3-9
在线时间
10 小时
发表于 2016-3-9 20:19:53 | 显示全部楼层 |阅读模式
1金钱
我用at24c256来存储商品信息,每条数据结构是  1,萝卜,2.5,1   最长也超不过30,发送这样的5条,然后读取都OK,但是发送超过5条后,后面的就把最前面的给覆盖了。
但是我直接写地址1000,读1000又可以读出来,不晓得是不是分页有关,用的原子哥 IIC的例子,好像没有分页的功能,求例程,感激不尽!
ceshi1.jpg

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

使用道具 举报

10

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1831
金钱
1831
注册时间
2014-6-27
在线时间
980 小时
发表于 2016-3-9 21:02:08 | 显示全部楼层
/*********************************************************************
写数据,考虑跨页问题,只需要关心写入起始地址即可
返回:0,操作失败,1操作成功
*********************************************************************/
u8 AT24CXX_PageWrite(u16 WriteAddr, u8 *buf, u16 Len)
{
        u8 wr_page,wr_offset,x;
        wr_offset=I2C_PageSize-WriteAddr%I2C_PageSize;//起始地址所在的页还可以写入数据的个数
        if(Len>wr_offset)//需要跨页写,如果wr_offset为I2C_PageSize,刚好是一个页的开始
        {
                x=AT24CXX_WriteLenByte(WriteAddr, buf, wr_offset);//x=0,操作IIC失败,下面操作没必要了
                if(x)
                {
                        Len-=wr_offset;buf+=wr_offset;WriteAddr+=wr_offset;//重新定位
                        wr_page=Len/I2C_PageSize;//重新计算要写入的页数量
                        wr_offset=Len%I2C_PageSize;//重新计算页偏移量?
                       
                        while(wr_page)//写入整页数据
                        {
                                AT24CXX_WriteLenByte(WriteAddr, buf, I2C_PageSize);
                                buf+=I2C_PageSize;
                                WriteAddr+=I2C_PageSize;
                                wr_page--;
                               
                        }
                        if(wr_offset)//不够一页的数据
                        {
                                AT24CXX_WriteLenByte(WriteAddr, buf, wr_offset);
                        }
                               
                }
               
        }
        else//可以在当前起始地址所在的页写入
        {
                x=AT24CXX_WriteLenByte(WriteAddr, buf, Len);
        }
        return x;   
}
这个函数是可以的,你可以试试,C256的页大小是64字节。
回复

使用道具 举报

6

主题

13

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2016-3-9
在线时间
10 小时
 楼主| 发表于 2016-3-10 16:13:40 | 显示全部楼层
本帖最后由 zrworkingroom 于 2016-3-10 16:18 编辑
TinyBoy 发表于 2016-3-9 21:02
/*********************************************************************
写数据,考虑跨页问题,只需要 ...

谢谢你,但I2C_PageSize提示没这个变量,能否把整个例子发给我。谢谢
回复

使用道具 举报

10

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1831
金钱
1831
注册时间
2014-6-27
在线时间
980 小时
发表于 2016-3-10 17:54:21 | 显示全部楼层
zrworkingroom 发表于 2016-3-10 16:13
谢谢你,但I2C_PageSize提示没这个变量,能否把整个例子发给我。谢谢

你试试看,应该没啥问题的。

IIC.zip

3.31 KB, 下载次数: 526

回复

使用道具 举报

6

主题

13

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2016-3-9
在线时间
10 小时
 楼主| 发表于 2016-3-10 20:11:47 | 显示全部楼层
TinyBoy 发表于 2016-3-10 17:54
你试试看,应该没啥问题的。

你好,能麻烦加下你QQ或者你加下我QQ聊吗?提示缺少一些文件。谢谢,我Q 870860332
回复

使用道具 举报

1

主题

42

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
317
金钱
317
注册时间
2018-4-24
在线时间
53 小时
发表于 2019-9-28 17:09:17 | 显示全部楼层
mark   ~
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-8 10:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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