一、介绍
NorFlash(也称为 NOR 型闪存)是一种非易失性存储器,常用于嵌入式系统和存储设备中。NorFlash 是一种闪存类型,可以用于存储程序代码、固件、操作系统以及其他数据。与 NAND Flash 相比,NorFlash 具有较低的存储密度和较高的成本,但具有较快的读取速度、较低的读取延迟和较好的随机访问性能。这使得 NorFlash 适合用作执行代码和存储需要低延迟和高可靠性的关键数据的应用程序。它在嵌入式系统中被广泛应用于引导存储器和关键数据存储,为设备的启动和运行提供了可靠的解决方案。
二、相关知识补充
1、NorFlash ID
NorFlash 的 ID 定义规则是根据具体的芯片型号和厂商的规定而定的,一般格式如下:
厂商 ID | 用于标识 NorFlash 芯片的制造厂商。每个厂商都有自己独特的 ID |
设备 ID | 设备 ID 是指 NorFlash 芯片的设备标识符。不同芯片厂商有不同的设备 ID 命名规则 |
存储密度 | 用于标识 NorFlash 芯片的存储容量 |
Flash ID 可在对应的 NorFlash 手册中查询,以 GD25LT 为例:
2、命令
主控制器通过总线发送不同的命令访问 NorFlash 芯片,常见的命令包括 GET ID、GET STATUS、READ、WRITE、ERASE 等。不同的命令拥有不同的命令字和传输协议,这部分在 NorFlash 手册中有详细的描述。以 GD25LT 的读命令为例:
上表中可以看出,GD25LT 包含 5 种 READ 命令,对应了 5 中不同的命令传输协议,适配 NorFlash 时根据实际情况选择合适的命令即可。
3、命令传输协议
命令组成结构
主控制器对 NorFlash 的所有操作都基于命令进行,一条命令由 Command、Address、Extra、Dummy、Data 五个命令段中的部分段组成。如下图所示:
命令段 | 描述 |
Command | 命令字段 |
Address | 地址字段 |
Extra | 扩展字段 |
Dummy | 延时字段 |
Data | 数据字段 |
以 GD25LT 的读命令 03H 为例,包含 1B 的命令字 03H,3B 的地址字段,后面紧接着是若干字节的数据字段。各字段数据均以 1 线方式传输:
再以 GD25LT 的读命令 6BH 为例,包含 1B 的命令字 6BH,3B 的地址字段,8 位 Dummy 周期,后面紧接着是若干字节的数据字段。其中命令字段、地址字段以 1 线方式传输,数据字段以 4 线方式传输:
1/2/4/8 线和 SDR/DDR
用于传输数据的 Data 线数量可能存在 1/2/4/8 这四种情况。数据线上有 SDR、DDR 两种模式,SDR 表示一个时钟周期采样一位,DDR 表示一个时钟周期采样两位。1 线 SDR 模式一个时钟周期传输一位数据,而 8 线 SDR 模式一个时钟周期传输 1 字节数据。以此类推 8 线 DDR 模式一个时钟周期传输 2 字节数据。不同芯片、不同命令、不同字段需要使用的 Data 线数量和模式都不一样,具体需要在手册中查询。
我们在这里将一条命令的传输协议用 xy-xy-xy 的形式表示,三个部分分别代表 Command、Address、Data 字段,x 表示 Data 线数量,y 表示 Data 线模式。具体表示方式参考如下几个案例。
还以 GD25LT 的读命令 03H 为例,从手册中可以看出 Command、Address、Data 三个字段均以 1 线形式传输,且都为 SDR 模式,因此 GD25LT 的读命令 03H 的传输协议可以被标记为 1s-1s-1s:
再看 GD25LT 的读命令 6BH,从手册中可以看出 Command、Address 这两个字段的数据通过 1 线形式传输,Data 字段以 4 线形式传输,且都为 SDR 模式,因此 GD25LT 的读命令 6BH 的传输协议可以被标记为 1s-1s-4s:
再来看一个 DDR 的情况,MT35XU 的读命令 9DH Command 字段使用 1 线 DDR 模式(可以看成 DDR 模式传输 2 字节 Cmd),Address、Data 使用 8 线 DDR 模式。因此 MT35XU 的读命令 9DH 的传输协议可以被标记为 1d-8d-8d:
Dummy
Dummy 延时一般出现在读数据、状态命令的 Address 字段和 Data 字段之间,是为了让 Flash 有时间去准备被读取的数据。芯片手册中会规定具体的 Dummy 延时周期数,某些芯片中这个值可以通过 Nor 寄存器进行配置。
4B 地址模式
命令传输协议中默认 Address 字段长度为 3 字节,即寻址范围为 0 - 16MB。当 NorFlash 的容量超过 16MB 时,3 字节的 Address 字段就不够了,这时需要使能 4B 地址模式。使能 4B 地址模式后,主控制器需要在传输 Address 字段是发送 4 字节地址。
Data Strobe Signal(DQS)
DQS 信号在主控制器期读操作期间由 Flash Device 输出,一般用于在高速模式下代替 CLK 信号,已达到提高数据采样稳定性的作用。在 DQS 使能后,主控制器会根据 DQS 的时钟边沿从数据线上采样数据。
4、状态/配置寄存器
NorFlash 芯片中包含一系列状态、配置寄存器,可以通过读取、写入状态、配置寄存器完成 NorFlash 状态查询、设置 Dummy 值、设置模式等操作。GD25LT 的状态寄存器如下所示:
从上表中可以看状态、配置寄存器有 Volatile、Non-volatile 两种模式。Volatile 表示易失,即配置后掉电(复位)后丢失,Non-volatile 表示非易失,即配置后掉电(复位)后数据不丢失。NorFlash 会提供具体的命令用于读取、写入状态、配置寄存器。GD25LT 的读寄存器命令如下所示:
5、Busy 状态
NorFlash 在执行擦除、写入数据、写入非易失寄存器后会立即进入 Busy 状态。在此期间除了读取状态寄存器命令外,NorFlash 不会响应任何其他的命令。在 NorFlash 内部完成对应的擦除、写入操作后会恢复到 Idle 状态,主控制器可以通过查询状态寄存器 WIP 位判断当前 NorFlash 状态,1 表示 Busy 状态,0 表示 Idle 状态。