I2C通信之EEPROM

1 EEPROM及其背景知识

1.1 EEPROM

(1)一些概念:ROM、RAM、PROM(可编程ROM)、EPROM(可擦除ROM)、EEPROM(电可擦除ROM)。

(2)为什么需要EEPROM(单片机内部的ROM只能在程序下载时进行擦除和改写,但是程序运行本身是不能改写的。单片机内部的RAM中的数据程序运行时可以改,但是掉电就丢失了。有时候我们有一些数据要存在系统中,要求掉电不丢失,而且程序还要能改。所以内部ROM和RAM都不行。这时候系统中就需要一块EEPROM)。

(3)EEPROM(按照功能命名)和flash(按照工艺进行命名)的区别与联系,EEPROM可能是用flash工艺做出来的(flash可以做成EEPROM)。

(4)EEPROM存在系统中的2种形式:内置在单片机内部,外部扩展。

1.2 EEPROM如何编程

(1)I2C接口底层时序。

(2)器件定义的寄存器读写时序。

2 原理图和数据手册

2.1 原理图和接线确定

这里写图片描述

(1)关键性引脚定义及其接法(SCL对应P2.1,SDA对应P2.0)。

(2)接线。

2.2 数据手册浏览

(1)芯片基本信息。

(2)I2C从地址确定。

(3)I2C低层时序:起始信号、停止信号、发送字节、读取字节。

2.3 I2C总结

(1)主CPU和其附属芯片之间最常用的接口,尤其是各种传感器,因此在物联网时代非常重要。

(2)三根线:GND、SCL、SDA,串行、电平式。

(3)总线式结构,可以一对多,总线上可以挂上百个器件,用从地址来区分。

(4)主从式,由主设备来发起通信及总线仲裁,从设备被动响应。

(5)通信速率一般(kbps级别),不适合语音、视频等信息类型。

3 I2C低层时序图和程序

3.1 起始信号和结束信号

(1)起始信号:SCL保持高时,SDA有一个从高到低(下降沿)。

(2)结束信号:SCL保持高时,SDA有一个从低到高(上升沿)。

这里写图片描述

3.2 I2C发送一个字节

(1)I2C发送和接收字节时,都是从高位开始的。

这里写图片描述

3.3 应答位处理

这里写图片描述

3.4 I2C接收一个字节

概念:释放总线。在51单片机中,SDA=1就是释放总线;在其他更高级的单片机(譬如STM32等)这里的处理还会有点不一样。为什么SDA=1就是释放总线,是因为当51单片机把引脚拉高时,从设备可以选择再把这个引脚拉高或者拉低;但是当51单片机把这个引脚拉低(接地)后,从设备再也没办法把这个引脚拉高了。

4 EEPROM读写测试

4.1 24C02读写高层时序

(1)从器件的地址是由从器件自身定义的,不同的从器件的地址定义方式是不同的,要查具体的芯片数据手册来确定。
(2)同一个I2C网络中只有一个主设备,但是从设备可以有多个。这多个从设备的从地址不能相同(硬件设计工程师必须保证这一点。因为从地址是不能通过软件设定的)。
(3)通过分析原理图和24C02的地址定义,可以得出:
从设备地址是:读地址:0xa1,写地址:0xa0

4.2 写时序

这里写图片描述

这里写图片描述

这里写图片描述

4.3 读时序

这里写图片描述

这里写图片描述

这里写图片描述

4.4 工程建立与文件导入

4.5 加入串口输出代码

4.6 测试EEPROM

4.7 程序问题解决

(1)通过调试发现程序跑飞了,经过检查发现uart中没有关中断。

(2)读出内容不对,怀疑是EEPROM经不起快速的连续读写,所以在读和写之间加入20ms的delay,测试后发现读写正确了。

(3)定义了局部变量没有初始化,程序中直接去通过串口输出,结果导致程序出现错误。

自己写代码中出现的问题:1.引脚定义错误。2.发送数据和接收数据时移位运算出错。

4.8 代码

i2c.h

#ifndef __I2C_H_
#define __I2C_H_
  • 18
    点赞
  • 113
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值