前言
Flash作为一种非易失性存储,用于存放系统启动的固件。作为FPGA工程师,在基于FPGA的固件升级时,FPGA需要访问配置flash,完成固件的更新。
- 用软核的方式升级
- 采用RTL实现flash控制器进行升级
不管采用哪种方式,对于flash器件本身的结构,由结构所规定的操作方式还是需要加以了解掌握
Flash结构
这里以SPI Flash为例,学习其内部结构
这里需要注意的是,Flash操作以page为单位,page的大小为256Byte
从框图中可以看到通常flash对外的引脚如下
名称 | 用途 |
---|---|
RESET# | 复位 |
HOLD# | 中断操作 |
W# | 写保护 |
S# | 片选 |
C | 时钟 |
DQ1-4 | 数据 |
说外flash对外的引脚,说说内部存储空间是如何组织与排列的,这一点,可以从flash存储区的地址划分上说起
这里可以看到,地址划分为3级,sector(64KB)、subsector(32KB)、subsector(4KB)
以上的结构决定了Flash的操作方式
工作状态
初始化过程
flash上电后内部有非易失的控制寄存器用于存放当前Flash工作状态控配置信息,用户通过高亮的指令对配置寄存器进行读写操作。
Nonvolatile Configuration Register
该寄存器在Flash上电初始化过程中扮演非常重要的角色,同时针对容量超过128Mb的存储器件,地址位宽就在3byte和4byte有所差异。
Extend Address Register
Flash工作在默认模式想访问超过128Mb空间的flash,则必须通过扩展地址寄存器
访问过程
擦除
擦除把Flash中所有内容置1,擦除操作按照粒度可以分为以下几类:
读
写
写操作以page为单位