本帖最后由 小恩GG 于 2020-3-20 19:52 编辑
【经验分享】MIMXRT1064 内部flash操作代码
一,文档简介
写本篇经验分享的原因是,有些网友想单独操作MIMXRT1064的内部flash,都知道MIMXRT1064的内部flash实际上是一颗4MB Winbond W25Q32JV 的芯片放在RT1064芯片内部,然后通过QSPI 如下接口连接:
在官方的RT1064 SDK代码中,有flexpi接口连接QSPI 的代码:
SDK_2.7.0_EVK-MIMXRT1064\boards\evkmimxrt1064\driver_examples\flexspi\nor\polling_transfer
但是如果仔细查看,可以发现这个代码是通过FlexSPIA接口连接MIMXRT1064-EVK板上外部的ISSI QSPI 芯片:
那么如果要修改官方SDK的flexSPI代码,如果实现与内部winbond芯片的连接呢?本篇文章讲仔细讲解在SDK2.7.0上MCUXpresso工程具体需要修改的点,并且给出测试结果,其他IDE修改代码修改方式一样。
二,代码说明
ISSI IS25WP064芯片和winbond W25Q32JV都是QSPI接口的QSPI flash,那么它们到底有哪些不同点呢?
1. QE bit位置不同
W25Q32JV QE位置为S9, 而IS25WP064为bit 6,所以我们需要修改关于QE的代码:
WriteValue从之前的0X40改为0X0200
2. Flashsector 擦除的命令不同
查看代码可以发现,SDK代码里面擦除的命令为0XD7
/*Erase Sector */
[4 * NOR_CMD_LUT_SEQ_IDX_ERASESECTOR] =
FLEXSPI_LUT_SEQ(kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0xD7, kFLEXSPI_Command_RADDR_SDR, kFLEXSPI_1PAD, 0x18),
然后查看两块芯片的数据手册,发现命令如下:
其实0X20 为4K sector erase的共同运行命令,所以完全可以修改0XD7为0X20,因为winbond不能支持0XD7擦除命令。
3. 修改flash模块时钟
时钟修改为133Mhz
4.不需要的配置FlexSPIA接口的Pinmux代码可以去掉
5. 代码修改为从内部RAM运行
因为内部QSPI flash不能支持RWW功能,所以操作flash的代码需要放到内部RAM运行,修改如下:
到目前为止,所有的修改已经完成,可以进入测试阶段,烧录RAM看功能
三,测试结果
1. 初始化flexSPI,读取VID
读出0XEF,正确结果
2. 擦除命令
之前0X70004000区域是有数据的,经过sector擦除,都变成0XFF,说明擦除成功。
3. 编程命令
可以看到0X70004000区域已经有需要写入的数据,编程命令也操作成功。
到目前为止,所有的命令均已经成功,所以该程序可以准确访问内部flash了。
evkmimxrt1064_flexspi_nor_polling_internal_transfer.rar
(645.94 KB, 下载次数: 100)
|