欢迎访问云渡桥财经网

瑞萨RA系列FSP库开发实战指南之QSPI控制FLASH的指令

频道:外汇市场 日期: 浏览:4795

23.2

控制FLASH的指令

对主机端(RA6M5)来说,只是它遵守最基本的QSPI通讯协议发送出的数据,但在设备端(FLASH 芯片)把这些数据解释成不同的意义,所以才成为指令。

查看FLASH芯片的数据手册《AT25SF321B》,可了解各种它定义的各种指令的功能及指令格式,见表23‑2。

表23‑2FLASH常用芯片指令表

(摘自规格书《AT25SF321B》)

910d5bec-15ed-11f1-90a1-92fbcf53809c.png

该表中的第一列为指令名,第二列为指令编码,第三至第N列的具体内容根据指令的不同而有不同的含义。其中带括号的字节参数,方向为FLASH向主机传输,即命令响应,不带括号的则为主机向FLASH传输。表中“A0~A23”指FLASH芯片内部存储器组织的地址;“M0~M7”为厂商号(MANUFACTURER ID);“ID0-ID15”为FLASH芯片的ID;“dummy”指该处可为任意数据;“D0~D7”为FLASH内部存储矩阵的内容。

在FLSAH芯片内部,存储有固定的厂商编号(M7-M0)和不同类型FLASH芯片独有的编号(ID15-

ID0),见表23‑3。

表23‑3 FLASH数据手册的设备ID说明

通过指令表中的读ID指令“JEDEC ID”可以获取这两个编号,该指令编码为“9Fh”,其中“9Fh”是指16进制数“9F”(相当于C 语言中的0x9F)。紧跟指令编码的三个字节分别为FLASH芯片输出的“(M7-M0)”、“(ID15-ID8)”及“(ID7-ID0)”。

此处我们以该指令为例,配合其指令时序图进行讲解,见下图。

92a9bd60-15ed-11f1-90a1-92fbcf53809c.png

主机首先通过MOSI线向FLASH芯片发送第一个字节数据为“9Fh”,当FLASH芯片收到该数据后,它会解读成主机向它发送了“JEDEC指令”,然后它就作出该命令的响应:通过MISO线把它的厂商ID(M7-M0)及芯片类型(ID15-0)发送给主机,主机接收到指令响应后可进行校验。常见的应用是主机端通过读取设备ID来测试硬件是否连接正常,或用于识别设备。

对于FLASH芯片的其它指令,都是类似的,只是有的指令包含多个字节,或者响应包含更多的

数据。

实际上,编写设备驱动都是有一定的规律可循的。首先我们要确定设备使用的是什么通讯协议。

如上一章的EEPROM使用的是I2C,本章的FLASH 使用的是SPI。那么我们就先根据它的通讯协议,选择好RA6M5的硬件模块,并进行相应的I2C或SPI模块初始化。

接着,我们要了解目标设备的相关指令,因为不同的设备,都会有相应的不同的指令。如EEPROM中会把第一个数据解释为内部存储矩阵的地址(实质就是指令)。而FLASH则定义了更多的指令,有写指令、读指令、读ID指令等等。最后,我们根据这些指令的格式要求,使用通讯协议向设备发送指令,达到控制设备的目标。

为了方便使用,我们把FLASH芯片的常用指令编码使用宏来封装起来,后面需要发送指令编码

的时候我们直接使用这些宏即可。

列表1:FLASH指令编码表

左右滑动查看完整内容

/*FLASH 常用命令*/
#defineWriteEnable 0x06
#defineWriteDisable 0x04
#defineReadStatusReg 0x05
#defineWriteStatusReg 0x01
#defineReadData 0x03
#defineFastReadData 0x0B
#defineFastReadDual 0x3B
#definePageProgram 0x02
#defineBlockErase 0xD8
#defineSectorErase 0x20
#defineChipErase 0xC7
#definePowerDown 0xB9
#defineReleasePowerDown 0xAB
#defineDeviceID 0xAB
#defineManufactDeviceID 0x90
#defineJedecDeviceID 0x9F
/* 其它*/
#definesFLASH_ID 0x1F8701
#defineDummy_Byte 0xFF