EEPROM(AT24C16)页写算法

本文介绍了在嵌入式开发中,针对AT24C16或与其兼容的FM24C16 EEPROM,如何优化页写算法以提高效率。传统的方法通常涉及复杂的逻辑检查,而作者从Linux驱动源码中获得灵感,简化了这一过程,通过几行关键代码实现高效页写操作。提供了一个简化版的页写算法示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 写在前面

      学习单片机或者从事嵌入式开发的,对于EEPROM绝不会陌生,尤其的24系列的EEPROM很是经典,或者与此兼容的FRAM系列,如AT24C02、AT24C16、FM24C16等。 驱动起这个系列的EEPROM,可以说是没有任何难点,各类教程、源码、驱动都可以轻松找到并作稍微改动即可使用。但是,对于使用技巧方面,大多的教程并不会提及,而只是作为学习“入门”的一个途径,真正在实际产品中使用,还需自身的经验去摸索改善。

2.EEPROM页写算法

        驱动起一片EEPROM,实现的功能不外乎就是读、写。在写过程中,有一个“页写”功能,如果是大量数据写入,采用“页写”功能会大大提高效率。记得以前学习单片机的时候,遵循的是某开发板的教程,其中的“页写”算法过于复杂,包括现在看来依然是比较累赘,所以已经把好多人搞懵逼。而且网络上大部分的源码几乎都是大同小异,质量不算高。大体思路是这样的:用逻辑语句实现,首先检查写入总数据字节数是否大于一页,然后进行下一步检查,开始地址是否为页的开始,剩下未满一页的数据怎样处理等等。逻辑上来说,只要多阅读、画个逻辑流程图分析,这样处理还是非常好理解的,但显得过于累赘。逻辑用数学语句描述&

以下是一份DSP28335通过I2C外扩M24M02存储大量数据的代码示例: ```c #include "DSP2833x_Device.h" #include "DSP2833x_Examples.h" #include "DSP2833x_I2C_defines.h" #include "DSP2833x_I2C.h" #define M24M02_I2C_ADDR 0x50 // M24M02 I2C地址 void M24M02_WriteByte(Uint16 addr, Uint16 data); Uint16 M24M02_ReadByte(Uint16 addr); void main(void) { InitSysCtrl(); // 系统时钟初始化 I2C_init(); // I2C初始化 // 入数据 M24M02_WriteByte(0x0000, 0x01); M24M02_WriteByte(0x0001, 0x02); M24M02_WriteByte(0x0002, 0x03); // 读取数据 Uint16 data1 = M24M02_ReadByte(0x0000); Uint16 data2 = M24M02_ReadByte(0x0001); Uint16 data3 = M24M02_ReadByte(0x0002); while(1); } // 入一个字节的数据 void M24M02_WriteByte(Uint16 addr, Uint16 data) { // 发送起始信号 I2C_start(I2caRegs.I2CSAR = M24M02_I2C_ADDR, I2C_WRITE); // 发送地址 I2C_write(addr >> 8); I2C_write(addr & 0xFF); // 发送数据 I2C_write(data); // 发送停止信号 I2C_stop(); } // 读取一个字节的数据 Uint16 M24M02_ReadByte(Uint16 addr) { Uint16 data; // 发送起始信号 I2C_start(I2caRegs.I2CSAR = M24M02_I2C_ADDR, I2C_WRITE); // 发送地址 I2C_write(addr >> 8); I2C_write(addr & 0xFF); // 发送重复起始信号 I2C_start(I2caRegs.I2CSAR = M24M02_I2C_ADDR, I2C_READ); // 读取数据 data = I2C_read(0); // 发送停止信号 I2C_stop(); return data; } ``` 在上面的代码中,我们定义了M24M02的I2C地址为0x50,并实现了M24M02_WriteByte和M24M02_ReadByte两个函数,用于入和读取一个字节的数据。在main函数中,我们分别入了0x01、0x02和0x03三个数据,并读取了这三个数据,然后进入了一个无限循环。在实际应用中,我们可以根据需要修改数据的地址和数据值,以及添加其他功能。
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Acuity.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值