说明

数据手册
使用arduino的Wire库来读写at24cxx,可以支持at24c02、at24c08、at24c16、at24c32、at24c64。支持24cxx的随机读写以及顺序读写功能

代码

at24cxx.c

#include <Arduino.h>
#include <Wire.h>
#include "at24cxx.h"void at24cxx_init(void)
{Wire.begin();
}static void at24cxx_wait(int slave)
{int resault = 0;do{Wire.beginTransmission(slave);resault = Wire.endTransmission();} while (resault != 0);
}void at24cxx_write_byte(int slave, int addr, int data)
{at24cxx_wait(slave);Wire.beginTransmission(slave);Wire.write(addr);  /*发送写地址*/Wire.write(data);  /*写数据*/Wire.endTransmission();
}int at24cxx_read_byte(int slave, int addr)
{int  ret = 0xFF;at24cxx_wait(slave);Wire.beginTransmission(slave);Wire.write(addr);  /*发送读地址*/Wire.endTransmission();   /*读数据*/Wire.requestFrom(slave, 1);ret = Wire.read();return ret;
}int at24cxx_write(int slave, int addr, const uint8_t *buf, int buflen)
{int left_len = buflen;int send_len = PAGE_SIZE-(addr%PAGE_SIZE);send_len = (left_len>send_len) ? send_len:left_len;while(left_len){at24cxx_wait(slave);Wire.beginTransmission(slave);Wire.write(addr);  /*发送写地址*/Wire.write(buf, send_len);  /*写数据*/Wire.endTransmission();left_len -= send_len;addr += send_len;buf += send_len;send_len = (left_len>PAGE_SIZE) ? PAGE_SIZE:left_len;}return buflen;
}int at24cxx_read(int slave, int addr, uint8_t *buf, int buflen)
{int left_len = buflen;int get_len = 0;while(left_len){if(left_len > 32){get_len = 32;}else{get_len = left_len;}at24cxx_wait(slave);Wire.beginTransmission(slave);Wire.write(addr);  /*发送读地址*/Wire.endTransmission();   /*读数据*/Wire.requestFrom(slave, get_len);for(int i=0; i<get_len; i++){buf[i] = Wire.read();}left_len -= get_len;buf += get_len;addr += get_len;}return buflen;
}

at24cxx.h

#ifndef AT24CXX_H
#define AT24CXX_H#define AT24C16#ifdef AT24C02
#define PAGE_SIZE   (8)
#endif
#if defined (AT24C04) || defined (AT24C08) || defined (AT24C16)
#define PAGE_SIZE   (16)
#endif
#if defined(AT24C32) || defined(AT24C64)
#define PAGE_SIZE   (32)
#endifvoid at24cxx_init(void);
int at24cxx_read_byte(int slave, int addr);
void at24cxx_write_byte(int slave, int addr, int data);
int at24cxx_write(int slave, int addr, const uint8_t *buf, int buflen);
int at24cxx_read(int slave, int addr, uint8_t *buf, int buflen);
#endif /*AT24C16_H*/

test.ino

#include "at24cxx.h"void setup()
{Serial.begin(9600);while (!Serial); // Leonardo: wait for serial monitorat24cxx_init();
}void loop()
{int rcvlen = 0;int sendlen = 0;uint8_t data[129] =
"https://gitee.com/two_salted_eggs/xcmd\r\n\
https://gitee.com/two_salted_eggs/xcmd\r\n\
https://gitee.com/two_salted_eggs/xcmd";sendlen = strlen((char*)data);Serial.print("at24cxx page rw test, msg size=");Serial.println(sendlen);at24cxx_write(0x50, 0, data, sendlen);data[0] = '\0';rcvlen = at24cxx_read(0x50, 0, data, sendlen);data[sendlen] = '\0';Serial.println((char*)data);Serial.print("at24cxx byte rw test, msg size=");Serial.println(sendlen);for(int i=0; i<128; i++){at24cxx_write_byte(0x50, i, data[i]);}data[0] = '\0';for(int i=0; i<128; i++){data[i] = at24cxx_read_byte(0x50, i);}data[sendlen] = '\0';Serial.println((char*)data);Serial.println();delay(1000);
}```

arduino i2c EEPROM(AT24C02、AT24C08、AT24C16、AT24C32、AT24C64)驱动相关推荐

  1. Arduino与Proteus仿真实例-AT24C256串行(I2C)EEPROM数据存取驱动仿真

    AT24C256串行(I2C)EEPROM数据存取驱动仿真 EEPROM(电可擦除可编程只读存储器)是用户可修改的只读存储器(ROM),可以通过施加高于正常电压的电压反复擦除和重新编程(写入). 与 ...

  2. Arduino与Proteus仿真实例-M24C01串行(I2C)EEPROM数据存取驱动仿真

    M24C01串行(I2C)EEPROM数据存取驱动仿真 EEPROM(电可擦除可编程只读存储器)是用户可修改的只读存储器(ROM),可以通过施加高于正常电压的电压反复擦除和重新编程(写入). 与 EP ...

  3. Arduino ESP8266对AT24C02模块读写操作实例

    Arduino ESP8266对AT24C02模块读写操作实例 AT24CXX I2C接口EEPROM存储模块8P芯片座,我安装的是AT24C02 的外置EEPROM存储芯片. 正面照 背面,直接插到 ...

  4. mini2440----keil for AMR之IIC读写EEPROM(AT24C08)

    mini2440----keil for AMR之IIC读写EEPROM(AT24C08) 一:EEPROM芯片介绍 在这里分析AT24C02A/AT24C04A/AT24C08A,对于其他不同型号的 ...

  5. EEPROM - AT24C02

    文章目录 引言 一.EEPROM简介 二.EEPROM - AT24C02引脚 三.AT24C02的地址组成 四.AT24C02写入操作 4.1 字节写入模式 4.2 页写入模式(高效写入模式) 4. ...

  6. arduino i2c 如何写16位寄存器_Arduino之我见

    Arduino是一款时尚流行的开源软件&硬件平台,其开发入门简单,是众多DIY玩家及创客的首选.目前,Arduino也开始进入了中小学的创客课程.然而在与很多玩家.学生或是创客老师交流的过程中 ...

  7. CYUSB3014 I2C eeprom 启动

    FX3 集成了一个位于屏蔽 ROM 内的 Bootloader . Bootloader 用于通 过 各种接口(如 USB . I 2 C . SPI 或 GPIF II (同步 ADMux.异步 S ...

  8. STM32基于HAL工程硬件I2C读写AT24C02/04/08数据

    STM32基于HAL工程硬件I2C读取AT24C02数据 ✨申明:本文章仅发表在CSDN网站,任何其他网站,未注明来源,见此内容均为盗链和爬取,请多多尊重和支持原创!

  9. 单片机I2C总线AT24C02读写、扩展keil工程多个实例及Proteus仿真

    1.对I2C总线上挂接多个AT24C02的读写操作源代码如下: //对I2C总线上的2个AT24C02(U2和U3)的读写/*I2C总线系统中器件地址包括固定部分和可编程部分. 可编程部分必须根据A0 ...

  10. 【C51单片机学习笔记--DS1302时钟芯片蜂鸣器I2C总线AT24C02存储器】

    C51单片机学习笔记–DS1302时钟芯片&&蜂鸣器&&I2C总线&&AT24C02存储器 文章目录 一.DS1302时钟芯片介绍 二.DS1302时钟 ...

最新文章

  1. 刘强东:这4类员工必须尽快清除!
  2. 32位 shell.efi x86_通过grub,让32位的efi也能运行64位的Linux发行版
  3. Codeforces Round #355 (Div. 2) B. Vanya and Food Processor 水题
  4. flink读不到kafka数据问题
  5. Android隐藏状态栏、导航栏
  6. 计算机java培训总结,java培训总结范文
  7. mysql loadfile_在MySQL中如何使用LOAD_FILE()函数?(代码示例)
  8. DrawArc绘制弧线
  9. Spring事务控制和传递性理解
  10. plantuml最大宽度_设置TH最小和最大宽度非常缓慢
  11. 学习.net 2.0需要讲究一下策略
  12. PHP错误信息(errors)的屏蔽和显示-设置PHP.ini
  13. erf、erfc公式及其函数值表查询
  14. 10g日志挖掘logmnr
  15. 有道云笔记分享_写完笔记后干啥 有道云笔记分享技巧
  16. 三星nfc添加门禁卡实测有效_今天才知道!iPhone手机还能变成门禁卡,60秒就能实现...
  17. centos7 Qt5.9.1 ucal_close_53错误解决
  18. Mac安装Jadx反编译工具
  19. 安装arm_qt交叉编译环境(亲测有效)
  20. 管理员必备的20个Linux系统监控工具

热门文章

  1. 统信操作系统UOS上手操作与初体验、功能测试
  2. 微信表情图像代表什么意思_微信的表情都是什么意思(微信表情含义图解大全)...
  3. 矩形微带天线贴片尺寸计算
  4. android 反编译 签名,Android反编译及重签名命令
  5. vue移动端上拉加载,下拉刷新(mescroll)
  6. 使用Easychm3.9打包chm出现js错误弹窗问题
  7. 使用javah 生成.h头文件
  8. php 电梯程序设计,西门子300PLC编写三层电梯程序的设计与模拟
  9. jquery版本之间的冲突
  10. MMC-HVDC仿真模型,pscad柔性直流输电仿真mmc仿真模型,双端mmc模型,MMC为21电平NLM和均压控制