【51单片机入门记录】IIC总线协议 EEPROM存储器AT24C02概述

本文主要是介绍【51单片机入门记录】IIC总线协议 EEPROM存储器AT24C02概述,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、IIC总线协议概述

(1)IIC(Inter-IntegratedCircuit)总线

  • 是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器以及其外围设备。
  • IIC也被成为I2C/I²C,其实两者是完全相同的,只是名词不一样而已
  • 它是由数据线SDA和时钟线SCL构成的串行总线,可发送和接收数据

(2)IIC总线的物理层和协议层

  • 物理层规定通讯系统中具有机械、电子功能部分的特性,确保原始数据在物理媒体的传输
  • 协议层主要规定通讯逻辑,统一收发双方的数据打包、解包标准

(3)特点

  1. 它是一个支持设备的总线。“总线”指多个设备共用的信号线。在一个I2C通讯总线中,可连接多个I2C通讯设备,支持多个通讯主机及多个通讯从机
  2. 一个I2C总线只使用两条总线线路,一条双向串行数据线(SDA),一条串行时钟线(SCL)。数据线即用来表示数据,时钟线用于数据收发同步
  3. 每个连接到总线的设备都有一个独立的地址,主机可以利用这个地址进行不同设备之间的访问。
  4. 总线通过上拉电阻接到电源。当I2C设备空闲时,会输出高阻态,而当所有设备都空闲,都输出高阻态时,由上拉电阻把总线拉成高电平。
  5. 多个主机同时使用总线时,为了防止数据冲突,会利用仲裁方式决定由哪个设备占用总线
  6. 具有三种传输模式:标准模式传输速率为100kbit/s,快速模式为400kbit/s,高速模式下可达3.4Mbit/s,但目前大多12C设备尚不支持高速模式。

二、IIC总线通讯的数据帧格式

(1)IIC总线通讯的数据帧格式:写操作

S为起始信号,SLAVEADDRESS从机地址(7bit)+W(0)一共8位,有阴影的部分是主机发送的,而没有阴影部分是从机发送到主机的,A/A(0/1),P代表停止信号

主机I2C接口产生传输起始信号S→广播从机地址→传输方向选择→接受到应答信号ACK→向从机传输数据DATA→等待从机的应答信号ACK→重复之前过程→发送停止传输信号P。

(2)IIC总线通讯的数据帧格式:读操作

S为起始信号,SLAVEADDRESS从机地址(7bit)+R(1)一共8位,有阴影的部分是主机发送的,而没有阴影部分是从机发送到主机的,A(应答)/A(0/1),P代表停止信号。

注意:假如主机一直返回应答信号,那么从机可以一直发送数据,也就是图中的(nbyte+应答信号)情况,直到主机发出非应答信号,从机才会停止发送数据。

主机I2C接口产生传输起始信号S→广播从机地址→传输方向选择→接受到应答信号ACK←从机向主机返回数据DATA←等待主机的应答信号ACK←重复之前过程←停止传输P。

(3)IIC总线通讯的数据帧格式:读和写数据

除了基本的读写,IIC通讯更常用的是复合格式,该传输过程有两次起始信号(S)

一般在第一次传输中,主机通过SLAVE_ADDRESS寻找到从机设备后,发送一段“数据”,这段数据通常用于表示从设备内部的寄存器或存储器地址;

在第二次的传输中,对该地址的内容进行读或写。也就是说,第一次通讯是告诉从机读写地址,第二次则是读写的实际内容。

三、IIC总线通讯时序

(1)I2C数据的有效性(数据的传输)

  1. 使用SDA信号线来传输数据
  2. 使用SCL信号线进行数据同步
  3. SDA数据线在SCL的每个时钟周期传输一位数据。传输时,SCL为高电平的时候,SDA表示的数据有效,即此时的SDA为高电平时表示数据“1”,为低电平表示数据“0”。
  4. 当SCL为低电平时,SDA的数据无效,一般在这个时候进行电平切换,为下一次表示数据做好准备。

(2)I2C通讯的起始和停止信号

  • 当SCL线是高电平时,SDA线从高电平向低电平切换,这个情况表示通讯的起始。
  • 当SCL现是高电平时,SDA线由低电平向高电平切换,表示通讯的停止。
  • 起始和停止信号一般由主机产生。

(3)I2C通讯的响应

  • 传输时,主机产生时钟,在第九个时钟时,数据发送端会释放SDA的控制权,由数据接收端控制SDA,若SDA为高电平,表示非应答信号(NACK),低电平表示应答信号(ACK);
  • 当设备(无论主从机)接收到I2C传输的一个字节数据或地址后,若希望对方继续发送数据,则需要向对方发生“应答(ACK)”信号;若接收端希望结束数据传输,则向对方发生“非应答(NACK)”信号,发送方接收到该信号后会产生一个停止信号,结束信号传输。

四、基于IIC总线的E2PROM-AT24C02

(1)E2PROM概述:
 

EEPROM (Electrically Erasable Programmable read only memory)是指带电可擦可编程只读存储器,是一种掉电后数据不丢失的存储芯片,EEPROM 可以在电脑上或专用设备上擦除已有信息,重新编程。

(2)AT24C02简介

AT24C02是一个2K位串行CMOS E2PROM,内部含有256个8位字节。该器件通过IIC总线接口进行操作,且有一个专门的写保护功能。

(3)基于IIC总线的E2PROM-AT24C02的特性

  • 与400KHz IIC 总线兼容
  • 1.8到6.0伏工作电压范围
  • 低功耗CMOS技术
  • 写保护功能,当WP为高电平时进入写保护状态
  • 页写缓冲器
  • 自定时擦写周期
  • 1,000,000编程/擦除周期
  • 可保存数据100年
  • 8脚 DIP SOIC或TSSOP封装
  • 温度范围商业级工业级和汽车级。
  • (4)基于IIC总线的E2PROM-AT24C02的管脚描述

  • 管脚名称

    功能

    A0、A1、A2

    器件地址选择

    SDA

    串行数据、地址

    SCL

    串行时钟

    WP

    写保护

    VCC

    +1.8V~6.0V工作电压

    GND

WP 保护:如果WP管脚连接到Vcc所有的内容都被写保护,只能读;当WP管脚连接到Vss或悬空,允许器件进行正常的读/写操作。

(5)IIC地址及数据方向

I2C总线上的每个设备都有自己的独立地址,主机发起通讯时,通过SDA信号线发送设备地址(SLAVE_ADDRESS)来查找从机。

12C协议规定设备地址可以是7位或10位,实际中7位的地址应用比较广泛。紧跟设备地址的一个数据位用来表示数据传输方向,它是数据方向位,第8位或第11位。数据方向位为“1”时表示主机由从机读数据,该位为“0”时表示主机向从机写数据

(6)AT24C02设备地址


 

因为单片机上的管脚均接地,所以地址为1K/2K代表的地址。

五、AT24C02数据读写操作

(1)字节写

  • 写操作需要在设备地址字确认之后有一个8位的数据字地址
  • 一旦收到这个地址,EEPROM将输出一个响应,然后接收到8位数据字后,EEPROM将输出一个响应。
  • 如果需要停止数据传输,主机必须用一个停止条件终止写序列。
  • 数据写入后,EEPROM进入一个内部计时的写周期,将数据写入到到非易失性存储器。在这个写周期中,所有输入都被禁用,EEPROM直到写完成才会响应。

Figure 8. Byte Write:

(2)页写入

  • 1K/2K EEPROM能够进行8字节的页写入;
  • 页写的初始化过程与字节写的初始化过程相同。但是微控制器在第一个数据字被写入后并没有发送一个停止条件。相反,在EEPROM 承认接收到第一个数据字之后。该微控制器可以再传输7个数据字。EEPROM在接收到每个数据字后将回一个零响应。“微控制器必须用一个停止条件终止页写序列。当内部生成的字到达页面边界时,下面的字节被放置在同一页面的开头。
  • 如果有超过8个数据字传输到 EEPROM,数据字地址将“翻转”,先前的数据将被覆盖。

(3)任意地址读取

  • 随机读需要一个“虚拟”字节写序列来加载数据字地址。一旦设备地址字和数据字地址被输入并且被EEPROM 确认微控制器必须产生另一个启动条件,微控制器现在通过发送带读设备地址来启动当前读地址。令EEPROM 确认设备地址并报出数据字。微控制器后跟随停止条件结束。

(4)读写时间周期范围

符号

参数

1.8 V,2.5V

4.5V~5.5V

单位

最小

最大

最小

最大

FscL

时钟频率

100

400

KHz

T1

SCL,SDA输入的噪声抑制时间

200

200

ns

tAA

SCL 变低至SDA数据输出及应答信号

3.5

1

us

tBUF

新的发送开始前总线空闲时间

4.7

1.2

μs

LHD:STA

起始信号保持时间

4

0.6

μs

tLow

时钟低电平周期

4.7

1.2

μs

LHIGH

时钟高电平周期

4

0.6

us

tSU:STA

起始信号建立时间

4.7

0.6

μs

tHD:DAT

数据输入保持时间

0

0

ns

tsut:DAT

数据输入建立时间

50

50

ns

tR

SDA及SCL上升时间

1

0.3

μs

tF

SDA及SCL下降时间

5

300

300

ns

tsu:STO

停止信号建立时间

4

0.6

μs

DH

数据输出保持时间

100

100

ns

(5)任意地址读取总结

  • 1、主控器发出起始信号
  • 2、主控器发出寻址字节(写);
  • 3、被控器做出应答后;
  • 4、主控器发出地址字节(写);
  • 5、被控器做出应答后;
  • 6、主控器发出停止信号
  • 7、主控器发出起始信号;
  • 8、主控器发出寻址字节(读);
  • 9、被控器做出应答后;
  • 10、主控器从被控器读出数据字节,主控器发出应答;
  • 11、主控器发出停止信号:

这篇关于【51单片机入门记录】IIC总线协议 EEPROM存储器AT24C02概述的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/865178

相关文章

Spring Retry 实现乐观锁重试实践记录

《SpringRetry实现乐观锁重试实践记录》本文介绍了在秒杀商品SKU表中使用乐观锁和MybatisPlus配置乐观锁的方法,并分析了测试环境和生产环境的隔离级别对乐观锁的影响,通过简单验证,... 目录一、场景分析 二、简单验证 2.1、可重复读 2.2、读已提交 三、最佳实践 3.1、配置重试模板

在 Spring Boot 中使用异步线程时的 HttpServletRequest 复用问题记录

《在SpringBoot中使用异步线程时的HttpServletRequest复用问题记录》文章讨论了在SpringBoot中使用异步线程时,由于HttpServletRequest复用导致... 目录一、问题描述:异步线程操作导致请求复用时 Cookie 解析失败1. 场景背景2. 问题根源二、问题详细分

Qt 中集成mqtt协议的使用方法

《Qt中集成mqtt协议的使用方法》文章介绍了如何在工程中引入qmqtt库,并通过声明一个单例类来暴露订阅到的主题数据,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一,引入qmqtt 库二,使用一,引入qmqtt 库我是将整个头文件/源文件都添加到了工程中进行编译,这样 跨平台

关于Spring @Bean 相同加载顺序不同结果不同的问题记录

《关于Spring@Bean相同加载顺序不同结果不同的问题记录》本文主要探讨了在Spring5.1.3.RELEASE版本下,当有两个全注解类定义相同类型的Bean时,由于加载顺序不同,最终生成的... 目录问题说明测试输出1测试输出2@Bean注解的BeanDefiChina编程nition加入时机总结问题说明

关于最长递增子序列问题概述

《关于最长递增子序列问题概述》本文详细介绍了最长递增子序列问题的定义及两种优化解法:贪心+二分查找和动态规划+状态压缩,贪心+二分查找时间复杂度为O(nlogn),通过维护一个有序的“尾巴”数组来高效... 一、最长递增子序列问题概述1. 问题定义给定一个整数序列,例如 nums = [10, 9, 2

将sqlserver数据迁移到mysql的详细步骤记录

《将sqlserver数据迁移到mysql的详细步骤记录》:本文主要介绍将SQLServer数据迁移到MySQL的步骤,包括导出数据、转换数据格式和导入数据,通过示例和工具说明,帮助大家顺利完成... 目录前言一、导出SQL Server 数据二、转换数据格式为mysql兼容格式三、导入数据到MySQL数据

关于rpc长连接与短连接的思考记录

《关于rpc长连接与短连接的思考记录》文章总结了RPC项目中长连接和短连接的处理方式,包括RPC和HTTP的长连接与短连接的区别、TCP的保活机制、客户端与服务器的连接模式及其利弊分析,文章强调了在实... 目录rpc项目中的长连接与短连接的思考什么是rpc项目中的长连接和短连接与tcp和http的长连接短

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

Python MySQL如何通过Binlog获取变更记录恢复数据

《PythonMySQL如何通过Binlog获取变更记录恢复数据》本文介绍了如何使用Python和pymysqlreplication库通过MySQL的二进制日志(Binlog)获取数据库的变更记录... 目录python mysql通过Binlog获取变更记录恢复数据1.安装pymysqlreplicat

Servlet中配置和使用过滤器的步骤记录

《Servlet中配置和使用过滤器的步骤记录》:本文主要介绍在Servlet中配置和使用过滤器的方法,包括创建过滤器类、配置过滤器以及在Web应用中使用过滤器等步骤,文中通过代码介绍的非常详细,需... 目录创建过滤器类配置过滤器使用过滤器总结在Servlet中配置和使用过滤器主要包括创建过滤器类、配置过滤