Linux平台I2C多字节数据、按页连续读写E2PROM Demo(AT24C16)

1)Linux 平台I2C多字节数据按页连续读写E2PROM之AT24C16小知识,分享给将要学习或者正在学习Linux平台I2C多字节按页连续读写E2PROM开发的同学。

2)内容属于原创,若转载,请说明出处。

3)提供相关问题有偿答疑和支持。

我测试使用的是 E2PROM(AT24C16)芯片,其中内部地址是1010 外部的地址(A0~A2)是接地000,因此实际测试的时候需要将地址右移一位:0x50,先使用i2c的测试工具来dump下数据:

下面来测试一次性写5字节数据:从0地址开始(源码1)


实际测试当一次性向0地址发送超过16字节的时候,就会覆盖前面的地址数据:

因此对于E2PROM可能一次性最大的写地址数据长度值16字节,超过16字节需要换地址;下面是改进的写,写全部的寄存货器地址:(源码2)



如下是测试写完以后读取数据:

读数据发现和写数据不一样,读数据可以连续读:(源码3)

疑问:当一次性向0地址发送超过16字节的时候,就会覆盖前面的地址数据,为什么?
首先以上的Demo本身支持一次性发送多个字节,但是由于E2PROM的原因限制,一次最多可以发送16字节,为什么呢?下面看下E2PROM的数据手册,我是用测试的AT24C16:

手册上说AT24C16支持字节写和页写模式:字节写就是一个地址一个数据的写;页写是连续写数据,一个地址多个数据的写,但是页写不能自动跨页,如果超出一页长度,超出的数据会覆盖原先写入的数据。

一页最多写16字节:

因此以上源码需要修改,使用每当16字节写完,需要换页才可以正确的写。完整源码已经附在主页有链接。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值