AT24C02存储器(I2C总线:电路规范、时序结构、数据帧)

存储器简介

AT24C02存储器(I2C总线:电路规范、时序结构、数据帧)_第1张图片

RAM

  • SRAM(静态RAM) ,内部的存储结构是锁存器,是一个D触发器,用电路来存储数据,是所有存储器中最快的一个,一般用于电脑CPU高速缓存,单片机里面也是SRAM,比如定义的变量就存储在SRAM里面,特殊功能寄存器也是一种SRAM。它的容量较小成本较高。

  • DRAM(动态RAM) 用电容来存储数据,我们知道电容充完电后显示高电平,放完电后显示低电平。但是因为这个电容它集成度特别高所以容值特别小,因为电容存在漏电现象,所以在存储数据后很快就会漏电漏完了。所以我们要给它配一个扫描电路,每隔一段时间就读取它的数据,并给它重新充电,每隔一段时间刷新一下,补上那些因为漏电现象所丢失的电能,所以它叫动态RAM,因为它要动态刷新。但是DRAM相比SRAM成本更低,容量更大,包括电脑里面的内存条和手机里面的运行内存都是动态RAM。

ROM

  • MaskROM(掩膜ROM) 最早的ROM,在刚开始做出来后仅仅依靠电路来存储数据,芯片成品无法更改,可以保证掉电不丢失,ROM得名于此,即read only memory;

  • PROM(可编程ROM) 相对于上一代而言,PROM是可写入的,缺点是只能写入一次,PROM生产出来以后,第一次写好,以后就永远是这个数据从,无法再进行更改;

  • EPROM(可擦除可编程ROM) 是PROM的升级版,生产出来后我们也可以对它进行编程,同时也可以再编程结束后将它清除成编程前的状态,但是需要紫外线将其照射三十分钟才可将其擦除。同时“ROM”这个词已经成为了一个广义的概念,掉电不丢失的非易失性存储器都概括为ROM;

  • E2PROM(电可擦除可编程ROM) 本节的AT24C02就是一种E2PROM,在5V的低压电的情况下,几毫秒就可将其擦除,但应用不是特别广泛;

  • Flash(闪存) 功能十分强大,应用十分广泛,包括单片机的程序存储器(51单片机有8k的flash)、U盘、内存卡、电脑的固态硬盘和手机里用来存储的介质全部都采用的Flash;

  • 硬盘(软盘、光盘等) 像是电脑里的机械硬盘,它是靠磁介质来存储信息的,软盘是早期电脑刚出来时候的产品,容量也很小,现在都被淘汰了,现在的电脑都是从C盘开始的,在早期的时候,A盘和B盘就是留给软盘的,光盘是用光信号存储的。

AT24C02存储器(I2C总线:电路规范、时序结构、数据帧)_第2张图片

AT24C02简介

  • AT24C02是一种可以实现掉电不丢失的存储器,可用于保存单片机运行时想要永久保存的数据信息

  • 存储介质:E2PROM

  • 通讯接口:I2C总线

  • 容量:256字节

引脚及应用电路

AT24C02存储器(I2C总线:电路规范、时序结构、数据帧)_第3张图片
AT24C02存储器(I2C总线:电路规范、时序结构、数据帧)_第4张图片

内部结构框图

AT24C02存储器(I2C总线:电路规范、时序结构、数据帧)_第5张图片
  • X DEC-译码器,左边是地址线,输入译码器又回来

  • SERIAL MUX-串行数据选择端,借助Y DEC(Y译码器)通过D(out)/ACK LOGIC一位一位的输出出去;

  • DATA WORD ADDR/COUNTER-用来设置地址,内部设有存储地址的寄存器,每写入或读出一个地址,这个寄存器会自动加1,如果读出不指定地址的话,它默认把寄存器的数据拿出来。

I2C总线(重点难点)

I2C总线简介

  • I2C总线(Inter IC BUS)是由Philips公司开发的一种通用数据总线

  • 两根通信线:SCL(Serial Clock串行时钟线)、SDA(Serial Data串行数据线

  • 同步(因为它有单独的时钟线)、半双工(SDA只有一根线,并且还要来回通信),带数据应答

  • 通用的I2C总线,可以使各种设备的通信标准统一,对于厂家来说,使用成熟的方案可以缩短芯片设计周期、提高稳定性,对于应用者来说,使用通用的通信协议可以避免学习各种各样的自定义协议,降低了学习和应用的难度。

I2C电路规范

  • 所有I2C设备的SCL连在一起,SDA连在一起

  • 设备的SCL和SDA均要配置成开漏输出模式

  • SCL和SDA各添加一个上拉电阻,阻值一般为4.7KΩ左右

  • 开漏输出和上拉电阻的共同作用实现了“线与”的功能,此设计主要是为了解决多机通信互相干扰的问题

AT24C02存储器(I2C总线:电路规范、时序结构、数据帧)_第6张图片

I2C时序结构

  • 起始条件:SCL高电平期间,SDA从高电平切换到低电平

  • 终止条件:SCL高电平期间,SDA从低电平切换到高电平

AT24C02存储器(I2C总线:电路规范、时序结构、数据帧)_第7张图片
  • 发送一个字节:SCL低电平期间,主机将数据位依次放到SDA线上(高位在前),然后拉高SCL,主机将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可发送一个字节。

AT24C02存储器(I2C总线:电路规范、时序结构、数据帧)_第8张图片
  • 接收一个字节:SCL低电平期间,从机将数据位依次放到SDA总线上(高位在前),然后拉高SCL,从机将在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可接收一个字节(主机在接收之前,需要释放SDA)。

AT24C02存储器(I2C总线:电路规范、时序结构、数据帧)_第9张图片

注:把SDA置1,相当于释放,释放的时候,主机是完全不干预通讯线的,换言之就是主机将线的控制权交给了从机,紫色代表从机控制着总线。

  • 发送应答:在接收完一个字节之后,主机在下一个时钟发送一位数据,数据0表示应答,数据1表示非应答

  • 接收应答:在发送完一个字节之后,主机在下一个时钟接收一位数据,判断从机是否应答,数据0表示应答,数据1表示非应答(主机在接收之前,需要释放SDA)

AT24C02存储器(I2C总线:电路规范、时序结构、数据帧)_第10张图片

I2C数据帧

  • 发送一帧数据

AT24C02存储器(I2C总线:电路规范、时序结构、数据帧)_第11张图片

步骤:

  1. 首先发送一个Start

  1. S:SLAVE ADDRESS+W——发送一个字节数据(I2C规定,在Start之后第一个字节数据一定要发从机地址+读写位,前四位——A6、A5、A4、A3——是固定端1010)

  1. 每发送一个字节之后都要跟一个acceptance acknowledge(接收应答),从机应该给我应答(给我发0)

  1. S:BYTE 1 ——接着就可以发送第一个字节数据了

  1. .........

  1. S:BYTE n

  1. RA:0

  1. P

  • 完成任务:向谁收什么


  • 接收一帧数据

AT24C02存储器(I2C总线:电路规范、时序结构、数据帧)_第12张图片

步骤:

  1. 首先发送一个Start

  1. S:SLAVE ADDRESS+R——发送一个字节数据(一旦我们发送了READ这个字节,我们就默认代表我们已经把总线的控制权交给从机了)

  1. RA:0

  1. R:BYTE 1 ——接着就可以接收第一个字节数据了

  1. SA:0(接收应答)

  1. .........

  1. R:BYTE n

  1. SA:1(一般发分应答)

  1. P

  • 完成任务:向谁收什么


  • 先发送再接收数据帧(复合格式)

*发送一帧数据(去掉STOP)和接收一帧数据的拼接

AT24C02存储器(I2C总线:电路规范、时序结构、数据帧)_第13张图片
  • 向谁收指定的什么

AT24C02数据帧

  • 字节写:在WORD ADDRESS处写入数据DATA

  • 随机读:读出在WORD ADDRESS处的数据DATA

  • AT24C02的固定地址为1010,可配置地址本开发板上为000。所以SLAVE ADDRESS+W为0xA0,SLAVE ADDRESS+R为0xA1。

  • 字节写:在“字地址”处写入“数据”

AT24C02存储器(I2C总线:电路规范、时序结构、数据帧)_第14张图片
  • 随机读:读出在“字地址”处的“数据”

AT24C02存储器(I2C总线:电路规范、时序结构、数据帧)_第15张图片

程序代码

你可能感兴趣的:(单片机原理,单片机,嵌入式软件)