最近由于Flash芯片升级,从16MB换成32MB的,但是厂商只有16MB的FLM下载算法文件
所以要自己做一个32MB的FLM,需要研究下FLM到底是个啥。
FLM文件具体位置:C:\Keil_v5\ARM\Flash\xxx.FLM
具体路径根据你自己的实际安装路径来,
其中XXX.FLM是就是MCU厂商给的Flash下载算法文件。
*.FLM
的本质其实就是*.axf
,它也是一段可执行代码。
在keil中,编译完成之后有一个 .axf
文件,这个文件也是elf
格式;
FLM格式文件是KEIL里的FLASH下载算法文件,他其实就是.axf文件的拷贝,换了个后缀名称而已。
ELF格式:详细的可以看这个文档 http://flint.cs.yale.edu/cs422/doc/ELF_Format.pdf
它是ARM工具链的一部分,
/***********************************************************************/ /* This file is part of the ARM Toolchain package */ /* Copyright (c) 2010 Keil - An ARM Company. All rights reserved. */ /***********************************************************************/
- 它包括了Flash(无论是MCU内部的Flash还是外部的Flash)的一些基础操作和描述结构
例如:读、写、保护、擦除之类的,这些指令都可以在一般的Flash datasheet里面看到
它有一套标准的操作结构,以方便对接keil的API
// 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);
- 剩下的就是一些Flash的底层驱动实现。
- 对于一些MCU厂商可能会加入一些加密动作。