3206
- 收藏
- 点赞
- 分享
- 举报
在Realview MDK中添加自己的FLASH编程算法
在RealviewMDK中,Flash烧写算法不是通用的,都是针对具体的Flash存储芯片的。由于市面上的Flash种类比较多,所以Realview MDK不可能包含所有的Flash芯片烧写程序。但是在具体的应用中,开发者在Realview MDK中可能会找不到自己所需要的Flash烧写程序,这时,用户就必须自己添加Flash烧写程序。本文将详细的探讨这种方法。
Realview MDK已经定义好了添加到其中的Flash烧写算法的接口,包括1个描述Flash芯片的结构体和6个对Flash芯片操作的函数定义。详细的内容可以参考下面的代码。
structFlashDevice {
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, unsignedlongfnc);
extern int UnInit (unsigned long fnc);
extern int BlankCheck (unsigned long adr, unsigned long sz, unsignedcharpat);
extern int EraseChip (void);
extern int EraseSector (unsigned long adr);
extern int ProgramPage (unsigned long adr, unsigned long sz, unsigned char *buf);
externunsigned long Verify (unsigned long adr, unsignedlongsz, unsigned char
*buf);
在RealviewMDK中,添加Flash烧写算法的实质就是填充上面的那个结构体以及实现那6个函数。至于几个函数是如何被RealviewMDK调用的,用户不必关心,这些是由Realview MDK自动管理的,只要正确的实现了上面的那些内容,开发者就可以将Realview MDK编译链接后的程序下载到自己的Flash芯片中去。下面是添加一个Flash烧写的详细步骤:
1. 在C:\Keil\ARM\Flash下新建一个空的子文件夹;
2. 在 Flash 文件夹中选择一个已存在的,且和欲添加的 Flash 算法相近的内容(如
..\ARM\Flash\LPC_IAP_256) 拷贝到这个新文件中,并将此算法作为新算法的模板;
3. 重命名工程文件LPC_IAP_256.UV2以表示新的FlashROM设备名,如29F400.UV2并用μVisionIDE
将其打开;
4. 在对话框Project-OptionsforTarget-Output中将所有的输出文件名(如 LPC_IAP_256)替换为新的
设备名;
5. 编辑FlashPrg.C文件并为EraseChip,EraseBlock及ProgramBlock定义函数代码。在函数Init和UnInit
中编写算法所需的初始化以及卸载代码;
6. 在文件FlashDev.C中的structFlashDevice结构体中定义设备参数;
7. 重新编译工程,将在C:\Keil\ARM\Flash文件夹下生成*.FLX 格式的Flash编程算法。此文件即为
所添加的Flash编程算法;
8. 使用ConfigureFlashDownload 中的Add按钮可将此编程算法文件添加到目标应用工程中。
Realview MDK已经定义好了添加到其中的Flash烧写算法的接口,包括1个描述Flash芯片的结构体和6个对Flash芯片操作的函数定义。详细的内容可以参考下面的代码。
structFlashDevice {
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, unsignedlongfnc);
extern int UnInit (unsigned long fnc);
extern int BlankCheck (unsigned long adr, unsigned long sz, unsignedcharpat);
extern int EraseChip (void);
extern int EraseSector (unsigned long adr);
extern int ProgramPage (unsigned long adr, unsigned long sz, unsigned char *buf);
externunsigned long Verify (unsigned long adr, unsignedlongsz, unsigned char
*buf);
在RealviewMDK中,添加Flash烧写算法的实质就是填充上面的那个结构体以及实现那6个函数。至于几个函数是如何被RealviewMDK调用的,用户不必关心,这些是由Realview MDK自动管理的,只要正确的实现了上面的那些内容,开发者就可以将Realview MDK编译链接后的程序下载到自己的Flash芯片中去。下面是添加一个Flash烧写的详细步骤:
1. 在C:\Keil\ARM\Flash下新建一个空的子文件夹;
2. 在 Flash 文件夹中选择一个已存在的,且和欲添加的 Flash 算法相近的内容(如
..\ARM\Flash\LPC_IAP_256) 拷贝到这个新文件中,并将此算法作为新算法的模板;
3. 重命名工程文件LPC_IAP_256.UV2以表示新的FlashROM设备名,如29F400.UV2并用μVisionIDE
将其打开;
4. 在对话框Project-OptionsforTarget-Output中将所有的输出文件名(如 LPC_IAP_256)替换为新的
设备名;
5. 编辑FlashPrg.C文件并为EraseChip,EraseBlock及ProgramBlock定义函数代码。在函数Init和UnInit
中编写算法所需的初始化以及卸载代码;
6. 在文件FlashDev.C中的structFlashDevice结构体中定义设备参数;
7. 重新编译工程,将在C:\Keil\ARM\Flash文件夹下生成*.FLX 格式的Flash编程算法。此文件即为
所添加的Flash编程算法;
8. 使用ConfigureFlashDownload 中的Add按钮可将此编程算法文件添加到目标应用工程中。
我来回答
回答0个
时间排序
认可量排序
暂无数据
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币
Markdown 语法
- 加粗**内容**
- 斜体*内容*
- 删除线~~内容~~
- 引用> 引用内容
- 代码`代码`
- 代码块```编程语言↵代码```
- 链接[链接标题](url)
- 无序列表- 内容
- 有序列表1. 内容
- 缩进内容
- 图片![alt](url)
相关问答
-
2012-12-04 11:54:57
-
2012-12-24 14:35:26
-
2012-12-24 14:36:04
-
2013-12-02 22:15:20
-
2012-12-24 14:38:14
-
2019-01-11 10:28:02
-
2019-01-16 13:49:15
-
2019-12-25 11:48:53
-
2016-05-17 10:05:26
-
2016-08-26 10:43:16
-
2016-09-05 16:41:08
-
2016-05-20 16:38:42
-
2019-10-22 11:40:25
-
2018-03-22 09:28:23
-
2018-12-19 15:18:02
-
2019-01-31 09:21:35
-
2019-01-07 11:12:53
-
2019-01-29 11:13:12
-
2013-11-19 13:09:52
-
2018-01-31 16:13:23
更多相似问答
点击登录
-- 积分
-- E币
提问
—
收益
—
被采纳
—
我要提问
切换马甲
上一页
下一页
悬赏问答
-
20帮忙交叉编译个源码
-
5Hi3516CV610 如何使用SD卡升级固件
-
5cat /dev/logmpp 报错 <3>[ vi] [func]:vi_send_frame_node [line]:99 [info]:vi pic queue is full!
-
50如何获取vpss chn的图像修改后发送至vo
-
5FPGA通过Bt1120传YUV422数据过来,vi接收不到数据——3516dv500
-
50SS928 运行PQtools 拼接 推到设备里有一半画面会异常
-
53536AV100的sample_vdec输出到CVBS显示
-
10海思板子mpp怎么在vi阶段改变视频数据尺寸
-
10HI3559AV100 多摄像头同步模式
-
9海思ss928单路摄像头vio中加入opencv处理并显示
举报反馈
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明
提醒
你的问题还没有最佳答案,是否结题,结题后将扣除20%的悬赏金
取消
确认
提醒
你的问题还没有最佳答案,是否结题,结题后将根据回答情况扣除相应悬赏金(1回答=1E币)
取消
确认