Appearance
QSPI
SPI: 标准SPI
Dual SPi: 双线SPI
Qual SPI: 四线SPI
间接模式: 就是之前使用的模式
状态轮训模式: 读取状态, 在编程结束以后可以使用这一个
内存映射: 直接使用指针进行操作
优化操作: 加快速递, 单倍数据是单边沿检测, 双倍数据模式是双边沿检测
模式
- 间接模式
相当于之前使用的普通模式
- 内存映射
在进行写入或者命令操作的时候需要退出这一个模式, 读取的时候可以直接读取内存
c
static void norflash_ex_enter_mmap(void)
{
uint32_t tempreg = 0;
/* BY/W25QXX 写使能(0X06指令) */
while (QUADSPI->SR & (1 << 5)); /* 等待BUSY位清零 */
QUADSPI->CCR = 0X00000106; /* 发送0X06指令,BY/W25QXX写使能 */
while ((QUADSPI->SR & (1 << 1)) == 0); /* 等待指令发送完成 */
QUADSPI->FCR |= 1 << 1;
if (qspi_wait_flag(1 << 5, 0, 0XFFFF) == 0) /* 等待BUSY空闲 */
{
tempreg = 0XEB; /* INSTRUCTION[7:0]=0XEB,发送0XEB指令(Fast Read QUAD I/O) */
tempreg |= 1 << 8; /* IMODE[1:0]=1,单线传输指令 */
tempreg |= 3 << 10; /* ADDRESS[1:0]=3,四线传输地址 */
tempreg |= (uint32_t)g_norflash_addrw << 12; /* ADSIZE[1:0]=2,24/32位地址长度 */
tempreg |= 3 << 14; /* ABMODE[1:0]=3,四线传输交替字节 */
tempreg |= 0 << 16; /* ABSIZE[1:0]=0,8位交替字节(M0~M7) */
tempreg |= 4 << 18; /* DCYC[4:0]=4,4个dummy周期 */
tempreg |= 3 << 24; /* DMODE[1:0]=3,四线传输数据 */
tempreg |= 3 << 26; /* FMODE[1:0]=3,内存映射模式 */
QUADSPI->CCR = tempreg; /* 设置CCR寄存器 */
}
sys_intx_enable(); /* 开启中断 */
}
使能的方式
- 命令序列