硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2895|回复: 1
收起左侧

[技术文档] MDK中添加自己的FLASH编程算法的大概方法和原理

[复制链接]

27

主题

95

回帖

181

积分

初级会员

积分
181
发表于 2020-3-13 08:57:15 | 显示全部楼层 |阅读模式


看到论坛里有人发的H750下载算法,但没有对实现的原理和大概方法做过描述,难免会有点知其然不知其所以然的感觉,找到一篇文章,转载过来,希望有用。


在Realview MDK中,Flash烧写算法不是通用的,都是针对具体的Flash存储芯片的。由于市面上的Flash种类比较多,所以Realview MDK不可能包含所有的Flash芯片烧写程序。但是在具体的应用中,开发者在Realview MDK中可能会找不到自己所需要的Flash烧写程序,这时,用户就必须自己添加Flash烧写程序。本文将详细的探讨这种方法。

Realview MDK已经定义好了添加到其中的Flash烧写算法的接口,包括1个描述Flash芯片的结构体和6个对Flash芯片操作的函数定义。详细的内容可以参考下面的代码。

struct FlashDevice  {
   unsigned short     Vers;                // 体系结构及版本号;
   char       DevName[128];                // 设备的名称及描述;
   unsigned short  DevType;        // 设备的类型,例如: ONCHIP, EXT8BIT, EXT16BIT等等;
   unsigned long    DevAdr;                // 默认设备的起始地址;
   unsigned long     szDev;                // 设备的总容量;
   unsigned long    szPage;                // 页面的大小;
   unsigned long       Res;                // 保留,以便将来扩展之用;
   unsigned char  valEmpty;        // Flash擦除后储存单元的值;
   unsigned long    toProg;                // 页写函数超时的时间;
   unsigned long   toErase;                // 扇区擦除函数超时的时间;
   struct FlashSectors sectors[SECTOR_NUM];        //扇区的起始地址及容量设置数组。
};

extern  int  Init (unsigned long adr, unsigned long clk, unsigned long fnc);
extern  int  UnInit (unsigned long fnc);  
extern  int  BlankCheck (unsigned long adr, unsigned long sz, unsigned char pat);
extern  int  EraseChip (void);               
extern  int  EraseSector (unsigned long adr);  
extern  int  ProgramPage (unsigned long adr, unsigned long sz, unsigned char *buf);
extern unsigned long Verify (unsigned long adr, unsigned long sz, unsigned char *buf);

在Realview MDK中,添加Flash烧写算法的实质就是填充上面的那个结构体以及实现那6个函数。至于几个函数是如何被Realview MDK调用的,用户不必关心,这些是由Realview MDK自动管理的,只要正确的实现了上面的那些内容,开发者就可以将Realview MDK编译链接后的程序下载到自己的Flash芯片中去。下面是添加一个Flash烧写的详细步骤:
1.        在C:\Keil\ARM\Flash下新建一个空的子文件夹;
2.        在Flash文件夹中选择一个已存在的,且和欲添加的Flash算法相近的内容(如 ..\ARM\Flash\LPC_IAP_256) 拷贝到这个新文件中,并将此算法作为新算法的模板;
3.        重命名工程文件LPC_IAP_256.UV2以表示新的Flash ROM设备名,如29F400.UV2并用μVision IDE将其打开;
4.        在对话框Project - Options for Target - Output 中将所有的输出文件名(如 LPC_IAP_256)替换为新的设备名;
5.        编辑FlashPrg.C文件并为EraseChip, EraseBlock及ProgramBlock定义函数代码。在函数Init和UnInit中编写算法所需的初始化以及卸载代码;
6.        在文件FlashDev.C中的struct FlashDevice结构体中定义设备参数;
7.        重新编译工程,将在C:\Keil\ARM\Flash文件夹下生成*.FLX 格式的Flash编程算法。此文件即为所添加的Flash编程算法;
8.        使用Configure Flash Download 中的Add按钮可将此编程算法文件添加到目标应用工程中。





回复

使用道具 举报

5

主题

201

回帖

216

积分

高级会员

积分
216
发表于 2020-3-13 15:00:00 | 显示全部楼层
很好的介绍资料。之前只是有些模糊的想象。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-28 15:17 , Processed in 0.253266 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表