E2PROM一般有两种接口,分别为I2C接口 和SPI接口。由于SPI为3/4线制接口,输入、输出分离,读写简单,总线速度快,因此大容量的串行E2PROM多采用SPI接口的串行E2PROM。本节内容以Microchip的AT25040B 为例进行介绍,其它的SPI接口的串行E2PROM结构和用法都是类似的,在使用时注意读一下使用手册和注意事项即可。
1.芯片的管脚定义与封装结构
封装:如图1所示有4种封装,硬件工程师和PCB layout需要注意正确选型和使用

图1 SPI接口E2PROM(AT25010B)
-
管脚定义:
#WP : #WP为写保护管脚,为低时,整个芯片处于写保护状态。#HOLD一般和#CS 配合使用,可以在读写期间隔离串行输入输出。在#HOLD为低电平 期间,SO为高阻状态,时钟信号与SI都被忽略。多数设计电路#HOLD脚直接接高电平。
表1
| 管脚(Pin Name) | function | 功能 | 备注 |
| #CS | Chip Select | 片选 | 低电平有效 |
| SCK | Serial Data Clock | 串行时钟 | |
| SI | Serial Data input | 串行数据输入 | |
| SO | Serial Data Output | 串行数据输出 | |
| GND | Ground | 地 | |
| #WP | Write Protect | 写保护 | 低电平有效 |
| #HOLD | Suspends Serial Input and Output | 输入悬浮,输出高阻 | 输出高阻 |
2. SPI接口E2PROM的特点:
(1)速度快,相比较I2C接口,SPI的速度一般在5M左右,有的可以支持20M
(2)SI/SO输入、输出分离在写入的同时可以查看输出,操作简单
(3)在使用时需注意SPI 模式(Mode),一般在存储器的操作中采用Mode0 或Mode3
Mode0 与Model3的区别如图2所示,

图2 SPI读写模式
SPI 接口E2PROM内部结构框图如图3所示,SI,#CS ,#WP , SCK 等信号译码,进行数据的寻址与锁存。

图3 SPI接口E2PROM内部功能框图
3. SPI接口E2PROM硬件扩展
图4显示了如何进行SPI E2PROM的多片扩展使用。Master一般是MCU,DSP或FPGA,SS0-3可以是专用的接口,也可以是GPIO,只要每次只有一位为低电平就可以正确选择对应的Slave芯片。

图4 SPI接口E2PROM扩展
4. SPI E2PROM的读写命令:
无关项:见表2,其中X为无关项,可以为0也可以为1。
-
操作命令:
SPI E2PROM操作命令总计6条,分别为写使能锁存,复位写使能,读状态寄存器,写状态寄存器,读数据,写数据;如要进行写操作,则首先确保写使能正确执行。一般情况下,当#CS由低到高转变后会置位写使能。一般在写操作前一般会先进行写使能操作,之后跟写操作。
表2
| 命令Instruction
name |
命令格式Instruction
format |
操作
operation |
命令描述 |
| WREN | 0000X110 | Write enable Set
write enable latch |
写使能锁存 |
| WRDI | 0000X100 | Write disable instruction
Reset write enable latch |
复位写使能 |
| RDSR | 0000X101 | Read status Register | 读状态寄存器 |
| WRSR | 0000X001 | Write status register | 写状态寄存器 |
| READ | 0000A011 | Read data
from memory array |
读数据A表示AT25040的第9位地址 |
| WRITE | 0000A010 | Write data to
memory array |
写数据A表示AT25040的第9位地址为0或1 |
-
状态寄存器
状态寄存器的格式如表3
表3

-
状态寄存器内容解释,
状态寄存器内容详细解释见表4
表4
| 位(Bit) | 定义(Definition) | |
| Bit0 (#RDY) | Bit0=”0” (#RDY) indicate the device is ready | Bit0=”0” (#RDY) 指示设备已经准备就绪,可以继续各种操作 |
| Bit0 = “1” indicates the write cycle is in progress. | Bit0 = “1”指示正在处理内部编程过程。 | |
| Bit1 (WEN) | Bit1 = “0” indicates the device is not write enabled | Bit1 = “0” 指示器件没有处在写使能状态 |
| Bit 1 = “1” indicates the device is write enabled. | Bit1 = “1”指示器件已处在写使能状态 | |
| Bit2(BP0) | See table 5 | 见表5 |
| Bit3(BP1) | See table 6 | 见表5 |
| Bits 4–7 are “0”s when device is not in an internal write cycle. | ||
| Bits 0–7 are “1”s during an internal write cycle. | ||
-
写保护控制
写保护的详细内容见表五,
表5

5. 读写操作时序图:
-
数据时钟同步图,如图5所示

图5 数据时钟同步图
-
写使能 , 如图6

图6 写使能时序图
-
写使能复位,如图7

图7 写使能复位
-
读状态寄存器
读状态寄存器,在写命令阶段命令的位(Bits )与主设备上升沿对齐,在数据读取阶段,数据位的输出与时钟的下降沿对齐,因此主设备捕获该数据时应与时钟的上升沿对齐。

图8 读状态寄存器
-
写状态寄存器
状态寄存器的内容,紧跟操作命令,中间没有间断。都是从高位到低位,如图9。

图9 写状态寄存器时序
-
读操作
从图10可以看出,在读操作的数据阶段,从设备数据在时钟的下降沿输出,主设备在该数据时捕获时应该与时钟上升沿对齐。对于大容量的存储器,注意高位地址的位置。

图10 读操作时序图
-
写操作
在串行移位时,高位(MSB)在前,低位(LSB)在后。

图11 写数据操作
-
#HOLD时序图
在#CS为低电平时,如果#HOLD由高到低变化,输入SI被忽略,SO为高阻输出。主要用途是临时中断读写过程,当需要恢复时可以将#HOLD拉高,可以继续被中断的过程。在没有硬核支持的MCU操作时,会经常使用。

图12 #HOLD 时序控制
6. 编程步骤及注意事项
-
读操作
- 写读命令–>读地址(SI),在数据下降沿准备数据,在上升沿写入。串行化时高位在前,低位在后。
- 读数据(SO),主设备上升沿数据捕获数据,高位在前低位在后,串行左移。
-
写操作
- 写使能置位
- 写操作,写命令–>写地址(SI)
- 写数据(SI),高位在前低位在后
-
编程
在写数据结束后,当#CS由低到高启动编程(烧录),大约持续时间为5毫秒。也可以利用读取状态寄存器的结果进行识别。
-
编程时钟
最高可支持20Mhz
7. 相关芯片
相关芯片有AT25080B,AT251600B,AT25320B,AT25640B等,管脚兼容,容量以2的幂次增长,请自行阅读相关资料,确定编程注意事项。
spi eeprom deivce verilog 模型
[content_control]
[/content_control]
对应视频: