在RealView MDK中使用J-Link对STM32F130ZET6外部Nor Flash烧写的方法by 314forever
文章中以STM32F103ZET6外接SST39VF6401B为例,在红牛实验板上操作成功。
图例中用到的地址需要根据你自己的情况作相应调整。
新建一个工作目录。
将x:\Keil\ARM\Flash\STM32F10x\下的所有文件拷进来,将x:\Keil\ARM\Flash\SST39x640x\下的FlashPrg.c文件拷进来并覆盖同名文件,将x:\Keil\ARM\Flash\下的FlashOS.h文件拷进来。
如果你使用的Nor Flash 不在MDK自带驱动的范围内,那么需要根据FlashPrg.c文件自行编写相关函数
打开工程STM32Fx,在FlashDev.c中添加如下代码,有关这段代码请参考x:\Keil\ARM\Flash\SST39x640x\FlashDev.c
修改FlashDev.c和FlashPrg.c中的头文件引用
在目标属性中修改宏定义和输出文件
编译此工程,将得到的STM32F10x_NOR.FLM文件拷入x:\Keil\ARM\Flash\文件夹中。
然后在MDK的Flash下载设置中就出现了NOR Flash的选项
这样我们就得到了MDK对Nor Flash的接口文件,接下来是如何在工程中将数据弄到Nor Flash上。
新建工程,将要烧入Nor Flash中的数据单独存放在一个文件中
然后自定义分散加载文件
在这里把数据定义到Nor Flash中,注意地址要根据你自己的情况来设置
在程序中要对数据进行使用,否则编译后未用到的数据可能会被优化掉
编译结果
添加Flash烧写算法,MDK会根据不同的地址采用不同的算法
设置初始化操作文件,文件中的Bank初始化要根据你的情况来调整
点击Load就可以把程序和数据分别烧入STM32和Nor Flash中,在烧写过程中可以看到最下方进度条中对不同地址烧写的情况(这个图始终截不到合适的)
以后程序中就可以使用Nor Flash中的数据了
如此操作后数据文件也就没什么用了,可以从工程中删除,同时还要修改分散加载文件(不改也没什问题,但是会有烦人的警告)
用这个方法只能对Nor Flash进行写,没法读。
我还尝试过在J-Flash中自定义初始化的方法来对Nor Flash进行操作,结果总是提示
不知道为什么。
不知道有没有大侠用这种方法成功过(44B0用类似的方法是可以的)。
另外,使用相同的办法理论上应该可以对NAND Flash烧写,不过我对NAND Flash的基本操作还没掌握,你要是有兴趣不妨尝试一下。