SPI FLASH(Serial Peripheral Interface)是串行外设接口的缩写,是一种高度、全双工、同步的通信总线。一般应用在MCU与外围设备之间通讯,广泛应用在FLASH,模数转换器等。
常用的内部通信接口:UART、IIC、SPI。
常用的外部通信接口:RS232、RS485、CAN
SPI flash 就是通过串行的接口进行操作的 flash 存储设备。一般板卡会配有一个 spi flash 存储芯片。因为 flash 具有断电数据不丢失的特性,而我们 FPGA 芯片掉电数据是会丢失的,所以我们就可将 FLASH作为 FPGA 芯片的上电配置器件(主要用于嵌入式设备的引导启动程序的存储如 Bootloader。),我们将上电程序固化在 FLASH 中,上电后 FPGA 芯片读取到 FLASH 中存储的程序进行运行,这样就能做到程序断电不丢失了。SPI FLASH 读写较慢,次数有限制,一般用于不经常更改的存储。
flash 按照内部存储结构不同,分为两种:nor flash 和 nand flash。这里 spi flash 属于 nor flash。
对比项 | NAND Flash | NOR Flash |
---|---|---|
芯片容量 | <32GBit | <1GBit |
访问方式 | 顺序读写 | 随机读写 |
接口方式 | 任意I/O口 | 特定完整存储器接口 |
读写性能 | 读取快(顺序读)、写入快、擦除快(可按块擦除) | 读取快(RAM方式)、写入慢、擦除慢 |
使用寿命 | 百万次 | 十万次 |
价格 | 低廉 | 高昂 |
常用的生产厂家:winbond(华邦),Micron(镁光),numonyx(恒亿)、ISSI(芯成),兆易创新
单位转换:
1Bytes=8bits(
1 字节等于 8 位)
1KB=1024Bytes(1KB 等于 1024 字节)
1MB=1024KB
1GB=1024MB
注:另外,Byte 通常简写为 B(大写),而 bit 通常简写为 b(小写);1B=8b。
bit 意为“位”或“比特”,是计算机运算的基础,属于二进制的范筹;
Byte 意为“字节”,是计算机文件大小的基本计算单位;
块、扇区、页的区别
以华邦的 W25Q128 为例,容量为 128Mbits,注意这里的单位是 bit,换算成字节(Byte),也就是:128Mbits/8=16M=16*1024KB= 16384 KB = 16,777,216B,所以很容易计算出整个存储空间的地址范围:0x000000~0xFFFFFF
SPI Flash 和 EPROM 的很大的一个不同就是多了块、扇区、页的概念。
W25Q128 的整个存储空间被分成了 256 个块(Block),每个块包含 16 个扇区(Sector),每个扇区又包括 16 个页。所以,如果按照块来计算,W25Q128 包括 256 个块。
如果按照扇区来计算,W25Q128 包括 256*16=4096 个扇区。
如果按照页来计算的话,W25Q128 包括 4096*16=65536 个页。
每个块的大小是:16384KB/256 = 64KB
每个扇区的大小是:64KB/16 = 4KB
每个页的大小是:4KB/16 = 256B
但是实际上,我们在进行读写操作时,都是区分块和扇区,不区分页的。包括在官方的 Datasheet 中,并没有重点提及页的地址范围。
**SPI flash 的特点 **
高速(1.受限于最大时钟频率 2.受限于 CPU 处理 SPI 数据的能力;3 受限于PCB 走线);
全双工(两个数据线可以同时收发);
主从模式(既可当主机又可当从机工作);
提供频率可编程时钟;
EPROM 通常采用是 IIC 串行总线,低速,单双工,通信速率一般是百 KHz。而SPI Flash 是采用的 SPI 总线,高速,全双工,通讯速率一般是百 MHz。SPI Flash属于 Flash ROM 闪存,相比于 EPROM,读写速度更快。
EPROM 通常用于存储不频繁读取的数据,如配置信息等,而 SPI Flash 通常用来存储经常读取的数据,如字库文件等。
EPROM 读写比较随意,想写那个地址写那个,想读哪个地址读哪个!而 SPI Flash 则比较规范,擦除的最小单位是扇区。向某个地址写入数据时,要先读取这个地址的数据是否为 0xFF,如果不是 0xFF,那么这个数据写入失败。所以通常的写操作是,在写某个地址之前,直接擦除这个地址所在的那个扇区,然后再写数据。当然,如果这个扇区的所有内容都是 0xFF,则无需擦除,可以直接写入。
EPROM 通常容量比较小,大小为 KB 级的,如 AT24C02 是 2KB,而 SPI Flash容量比较大,大小为 MB 级的,如 W25Q16 是 16Mbit,也就是 2MB。
EPROM 型号通常是 xx24 系列,而 SPI Flash 通常是 xx25 系列,所以从芯片型号我们也可以看出 ROM 类型。
EPROM 数据保存时间大约是 100 年,而 SPI Flash 数据保存时间为 20 年。
EPROM 的读写次数为 100 万次左右,SPI Flash 读写次数为 10 万次左右。
电路实战1:
电路实战2:
注意:根据需求选择对应的标注 SPI flash、Dual flash、Quad flash。具体项目具体看了,理论上在 CLK 一定的情况下, 线数越多访问速度也越快。
如果需要 CS 管脚跟踪 VCC 电压,防止上电或断电时,由于 VCC 电压不足导致写数据异常,建议 CS 管脚串 10k 电阻到 VCC,起到跟踪保护左右。
片选信号:是否要接上拉电阻或者下拉电阻,看具体规格书要求;(一般要加上拉电阻)
电源接滤波电容。
建议:IO0-IO3 加上 22 欧姆的电阻作为阻抗匹配;除了 SCK,其余都加上上拉电阻。
在设计一个具体的 SPI Flash 的接口电路时,要考虑是否需要支持其Dual/Quad IO 功能以提高读写速度。
上一篇:Java EE|多线程基本操作
下一篇:React技术点入坑