缘起:之前阅读这位大佬的写的《如何提取与执行位置无关的Flash Driver》。总感觉模模糊糊,不得要领。今天又使劲读了几遍,加上在开发板验证,终于算是有所心得。
本文不做原理上面的讲解,上面大佬的文章已经足够详细,只介绍验证流程
首先在下面的链接获取flash driver bin的工程文件
https://forum.ytmicro.com/topic/164/ytm32mc03-%E6%9C%89%E6%B2%A1%E6%9C%89ram-flashdriver%E7%9A%84%E6%A1%88%E4%BE%8B-%E5%81%9Aboot%E7%94%A8%E7%9A%84?_=1746697545202
下载后解压,目录是这样的结构:
bin_project是vs code的工程文件,下面两个是HA系列和MC系列的。由于我是用的YTM32ME系列,所以需要手动编译
如果编译失败可以尝试下面这个选项:
编译后可以在bin_project\build\YTM32B1ME0看到FlashDriver.hex文件
先使⽤JFlash打开包含Flash driver编译结果的Hex⽂件;然后菜单选择File -> “Save data file as..;选择保存类型为:ANSI“C”file(*.c)
这样你就会得到Flash driver的bin文件
将存放Flash Driver的FLS_DRV_TEXT地址的内容Copy到⼀个code_ram数组中,直接使⽤该数组,需要注意要这段数据放在code_ram中
至于如何把这些bin文件转换成我们想要的flash操作函数(Flash Driver函数调⽤地址=基地址+offset。使⽤时需要先计算出函数的调⽤地址,然后再进⾏常 规的函数调⽤),不用担心,这部分代码demo中已经已经写好了,将bin_project/fls_drv_bin.h到 Flash Demo的APP目录下即可
Flash Driver Bin的API和SDK中Flash API几乎一样,只是去掉了instance参数
验证flash demo
成功通过flash demo的测试,测试结果与预期相符!这样我们就成功做到了Flash Driver放在在RAM中运行。