SPI_FLASH简介
spi_flash是一种通用存储器,也称为SPI NOR Flash或SPI Flash。它使用SPI(Serial Peripheral Interface)接口进行通信,可以通过串行方式读写数据。spi_flash的特点是工作电压低,体积小,读写速度快,并且可擦写次数很大。因此,它被广泛应用于嵌入式系统中,用于存储程序代码、配置信息和数据。
spi_flash的存储单元由位线和字线组成,可以以字节为单位进行读写操作。它通常具有多个扇区,每个扇区又包含许多块。spi_flash的读操作是通过发送地址和读指令来获取数据,写操作是通过发送地址、写指令和数据来存储数据。
spi_flash的容量可以从几十KB到几GB不等。它可以通过软件进行编程,并且支持批量擦除和写入操作。此外,spi_flash还具有保护数据的功能,可以设置写保护位来防止误操作。
spi_flash的接口标准化,可以与许多微控制器和处理器进行连接。它可用于存储启动代码、操作系统、驱动程序和各种应用程序。在嵌入式系统中,spi_flash通常用作存储设备的主要存储介质,提供快速、可靠的数据存储和读取功能。
SPI_FLASH的通信协议
SPI_FLASH的存储容量
我们这里以W25Q128FV芯片为例子进行介绍,如下图所示。
这款芯片的总容量是128Mbit,这个存储阵列被划分为256个BLOCK(64KB),每一个BLOCK块划分为16个Sector(4KB) ,每一个Sector是包含16个page(256个字节)。
SPI_FLASH的指令介绍
WR_EN指令介绍
WREN(WriteEnable):使能指令(06h),写使能指令可将 Flash 芯片设置为写使能锁存(WEL)状态; 在每一次页写操作(PP)、扇区擦除(SE)、全擦除(BE)和写状态寄存器(WRSR)操作之前,都需要先进行写使 能指令写入操作。操作时序为先拉低片选信号,写入写使能指令,在指令写入过程中,片选信号始终保持 低电平,指令写入完成后,将片选信号拉高。
READ STATUS REGISTER指令介绍
Page program指令介绍
READ DATA指令介绍
BLOCK ERASE(52h)指令介绍
备注:擦除命令还有其他几种,这里不再介绍。
SPI_FLASH指令如何操作
前面介绍的这些指令就是实际操作spi_flash时要用到的指令,具体如何操作呢?
对spi_flash操作主要就是分为2个部分:写操作和读操作。
写操作部分
-
对空白的地址进行写操作
第一步:执行写使能命令
第二步:执行写命令
第三步:执行读状态寄存器命令(判断flash芯片是否处于空闲状态) 如果读取的状态寄存器为空闲本次写就结束;如果读取状态寄存器为非空闲,继续发送本条命令,直达读取的状态寄存器为空闲 为止。
2.对写过数据的地址重新进行写操作
第一步:执行写使能命令
第二步:执行擦除命令
第三步:执行读状态寄存器命令(判断flash芯片是否处于空闲状态) 如果读取的状态寄存器为空闲本次写就结束;如果读取状态寄存器为非空闲,继续发送本条命令,直达读取的状态寄存器为空闲 为止。
第四步:执行写使能命令
第五步:执行写命令
第六步:执行读状态寄存器命令(判断flash芯片是否处于空闲状态) 如果读取的状态寄存器为空闲本次写就结束;如果读取状态寄存器为非空闲,继续发送本条命令,直达读取的状态寄存器为空闲 为止。
读操作部分
执行读命令。
系统程序框架设计
本系统通过串口下发相关指令,实时的对SPI_FALSH芯片进行读写操作,从而实现简单的人机交互功能,使用者操作起来更加直观和便利。
上板 实验结果
首先通过串口下发写操作对spi_flash写入256个递增数据,然后下发回读命令,从spi_flash芯片中将写入的数据读出,最后通过串口发送回传到PC端的串口助手进行显示。