E2PROM一般有两种两接口,分别为I2C接口 和SPI接口。由于SPI为3线制接口,输入、输出分离,读写简单,总线速度快,因此大容量的串行EEPROM多采用SPI接口的串行EEPROM。本节内容以Microchip的AT25040B 为例进行介绍,其它的SPI接口的串行EEPROM其结构和用法都是类似的,在使用时注意读一下使用手册和注意事项即可。
-
芯片的管脚定义与封装结构
封装:如图1所示有4种封装,硬件工程师和PCB layout需要注意正确选型和使用,封装的基本知识请参照”硬件设计与PCB Layout”相关内容。
图1 SPI接口EEPROM(AT25010B)
-
管脚定义:
#WP : #WP为写保护管脚。当该管脚为低时,整个芯片处于写保护状态。#HOLD一般和#CS 配合使用,可以在读写期间隔离串行输入、输出。在#HOLD为低电平期间,SDO为高阻状态,时钟信号与SDI都被忽略。多数设计电路中#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接口EEPROM的特点:
(1)速度快:相比较I2C接口,SPI的速度一般在5M左右,有的可以支持20M。
(2)SI/SO输入、输出分离:在写入的同时可以查看输出,读写操作简单。
(3)在使用时需注意SPI 模式(Mode),一般在存储器的操作中采用Mode0 或Mode3
Mode0 与Model3的区别如图2所示,当设置为Mode0时,在#CS拉高时SCK保持低电平,而Mode3对应的SCK为高电平。
图2 SPI读写模式
-
SPI 接口EEPROM内部结构框图
如图3所示,SI,#CS ,#WP , SCK 等信号译码,进行数据的寻址与锁存。
图3 SPI接口EEPROM内部功能框图
4. SPI接口EEPROM硬件扩展
图3-19 显示了如何进行SPI EEPROM的多片扩展使用。Master一般是MCU,DSP或FPGA,SS0-3可以是专用的接口,也可以是GPIO,只要每次只有一位为低电平就可以正确选择对应的Slave芯片。
图4 SPI接口EEPROM扩展
5. SPI EEPROM的读写命令:
-
操作命令:
SPI EEPROM 操作命令总计6条,分别为写使能锁存,复位写使能,读状态寄存器,写状态寄存器,读数据,写数据;如要进行写操作,则首先确保写使能正确执行。一般情况下,当#CS有低到高转变后会复位写使能,因此一般在写操作前一般会先进行写使能操作,之后跟写操作。表2中X为无关项,可以为0也可以为1。A表示高位地址。
表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的第八位地址 |
WRITE | 0000A010 | Write data to
memory array |
写数据A表示AT25040的第八位地址为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. |
-
写保护控制
写保护由BP1,BP0组合的值进行选择,该部分的写保护与#WP不同,是软件可控的写保护,详细内容见表5。
表5
6. 读写操作时序图:
- 数据时钟同步图,如图5所示
图5 数据时钟同步图
-
写使能 , 如图6
图6 写使能时序图
-
写使能复位,如图7
图7 写使能复位
-
读状态寄存器
读状态寄存器,在写命令阶段命令的位(Bits )与主设备上升沿对齐,在数据读取阶段,数据位的输出与时钟的下降沿对齐,因此主设备捕获该数据时应与时钟的上升沿对齐,如图8所示。
图8 读状态寄存器
- 写状态寄存器
状态寄存器的内容,紧跟操作命令,中间没有间断。都是从高位到低位,如图9。
图9 写状态寄存器时序
-
读操作
从图10可以看出,在读操作的数据阶段,从设备数据在时钟的下降沿输出,主设备在该数据时捕获时应该与时钟上升沿对齐。对于容量的存储器,主要高位地址的位置。
图10 读操作时序图
-
写操作
在串行移位时,高位(MSB)在前,低位(LSB)在后。
图11 写数据操作
-
#HOLD时序图
在#CS为低电平时,如果#HOLD由高到低变化,输入SI被忽略,SO为高阻输出。主要用途是临时终端读写过程,当需要恢复时可以将#HOLD拉高,可以继续被中断的过程。在没有硬核支持的MCU操作时,会非常使用。
图12 #HOLD 时序控制
7. 编程步骤及注意事项
-
-
读操作
- 写读命令–>读地址(SI),在数据下降沿准备数据,在上升沿写入。串行化时高位在前,低位在后。
- 读数据(SO),主设备上升沿数据捕获数据,高位在前低位在后,串行左移。
-
写操作
- 写使能置位,
- 写操作,写命令–>写地址(SI),串行化时高位在前,低位在后。
- 写数据(SI),高位在前低位在后。
-
编程
在写数据结束后,当#CS由低到高启动编程(烧录),大约持续时间为5毫秒。也可以利用读取状态寄存器的结果进行识别。
-
编程时钟
-
最高可支持20Mhz
8. 相关芯片
相关芯片有AT25080B,AT251600B,AT25320B,AT25640B等,管脚兼容,容量以2的幂次增长,请自行阅读相关资料,确定编程注意事项。
请问有相关代码吗?