必须更改QE 位设置才能解决QSPI FLASH 品牌兼容性问题
QSPI NorFlash面临短缺和价格上涨,因此我们认为制造商之前推荐的一些Flash不再可用,需要更换,但引脚完全兼容,无需更改硬件。可以直接粘贴替换吗?原来是开着的,但又发现不是开着的。这篇文章强调了需要改变的关键点。
问题具体分析
目前使用I.MXRT1020跨境MCU进行测试,使用官方标准SDK软件包,基于SDK_2.6.1_EVK-MIMXRT1020中IAR项目的flexspi_nor_polling_transfer示例。
官方用的是ISSI的QSPI NorFlash ISSI IS25LP064A-JBLE,不过这里换成了华邦的W25Q32。
通常,大多数QSPI 闪存只需要注意QE 位的设置。如果该位设置不正确,设备将无法正常启动。
请参阅W25Q32 器件文档以更改关键QE 位以启用4 线模式。将代码部分中QE使能的定义从官方默认的QE位值0x40更改为0x0200。
#define FLASH_QUAD_ENABLE0x0200 //0x40
我们为什么要做出这样的改变?
通常,如果需要使用四路4线模式IO0、IO1、IO2、IO3,则需要将QE位设置为1。这是状态寄存器S9 中的非易失性位。对该状态寄存器位的写入不会因电源故障而丢失。
QE 位因制造商而异,必须按照Winbond 手册中的说明进行更改。 QE参数信息解释如下:
为了执行应用程序代码的重复在线更新并测试块擦除功能,删除了配置代码中的以下完整擦除代码,并且只会执行某些应用程序块的擦除操作。需要升级。
//PRINTF('使用FlexSPI 擦除整个芯片.\r\n');////status=flexspi_nor_erase_chip(EXAMPLE_FLEXSPI);//if (status !=kStatus_Success)//{//return status; } //PRINTF('Erasefinished!\r\n'); 启用Enable Quad 模式后,执行Flexspi_nor_flash_erase_sector 函数的代码会导致代码在仿真调试期间停止在红色断点处。
如果第一次芯片完全空了,可以跳过断点并正常运行,但是一旦编程了一个扇区,下次运行将始终停在红色断点处。
问题解决办法:
上述问题与闪存擦除有关。仔细检查擦除相关命令,确保华邦块擦除命令是0x20而不是0xD7。如果我将LUT 表的块擦除命令更改为0x20,则代码运行成功。
总结和建议
更换片外QSPI flash时,应仔细检查各个制造商寄存器中的各个QE位,以及一些正常命令,例如块擦除。不一致的命令可能会导致移植和修改过程中出现异常行为。您需要彻底更改LUT表的参数。
参考文件:
https://www.nxp.com/products/processors-and-microcontrollers/arm-microcontrollers/i-mx-rt-crossover-mcus/i-mx-rt1020-crossover-mcu-with-arm-cortex-m7-core:i.MX- RT1020?tab=Design_Tools_tab
版权声明:本文由今日头条转载,如有侵犯您的版权,请联系本站编辑删除。