论坛元老
- 积分
- 3990
- 金钱
- 3990
- 注册时间
- 2015-11-14
- 在线时间
- 541 小时
|
本帖最后由 Electronic 于 2021-8-29 18:34 编辑
有些项目需要把一些数放置到外置的SPI Flash中,比如FATFS中的GBK转UNICODE表,占用170多K的控件,容量小的单片机压根放不下。存一些图片LOGO,或者经常修改的数据反复用专用的下载器烧录的SPI Flash,特别繁琐。笔者的LVGL字库就是通过此方法把字库存放到外置的Flash的。笔者就仿照ST提供的算法模板修改了一份烧录到外置Flash的算法。
使用的开发板是战舰F103开发板
我的路径如下:
参考路径
一、首先修改FlashDev.c文件
1. Device Name修改为 "STM32F10x Ex-SPI-Flash 8M"
2. 修改存储器类型为EXTSPI,表示外外部SPI FLASH.
3. 存储器的基地址, 这里可以任意地址,笔者修改为0x0A000000。
4. 修改存储器大小,0x00800000 8M
- struct FlashDevice const FlashDevice = {
- FLASH_DRV_VERS, // Driver Version, do not modify!
- "STM32F10x Ex-SPI-Flash 8M", // Device Name
- EXTSPI, // Device Type
- 0x0A000000, // Device Start Address
- 0x00800000, // Device Size in Bytes
- 4096, // Programming Page Size
- 0, // Reserved, must be 0
- 0xFF, // Initial Content of Erased Memory
- 500, // Program Page Timeout 500 mSec
- 50000, // Erase Sector Timeout 40000 mSec
- // Specify Size and Address of Sectors
- 0x1000, 0x000000, // Sector Size 4kB ()
- SECTOR_END
- };
复制代码 对应的截图
二,修改FlashPrg.c文件,修改比较多,只挑重点说明一下。
1. 宏定义, 因为烧录算法配置在了0x0A000000,对应到SPI-Flash的地址是0x0000开始,所以需要前去这个偏移地址就是SPI-Flash的物理地址
- #define base_adr 0x0A000000
复制代码 2. Init函数, 这里是初始化SPI-Flash函数,如果开了硬件看门狗,需要配置看门狗。
3.Uninit其实就是反初始化, 删除为空即可。
4.EraseChip函数,顾名思义,就是全片擦除。
5.EraseSector函数,这个函数一次性擦除sector。调用W25QXX_Erase_Sector时需要/4096。表示是要擦除哪个sector
6.BlankChekc函数,每次返回1,表示每次写入前都需要擦除。这是最简单的操作,复杂点,可以先查询是否全是0xFF,如果不是则执返回1
7.ProgramPage函数,顾名思义就是写入一个页, 调用相应的函数即可。
8.Verify函数,校验写入的数据是否正确,函数实现如下。
9.修改输出文件名,然后编译工程。在工程的根目录的前一级目录将会生成一个STM32F10x_SPI_Flash_8M.FLM的文件,然后复制STM32F10x_SPI_Flash_8M.FLM文件到Keil_v5\ARM\Flash目录下
其他函数的实现都是基于原子哥的例程移植过来的,参考例程即可。
到此为止,烧录算法以及实现,以下将测试这个烧录算法是否正确。
三、测试例程,复制SPI例程,修改如下数组,定义了一个64K的数组。
值得注意的是,这里把数组定位在0x0A000000, 对应到SPI-Flash的地址需要减去0x0A000000的偏移地址。
具体代码请看工程文件。- <blockquote><blockquote>//定义一个大数组, Downloade将烧录到外置的SPI Flash
复制代码 将烧录算法加载到算法中
需要把Size修改大一点,0x8000。因为算法是烧录到SRAM的,设置的太小了,算法装不下。
下载代码到开发板:
按KEY0,LCD显示SPI-Flash预烧录的数据。
按KEY1, SPI-Flash的数据被重新覆盖,再次按KEY0,显示的是覆盖的数据。
重新复位,也是被覆盖的数据,说明预烧录的数据是有效的。
五、附件包
烧录算法.rar
(88.61 KB, 下载次数: 41)
|
|