查看: 3506|回复: 0
打印 上一主题 下一主题

原创分享-MCU直接在外接1-4线制SPI Flash上执行代码

[复制链接]
跳转到指定楼层
沙发
发表于 2015-6-14 17:27:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
很久没来逛了,今天莫大帮助下找回了密码,贡献一点小菜

可能大家已经发现了,最近SPI接口的Flash芯片价格很便宜,容量也大。最新的更是2线乃至4线的SPI接口也慢慢流行开来。
现在,4线的SPI Flash一般可以做到120MHz的时钟,算下来读取速度可以到60MB/s,和一个硬盘差不多了;32Mbit (4MB)的容量也只是中等配置。

这些1/2/4线SPI Flash器件在存储程序和只读数据上都有很大的优势,在价格和尺寸上的更加比并行Flash明显。尤其是4线SPI(简称QSPI)的器件,设计用于直接在上面run代码,也就是所谓的就地执行(eXecute In Place)。注意了,XIP和之前从SPI拷贝代码到RAM再执行有本质的区别,它是把SPI闪存直接映射到memory map,就像并行Flash或片上Flash一样。

这种器件在电脑主板上已经有很多应用。但在MCU中的应用还是最近。NXP是最早在Cortex-M系列的MCU中支持这种用法的,在LPC18x0/43x0和LPC40xx系列的MCU中内置名为"SPIFI(SPI Flash Interface)"的外设来实现。

有意思的是,NXP的LPC18x0和LPC43x0系列没有内部Flash,主推SPI Flash XIP的方法。相比一个内置4MB的MCU而言,无Flash LPC18x0 + 4MB SPI Flash的组合要便宜得多。

这里就借莫大的神坛开个帖给兄弟姐妹们分享一下使用的笔记。

在这里,我会从介绍SPIFI及其外接闪存的基础开始,叙述了在其上进行在应用中编程(IAP),从而实现自我更新的方法。
其中涉及了因初始化和擦除、编程导致SPIFI外设不可读取数据的问题,对于此期间需要执行的代码,介绍了其构成成分,散布性,以及如何不遗漏地找出它们并转移到RAM中。
对于在SPIFI中调试时初始化SPIFI外设的方法本文也有涉及。
最后,以SPIFI IAP为基础,介绍了利用LPC MCU的唯一身份识别码(UID)对代码映像做一些标记的方法,使每个MCU个体的程序映像都不同,从而无法通过复制映像的办法来剽窃。
包括保护的思路,以及不使用IAP时标记的方法。作为内容的补充,本文还介绍了在SPIFI外接闪存上调试的注意事项,以及批量生产时的编程方法

以下使用笔记,中文版的,

这个笔记篇辐较长,既包括了深入的技术细节,也以配套的示例程序介绍了快速上手的实践指南,还包括一些SPIFI使用的基础。为帮助不同需求的读者高效使用本文,有如下建议:
?        必读章节
个别小节有“(必读)”标记,它们非常重要,建议阅读。
?        选读章节
如果只是为使用本文配套的示例程序,或以此程序为起点继续开发,大部分技术细节是并不需要掌握的,这些章节均注明“(选读)”标记。对于希望通过阅读此文迅速上手SPIFI使用的读者,可以跳过选读章节。
?        无特殊说明的章节
首次阅读本文或距离上次阅读后遗忘较多时建议阅读,或读者依据自己的需要决定是否阅读。

下面是配套的示例程序。这个程序用的库比较旧,只用来演示,如果用NXP的产品开发还请下载官方的LPCOpen库啊

注意:运行这个程序要使用KEIL 4.x/5.x,还要先把压缩包里的"SPIFI_18N43.FLM"拷贝到"<KEIL安装目录>\ARM\Flash\"下,见压缩包里的说明文档
转载

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入因仑

本版积分规则

快速回复 返回顶部 返回列表