[分享] MIMXRT1064 内部flash操作代码
2457 查看
5 回复
 楼主 | 发布于 2020-09-21 | 只看楼主
分享到:
一,文档简介

     写本篇经验分享的原因是,有些网友想单独操作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 芯片:


那么如果要修改官方SDKflexSPI代码,如果实现与内部winbond芯片的连接呢?本篇文章讲仔细讲解在SDK2.7.0MCUXpresso工程具体需要修改的点,并且给出测试结果,其他IDE修改代码修改方式一样。



二,代码说明

     ISSI IS25WP064芯片和winbond W25Q32JV都是QSPI接口的QSPI flash,那么它们到底有哪些不同点呢?

1. QE bit位置不同


W25Q32JV QE位置为S9 IS25WP064bit 6,所以我们需要修改关于QE的代码:


WriteValue从之前的0X40改为0X0200

2. Flashsector 擦除的命令不同

查看代码可以发现,SDK代码里面擦除的命令为0XD7

   /*Erase Sector  */

   [4 * NOR_CMD_LUT_SEQ_IDX_ERASESECTOR] =

       FLEXSPI_LUT_SEQ(kFLEXSPI_Command_SDRkFLEXSPI_1PAD0xD7kFLEXSPI_Command_RADDR_SDRkFLEXSPI_1PAD, 0x18),

然后查看两块芯片的数据手册,发现命令如下:


其实0X20 4K sector erase的共同运行命令,所以完全可以修改0XD70X20,因为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了。

本帖有更多资源,需 登录 才可以下载,没有帐号?立即 注册

(0 ) (0 )
回复 举报

回复于 2020-09-25 沙发

1
(0 )
评论 (0) 举报

回复于 2020-12-14 2#

学习一下
(0 )
评论 (0) 举报

回复于 2021-08-31 3#

学习一下!
(0 )
评论 (0) 举报

回复于 2022-08-11 4#

很好很强大
(0 )
评论 (0) 举报

回复于 2023-05-28 5#

资料很有用
(0 )
评论 (0) 举报
  • 发表回复
    0/3000





    举报

    请选择举报类别

    • 广告垃圾
    • 违规内容
    • 恶意灌水
    • 重复发帖

    全部板块

    返回顶部