EEPROM驱动设计

AI summary
本文详细介绍了EEPROM驱动设计的各个方面,包括字节写操作、页写操作、字节读操作和顺序读操作的时序分析与实现。此外,还涵盖了串行通信系统的设计要求和架构,强调了EEPROM的控制字、应答时序以及数据传输过程中的关键步骤和注意事项。
Last edited time
Oct 17, 2024 03:47 PM
Last edited by
Tags
Serial Communication
Communication Protocols
Data Transmission Methods

24LC64型EEPROM手册解读

一:特性和描述

  1. 64K I2C™CMOS Serial EEPROM
  1. 2-wire serial interface bus, I2C compatible
    1. notion image
  1. Cascadable for up to eight devices
    1. notion image
  1. 32-byte page or byte write modes available
    1. 字节写/页写操作:1页最多写入32个字节数据。
  1. 5 ms max write cycle time
    1. 字节写/页写操作
  1. 24LC64(24xx64*) is a 8K x 8 (64K bit) Serial Electrically Eras-able PROM capable of operation across a broad volt-age range
    1. notion image
      Mem=64Kbit=8K*8bit
      1page=32byte
      64Kbit/(32*8bit)=8K/32=256page
  1. 芯片封装/板卡原理图
    1. notion image
      端口名
      端口描述
      A0,A1,A2
      用户可配置的片选信号:3’b100
      WP
      写保护:WP=0(可以读写整个存储器)
      SCL
      串行时钟线:MAX=400KHZ
      SDA
      串行数据线:数据改变在时钟低电平器件,数据稳定在时钟高电平器件,如果数据改变在时钟高电平期间,则认为是起始/停止条件
      notion image
  1. 时序参数
    1. notion image
      notion image
  1. SDA Serial Data
    1. (1):SDA属于双向管脚(往往采用三态处理)
      notion image
      (2):正常数据传输时,SDA线上数据被改变在SCL低电平期间;如果在SCL高电平期间数据改变,认为是起始/停止条件。SCL高电平期间数据保持稳定。
  1. SCL Serial Clock
    1. 在器件之间用于数据的同步传输,24LC64器件内不会自己产生所需要的工作时钟,该时钟往往由主设备(FPGA)产生,时钟频率最大不超过400KHZ。
  1. 地址深度
    1. 数据深度=8K,地址需要13位(2^13=8K),处理是将13位地址扩展为16位,分为高字节地址(高8位:前3位不用管)和低字节地址(低8位)。

二:功能描述

  1. 24LC64属于两线制IIC协议
  1. 器件在总线上发送数据时,作为发送器
  1. 器件在总线上接收数据时,作为接收器
  1. 起始/停止条件总是由主设备产生
  1. 主设备/从设备都可以认为是发送/接收器,由主设备决定是哪种模式被激活。

三:总线特性

  1. 总线不忙时,SCL和SDA处于高电平
  1. 数据传输期间:数据稳定是在SCL高电平时,数据改变是在SCL低电平时
  1. 当数据改变在SCL高电平时,则认为是起始/停止条件
    1. notion image
  1. 从起始位后,可以进行数据传输,每传输一个字节数据(8bit占用8个SCL),需要一次应答ACK(第9个SCL时钟),等待所有数据传输完成后,产生停止条件。
    1. notion image
      应答时序(ACK):在SCL高电平期间,检测到SDA持续为低电平。

四:器件地址

notion image
起始位结束后,由主设备发送控制字(4个控制码:1010、3个片选A2A1A0:001、1个读写控制位:0(写) 1(读))。数据接收方响应主设备发送的控制字;接着由主设备继续发送两个字节地址(高字节地址和低字节地址)。
notion image

五:写操作(字节写操作)

notion image
字节写操作时序解读步骤:
  1. 主设备发送起始信号(START)
    1. 起始条件:在SCL高电平期间,SDA由高到低。
  1. 主设备发送写控制字(CONTROL BYTE)
    1. 其中1010是EEPROM的型号标识,是一组固定的序列;A2A1A0是片选信号(001);最后一位是W/R位(0(写) 1(读))。
  1. 主设备接收并检测EEPROM发送过来的应答(ACK1)
    1. 在SCL高电平期间,检测到SDA持续为低电平,则说明是应答信号。
  1. 主设备发送高字节地址(ADDR HIGH)
  1. 主设备接收并检测EEPROM发送过来的应答(ACK2)
    1. 在SCL高电平期间,检测到SDA持续为低电平,则说明是应答信号。
  1. 主设备发送低字节地址(LOW HIGH)
  1. 主设备接收并检测EEPROM发送过来的应答(ACK3)
    1. 在SCL高电平期间,检测到SDA持续为低电平,则说明是应答信号。
  1. 主设备发送1个字节数据(DATA)
  1. 主设备接收并检测EEPROM发送过来的应答(ACK4)
    1. 在SCL高电平期间,检测到SDA持续为低电平,则说明是应答信号。
  1. 主设备发送停止信号(STOP)
    1. 停止条件:在SCL高电平期间,SDA由低到高。

六:字节写操作分析

  1. SCL时序问题:以SCL=200KHZ为例
    1. notion image
      如果以系统时钟(sys_clk=400MHZ)下降沿反转得到SCL=200KHZ,那么在实现START时,需要在系统时钟上升沿来判断SCL为高电平,正好处于SCL高电平中心位置,在系统时钟上升沿来时,将SDA由高拉低即可。
  1. SDA数据线采用三态门处理
    1. en=1(主设备控制总线控制权) en=0(主设备释放总线控制权)
  1. 数据并转串
    1. 采用计数器实现:计数器记录时钟个数(8个时钟周期)
      在每一个SCL时钟周期的低电平期间将数据一位一位发送出去(MSB~LSB)。
      在第9个SCL时钟周期满足应答条件。
练习:
  1. 熟读24LC64器件手册。
  1. 尝试完成EEPROM字节写操作。
    1. notion image

七:字节写操作实现

notion image
  1. 设计架构
    1. notion image
      eeprom_scl最大工作时钟不超过400KHZ。
  1. EEPROM字节写控制实现
    1. 采用FSM实现,也可以采用LSM实现。
      STG如下:
      notion image
      notion image

八:字节写仿真测试

notion image

九:字节写下板验证

notion image
24LC64原理图中片选A2A1A0=3’b000。

十:字节读操作实现

notion image
字节读操作补充:
  1. 字节读和字节写在第二个起始位前操作是一样的,不同的是字节读操作在第二个起始位后,需要将控制字中最后一位设置为读操作(RW=1),之后读控制字应答(ACK4),再读取之前写入地址的数据,之后NO ACK,最后停止条件STOP。
    1. 字节写/读:(START1,WR_CTRL_BYTE,ACK1,HIGH_ADDR,ACK2,LOW_ADDR,ACK3)。
  1. 写数据时和读数据时区别
    1. 写数据:主设备(FPGA:en=1),将待写入数据通过数据线给到从设备(EEPROM:en=0)。
      在SCL低电平期间将数据发送出去。(SCL低电平期间可以改变数据)。
      读数据时需要在SCL高电平期间(SCL高电平期间数据保持稳定)对数据进行读取,总线控制权由从设备控制(EEPROM),读取数据时从SDA线上将数据一位一位进行读取,读取数据完毕后数据是8位,也就是说需要将读取的8位数据放置在读取数据寄存器中(串行数据并行输出)。
  1. NO ACK(读取数据时:由主设备控制)
    1. 在时序中中要求:在SCL高电平期间,检测到SDA持续为高电平。
  1. 字节读操作时序解读步骤:
    1. 主设备发送起始信号(START1)
      1. 起始条件:在SCL高电平期间,SDA由高到低。
    2. 主设备发送写控制字(WRCONTROL BYTE:1010_000_0)
      1. 其中1010是EEPROM的型号标识,是一组固定的序列;A2A1A0是片选信号(000);最后一位是W/R位(0(写) 1(读))。
    3. 主设备接收并检测EEPROM发送过来的应答(ACK1)
      1. 在SCL高电平期间,检测到SDA持续为低电平,则说明是应答信号。
    4. 主设备发送高字节地址(ADDR HIGH)
    5. 主设备接收并检测EEPROM发送过来的应答(ACK2)
      1. 在SCL高电平期间,检测到SDA持续为低电平,则说明是应答信号。
    6. 主设备发送低字节地址(LOW HIGH)
    7. 主设备接收并检测EEPROM发送过来的应答(ACK3)
      1. 在SCL高电平期间,检测到SDA持续为低电平,则说明是应答信号。
    8. 主设备发送起始条件(START2)
      1. 起始条件:在SCL高电平期间,SDA由高到低。
    9. 主设备发送读控制字(RDCONTROL BYTE:1010_000_1)
      1. 其中1010是EEPROM的型号标识,是一组固定的序列;A2A1A0是片选信号(000);最后一位是W/R位(0(写) 1(读))。
    10. 主设备接收并检测EEPROM发送过来的应答(ACK4)
      1. 在SCL高电平期间,检测到SDA持续为低电平,则说明是应答信号。
    11. 主设备读取EEPROM发送过来的数据(DATA BYTE)
      1. 读数据时需要在SCL高电平期间(SCL高电平期间数据保持稳定)对数据进行读取,总线控制权由从设备控制(EEPROM),读取数据时从SDA线上将数据一位一位进行读取,读取数据完毕后数据是8位,也就是说需要将读取的8位数据放置在读取数据寄存器中(串行数据并行输出)。
    12. 主设备控制NO ACK
      1. 在SCL高电平期间,检测到SDA持续为高电平。
    13. 主设备发送停止信号(STOP)
      1. 停止条件:在SCL高电平期间,SDA由低到高。

十一:字节读操作设计架构

notion image

十二:字节读操作实现

采用FSM实现,也可以采用LSM实现。
STG如下:
notion image
notion image
读取8bit数据时序要求:ACK4,RD_DATA,NO_ACK。
notion image

十三:字节读仿真测试

notion image

十四:字节读下板验证

notion image
notion image

EEPROM页写操作

一:页写操作时序

notion image
页写操作时序解读步骤:
  1. 主设备发送起始信号(START)
    1. 起始条件:在SCL高电平期间,SDA由高到低。
  1. 主设备发送写控制字(CONTROL BYTE)
    1. 其中1010是EEPROM的型号标识,是一组固定的序列;A2A1A0是片选信号(001);最后一位是W/R位(0(写) 1(读))。
  1. 主设备接收并检测EEPROM发送过来的应答(ACK1)
    1. 在SCL高电平期间,检测到SDA持续为低电平,则说明是应答信号。
  1. 主设备发送高字节地址(ADDR HIGH)
  1. 主设备接收并检测EEPROM发送过来的应答(ACK2)
    1. 在SCL高电平期间,检测到SDA持续为低电平,则说明是应答信号。
  1. 主设备发送低字节地址(LOW HIGH)
  1. 主设备接收并检测EEPROM发送过来的应答(ACK3)
    1. 在SCL高电平期间,检测到SDA持续为低电平,则说明是应答信号。
  1. 主设备发送第一个字节数据(DATA BYTE0)
  1. 主设备接收并检测EEPROM发送过来的应答(ACK4)
    1. 在SCL高电平期间,检测到SDA持续为低电平,则说明是应答信号。
      写入多个字节数据重复8,9步骤即可,满足当前页最多写入32个字节。
      如果超过32个字节数据,之前写入的数据会被覆盖。
  1. 主设备发送停止信号(STOP)
    1. 停止条件:在SCL高电平期间,SDA由低到高。

二:字节写和页写操作区别:

  1. 时序初始是一样的(写入第一个数据应答前)
  1. 字节写操作是只写入一个字节数据,而页写操作是写多个数据
    1. (1):写某一页多个数据(最少2个,最多32个)
      (2):写满指定的一页(32个)
      (3):写多页(最少2页,最多256页)
      (4):写满整个存储器(64Kbit,256页)
  1. 页写(内部写循环周期:MAX=5ms),完成写多页时,需要考虑换页问题(页写循环周期:MAX=5ms)。

三:写某一页多个数据(最少2个,最多32个)

notion image
  1. 写入数据方式
    1. notion image
  1. 写入2个字节数据仿真测试
    1. notion image
  1. 写入2个字节数据下板验证
    1. notion image

四:写满指定的一页(32个)

notion image
  1. 写满指定一页方式1(32个)
    1. notion image
      可以在之前某一页写入2个数据基础之上,在写数据部分增加多个状态即可(1个写数据对应1个写数据应答)。
  1. 写满指定一页方式2(32个)
    1. notion image
  1. 写入一页数据(第一页:32个)仿真测试
    1. notion image
  1. 写入一页数据(第一页:32个)下板验证
    1. notion image

五:写多页(最少2页,最多256页)

notion image
第一页地址区间:0~31
第二页地址区间:32~63
最后一页地址区间:8160~8191
写完第一页时(addr:0),需要注意页写循环周期(MAX=5ms),在写完一页时到下一页需要间隔时间,经过页写循环周期后,可以完成第二页数据写入(addr=32),在写完一页时到下一页需要间隔时间,经过页写循环周期后,可以完成第三页数据写入(addr=64)…
notion image
  1. 写入3页数据(第一页:32个 第二页:32个 第三页:32)仿真测试
    1. 写入数据:0~31(填充递增序列)
      notion image
  1. 写入3页数据(第一页:32个 第二页:32个 第三页:32)下板验证
    1. notion image
      采样点个数:1280~3480(~=2200)
      采样频率:800KHZ  T=1250ns
      MIN(延时时间):2200*1250ns=2.75ms
      1268~3428(~2160)
      MIN(延时时间):2160*1250ns=2.7ms

六:写满整个存储器(64Kbit,256页)

notion image
notion image

EEPROM顺序读操作

一:页读/顺序读操作时序

notion image

二:页读/顺序读操作和字节读操作区别

  1. 时序初始是一样的(读取第一个字节之前,包括
    1. (START1,WR_CTRL_CODE,ACK1,HIGH_ADDR,ACK2,LOW_ADDR,ACK3,START2,RD_CTRL_CODE,ACK4,DATA),在之后顺序读读取一个数据有相应的应答ACK,直到读取最后一个数据后,有非应答NO ACK,之后是停止条件。
  1. 字节读是只读取一个字节数据,而顺序读是读取多个字节数据
    1. (1):读取某一页中多个数据(最少2个,最多32个)
      (2):读取指定的一页数据(32个)
      (3):读取多页数据(最少2页,最多256页)
      (4):读取整个EEPROM(64Kbit,256page)
  1. 顺序读,每读取1个字节数据(DATAn,DATAn+1…DATAn+x-1),都需要读取数据的应答ACK,读取最后一个字节数据(DATAn+x)时,出现非应答NO ACK。

三:顺序读操作实现(读取某一页中多个数据(最少2个,最多32个))

notion image
notion image
  1. 读取某一页中多个数据(最少2个,最多32个)仿真测试
    1. notion image
  1. 读取某一页中多个数据(最少2个,最多32个)下板验证
    1. notion image

四:读取指定的一页数据(32个)

notion image
  1. 读取一页数据第一种方式(32个)
    1. notion image
  1. 读取一页数据第二种方式(32个)
    1. notion image
  1. 读取一页数据第二种方式(32个)仿真测试
    1. notion image
  1. 读取一页数据第二种方式(32个)下板验证
    1. notion image

五:读取多页数据(3页)

notion image
notion image
  1. 读取多页数据(3页)仿真测试
    1. notion image
  1. 读取多页数据(3页)下板验证
    1. notion image

六:读取整个EEPROM(64Kbit)

notion image
notion image

串行通信系统设计

  1. 设计要求
    1. (1):采用1个独立按键控制EEPROM的数据写满(64Kbit),另1个独立按键控制EEPROM的数据读取。
      (2):读取的数据通过FIFO进行缓存(写FIFO)
      (3):读取FIFO数据,通过UART将读取数据发生出去,上位机软件(串口调试器)进行接收。
  1. 设计过程
    1. notion image
  1. 设计架构
    1. notion image
  1. 设计分析
    1. (1):EEPROM页写页读(64Kbit)
      notion image
      (2):EEPROM页写页读(64Kbit)
      notion image
      notion image
Loading...