arduino i2c EEPROM(AT24C02、AT24C08、AT24C16、AT24C32、AT24C64)驱动
说明
数据手册
使用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)驱动相关推荐
- Arduino与Proteus仿真实例-AT24C256串行(I2C)EEPROM数据存取驱动仿真
AT24C256串行(I2C)EEPROM数据存取驱动仿真 EEPROM(电可擦除可编程只读存储器)是用户可修改的只读存储器(ROM),可以通过施加高于正常电压的电压反复擦除和重新编程(写入). 与 ...
- Arduino与Proteus仿真实例-M24C01串行(I2C)EEPROM数据存取驱动仿真
M24C01串行(I2C)EEPROM数据存取驱动仿真 EEPROM(电可擦除可编程只读存储器)是用户可修改的只读存储器(ROM),可以通过施加高于正常电压的电压反复擦除和重新编程(写入). 与 EP ...
- Arduino ESP8266对AT24C02模块读写操作实例
Arduino ESP8266对AT24C02模块读写操作实例 AT24CXX I2C接口EEPROM存储模块8P芯片座,我安装的是AT24C02 的外置EEPROM存储芯片. 正面照 背面,直接插到 ...
- mini2440----keil for AMR之IIC读写EEPROM(AT24C08)
mini2440----keil for AMR之IIC读写EEPROM(AT24C08) 一:EEPROM芯片介绍 在这里分析AT24C02A/AT24C04A/AT24C08A,对于其他不同型号的 ...
- EEPROM - AT24C02
文章目录 引言 一.EEPROM简介 二.EEPROM - AT24C02引脚 三.AT24C02的地址组成 四.AT24C02写入操作 4.1 字节写入模式 4.2 页写入模式(高效写入模式) 4. ...
- arduino i2c 如何写16位寄存器_Arduino之我见
Arduino是一款时尚流行的开源软件&硬件平台,其开发入门简单,是众多DIY玩家及创客的首选.目前,Arduino也开始进入了中小学的创客课程.然而在与很多玩家.学生或是创客老师交流的过程中 ...
- CYUSB3014 I2C eeprom 启动
FX3 集成了一个位于屏蔽 ROM 内的 Bootloader . Bootloader 用于通 过 各种接口(如 USB . I 2 C . SPI 或 GPIF II (同步 ADMux.异步 S ...
- STM32基于HAL工程硬件I2C读写AT24C02/04/08数据
STM32基于HAL工程硬件I2C读取AT24C02数据 ✨申明:本文章仅发表在CSDN网站,任何其他网站,未注明来源,见此内容均为盗链和爬取,请多多尊重和支持原创!
- 单片机I2C总线AT24C02读写、扩展keil工程多个实例及Proteus仿真
1.对I2C总线上挂接多个AT24C02的读写操作源代码如下: //对I2C总线上的2个AT24C02(U2和U3)的读写/*I2C总线系统中器件地址包括固定部分和可编程部分. 可编程部分必须根据A0 ...
- 【C51单片机学习笔记--DS1302时钟芯片蜂鸣器I2C总线AT24C02存储器】
C51单片机学习笔记–DS1302时钟芯片&&蜂鸣器&&I2C总线&&AT24C02存储器 文章目录 一.DS1302时钟芯片介绍 二.DS1302时钟 ...
最新文章
- 刘强东:这4类员工必须尽快清除!
- 32位 shell.efi x86_通过grub,让32位的efi也能运行64位的Linux发行版
- Codeforces Round #355 (Div. 2) B. Vanya and Food Processor 水题
- flink读不到kafka数据问题
- Android隐藏状态栏、导航栏
- 计算机java培训总结,java培训总结范文
- mysql loadfile_在MySQL中如何使用LOAD_FILE()函数?(代码示例)
- DrawArc绘制弧线
- Spring事务控制和传递性理解
- plantuml最大宽度_设置TH最小和最大宽度非常缓慢
- 学习.net 2.0需要讲究一下策略
- PHP错误信息(errors)的屏蔽和显示-设置PHP.ini
- erf、erfc公式及其函数值表查询
- 10g日志挖掘logmnr
- 有道云笔记分享_写完笔记后干啥 有道云笔记分享技巧
- 三星nfc添加门禁卡实测有效_今天才知道!iPhone手机还能变成门禁卡,60秒就能实现...
- centos7 Qt5.9.1 ucal_close_53错误解决
- Mac安装Jadx反编译工具
- 安装arm_qt交叉编译环境(亲测有效)
- 管理员必备的20个Linux系统监控工具
热门文章
- 统信操作系统UOS上手操作与初体验、功能测试
- 微信表情图像代表什么意思_微信的表情都是什么意思(微信表情含义图解大全)...
- 矩形微带天线贴片尺寸计算
- android 反编译 签名,Android反编译及重签名命令
- vue移动端上拉加载,下拉刷新(mescroll)
- 使用Easychm3.9打包chm出现js错误弹窗问题
- 使用javah 生成.h头文件
- php 电梯程序设计,西门子300PLC编写三层电梯程序的设计与模拟
- jquery版本之间的冲突
- MMC-HVDC仿真模型,pscad柔性直流输电仿真mmc仿真模型,双端mmc模型,MMC为21电平NLM和均压控制