最近由于Flash芯片升级,从16MB换成32MB的,但是厂商只有16MB的FLM下载算法文件 所以要自己做一个32MB的FLM,需要研究下FLM到底是个啥。

FLM文件具体位置:C:\Keil_v5\ARM\Flash\xxx.FLM

具体路径根据你自己的实际安装路径来, 其中XXX.FLM是就是MCU厂商给的Flash下载算法文件。

  1. *.FLM的本质其实就是*.axf,它也是一段可执行代码。

在keil中,编译完成之后有一个 .axf 文件,这个文件也是elf格式;

FLM格式文件是KEIL里的FLASH下载算法文件,他其实就是.axf文件的拷贝,换了个后缀名称而已。

ELF格式:详细的可以看这个文档 http://flint.cs.yale.edu/cs422/doc/ELF_Format.pdf

  1. 它是ARM工具链的一部分,
1
2
3
4
/***********************************************************************/
/*  This file is part of the ARM Toolchain package                     */
/*  Copyright (c) 2010 Keil - An ARM Company. All rights reserved.     */
/***********************************************************************/
  1. 它包括了Flash(无论是MCU内部的Flash还是外部的Flash)的一些基础操作和描述结构

例如:读、写、保护、擦除之类的,这些指令都可以在一般的Flash datasheet里面看到

  1. 它有一套标准的操作结构,以方便对接keil的API
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
// Flash Programming Functions (Called by FlashOS)
extern          int  Init        (unsigned long adr,   // Initialize Flash
                                  unsigned long clk,
                                  unsigned long fnc);
extern          int  UnInit      (unsigned long fnc);  // De-initialize Flash
extern          int  BlankCheck  (unsigned long adr,   // Blank Check
                                  unsigned long sz,
                                  unsigned char pat);
extern          int  EraseChip   (void);               // Erase complete Device
extern          int  EraseSector (unsigned long adr);  // Erase Sector Function
extern          int  ProgramPage (unsigned long adr,   // Program Page Function
                                  unsigned long sz,
                                  unsigned char *buf);
extern unsigned long Verify      (unsigned long adr,   // Verify Function
                                  unsigned long sz,
                                  unsigned char *buf);
  1. 剩下的就是一些Flash的底层驱动实现。

  2. 对于一些MCU厂商可能会加入一些加密动作。