#灵感来源
感谢芯来科技的海少,给与的思路方法指导,以及国旭给与的代码参考。
##参考代码(CSDN付费资源)
MX25L128_MX25L256_SPI驱动代码.rar_MX25L128_MX25L128 程序_MX25L256驱动代码_
##参考文章
《STM32使用QSPI控制FLASH(FLASH芯片型号:MX25L25645G)》http://t.csdnimg.cn/sgFmj
#一、代码思路
由于要用到大数据量的norflash进行数据读写,而3byte地址模式,只能访问16M的地址空间,不够用的。所以我们想到了4Byte地址模式。在这里感谢芯来科技的海少,给出框架步骤,国旭给出了quad功能spi的参考代码。
int32_t selftest_spi_4Byte(void)
{
//第一步:先把qspi切换成普通模式
GD25Q32_Init(); //GD25Q32初始化,先初始化,后面的发送命令才能完成。
//第二步:设置norflash这边为4Byte模式
SET_4B_MODE(ENABLE);
//第三步:设置SPI这边的地址模式,从3byte,变为4byte
qspi_ffmt_addr_len_cfg(QSPI_BASE, 4);
//第4步:设置SPI这边切回xip模式
qspi_fctrl_flashxip_enable(QSPI_BASE);
//第5步:切换回对norflash的操作,因为后面要读写了。
GD25Q32_CS_ON;
return 0;
}
(本次使用的Norflash型号为MX25U51245G,代码里有些别的型号,纯属巧合,请忽略。)
#二、具体实现原理
具体实现命令如下
三、代码详细解析
下图是第二步的代码
//适配芯来科技后的,参考mx25U51245G的PDF的P44
void SET_4B_MODE(unsigned char enable)
{
qspi_csid_cfg(QSPI_BASE, 0x1); //CS#goes high,to trans instruction to the norflash
SPI1_ReadWriteByte((enable?MX25_CMD_EN4B: MX25_CMD_EX4B));
qspi_csid_cfg(QSPI_BASE, 0x0); //CS#goes low
}
后续由于要继续XIP读写,所以我有了框架中的第4步和第5步。
代码需要的话,看本文资源列表,如果还不够的话,推荐下载文章一开始的另一个作者的那个代码。