进行测试 W25Q128JV 支持4线操作
/*************************************************************************************************************
* 文件名: QSPI_test.c
* 功能: QSPI测试
* 作者: cp1300@139.com
* 创建时间: 2021-08-25
* 最后修改时间: 2021-08-25
* 详细: FLASH要用W25Q128JV系列
*************************************************************************************************************/
#include "system.h"
#include "hc32f46x_system.h"
#include "test.h"
#include "hc32f46x_qspi.h"
#include "W25QxxJV.h"
W25QxxJV_HANDLE mW25QxxJV_Handle;
u8 buff[256];
//QSPI测试
void QSPI_test(void)
{
W25QxxJV_ID id;
u16 i;
u8 *p = (u8 *)0x98000000; //QSPI地址映射
QSPI_Init(QSPI_ADDR_24BIT, 8, 6);//QSPI初始化
//初始化QSPI IO接口
//CS:PB1 CLK:PB14 D0:PB13 D1:PB12 D2:PB10 D3:PB2
SYS_GPIOx_SetAF(GPIOB, 1, 7);
SYS_GPIOx_SetAF(GPIOB, 14, 7);
SYS_GPIOx_SetAF(GPIOB, 13, 7);
SYS_GPIOx_SetAF(GPIOB, 12, 7);
SYS_GPIOx_SetAF(GPIOB, 10, 7);
SYS_GPIOx_SetAF(GPIOB, 2, 7);
QSPI_SetMode(QSPI_STAND_READ); //QSPI工作模式设置
QSPI_EnterRomMode(FALSE); //QSPI设置是否使能ROM访问模式-退出ROM模式
while(1)
{
id = W25QxxJV_Init(&mW25QxxJV_Handle,
QSPI_SPI_ReadByte, QSPI_SPI_WriteByte,
QSPI_EnterDirectMode, QSPI_ExitDirectMode,
SYS_DelayMS);
if(id != FLASH_NULL) break;
SYS_DelayMS(1000);
}
//写入flash
for(i = 0;i < 256;i ++)
{
buff = i;
}
uart_printf("开始写入W25QxxJv测试...\r\n");
if(W25QxxJV_Write(&mW25QxxJV_Handle, buff, 0, 256) == TRUE)//写SPI FLASH 在指定地址开始写入指定长度的数据
{
uart_printf("写入W25QxxJv成功\r\n");
}
else
{
uart_printf("写入W25QxxJv失败\r\n");
}
QSPI_SetMode(QSPI_4WIRE_IO_FAST_READ); //QSPI工作模式设置
QSPI_EnterRomMode(TRUE); //QSPI设置是否使能ROM访问模式-使能ROM模式
uart_printf("开始读取W25QxxJv测试...\r\n");
for(i = 0;i < 256;i ++)
{
uart_printf("%02X ", p);
}
uart_printf("\r\n");
QSPI_SetMode(QSPI_STAND_READ); //QSPI工作模式设置
QSPI_EnterRomMode(FALSE); //QSPI设置是否使能ROM访问模式-退出ROM模式
while(1)
{
uart_printf("ID:0x%X\r\n", W25QxxJV_ReadStatus(&mW25QxxJV_Handle));
SYS_DelayMS(1000);
}
}
注意:对flash的读取使用ROM模式,直接访问指定地址即可读取,任何其它操作,包括写,读取状态等,都需要退出4线模式以及ROM模式,进入直通模式,操作完成后,设置为1-4-4也就是1命令线,4地址线,4数据线模式,然后进入ROM模式,即可直接通过地址映射方式读取flash。
|