|
大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是i.MXRT下FlexSPI driver实现Flash编程时对于中断支持问题。
; r7 d- X; \" v% T! @; L1 e前段时间有客户在官方社区反映 i.MXRT1170 下使用官方 SDK 里 FlexSPI 驱动去擦写 Flash 时不能很好地支持全局中断。客户项目里用了两块 NOR Flash,分别挂在不同的 FlexSPI 上,一块 Flash 用于存储 XIP 代码(FlexSPI1),另一块 Flash 用于存储项目资源数据(FlexSPI2),显然这样的设计原理上是没有问题的,那为什么使能了中断会出问题呢?今天痞子衡来分析下这个问题:# P4 b6 V& i3 |$ P- N, k8 i3 a
Note: 客户测试的 SDK 版本为 2.12.1,对应的 FlexSPI driver 版本为 2.3.6一、为什么擦写Flash时经常需要关全局中断?在具体分析客户问题之前,我们先来聊聊嵌入式应用里应对 NOR Flash 的擦写为何大部分情况下都是要关闭全局中断(这里假设执行代码空间与擦写操作空间在同一个 Flash 上,当然是在不同区域),这其实跟如下两个特性有关:
5 z1 A" B) e) }4 i1.1 RWW特性(Read-While-Write)RWW 特性的意思是在 Flash 执行擦写命令进入 Busy 状态期间(Flash 内部状态寄存器 WIP 位变状态 1)还能否继续响应非操作区域的读访问。如果 SR[WIP] = 1 时还能够支持读访问,则该 Flash 支持 RWW,反之则不支持 RWW。 |
|