首页
|
新闻
|
新品
|
文库
|
方案
|
视频
|
下载
|
商城
|
开发板
|
数据中心
|
座谈新版
|
培训
|
工具
|
博客
|
论坛
|
百科
|
GEC
|
活动
|
主题月
|
电子展
注册
登录
论坛
博客
搜索
帮助
导航
默认风格
uchome
discuz6
GreenM
»
MCU 单片机技术
»
X86
» 使用 Trace32 对 FLASH 编程——实例
返回列表
回复
发帖
发新话题
发布投票
发布悬赏
发布辩论
发布活动
发布视频
发布商品
使用 Trace32 对 FLASH 编程——实例
发短消息
加为好友
look_w
当前离线
UID
1066743
帖子
8283
精华
0
积分
4142
阅读权限
90
在线时间
233 小时
注册时间
2017-6-23
最后登录
2019-5-18
论坛元老
UID
1066743
1
#
打印
字体大小:
t
T
look_w
发表于 2018-5-10 09:10
|
只看该作者
使用 Trace32 对 FLASH 编程——实例
实例(AM29F800)目标系统上有两块型号为 AM29F800 的 FLASH,每块 FLASH 的数据宽度为 16bit,两块合并成 32bit 宽度。每块 FLASH 有 1MB 的大小,它们的起始地址为 0x200000。
目标系统上还配置了 SRAM,大小为 8kB,地址范围是 0H 到 1FFFH。
为目标系统开发的 FLASH 编程软件为 FLASHprog.bin(大小为 450H 字节,二进制格式)。参数块被安排在 SRAM 的地址 0H 开始。
需要烧入目标系统 FLASH 的应用程序为 application.elf(ELF 格式,起始位置为0x200000)。这里需要说明的是,在联接产生 application.elf 时,必须通过联接脚本 - SCL 文件指定其起始位置为 0x200000。这样"Data.load.elf application.elf "命令就会将 application.elf 装载到从 0x200000 开始的地址空间。
对于这样的应用,需要编写一个控制脚本(CMM 文件),同时还要开发一个 FLASH的编程软件。下面首先介绍控制脚本的内容,然后给出了 FLASH 编程软件的流程。
控制脚本控制脚本的内容如下:
1) 进行必要的目标系统设置,特别是片选配置,使得 SRAM 和 FLASH 都落在安排的地址空间中
2) 将 FLASH 编程软件 FLASHprog.bin 装载到 SRAM 中地址 0x1200 处: Data.LOAD.B FLASHprog.bin 1200
3) 在 FLSAH 编程软件的结束位置设置断点(break.set swbp),这样在执行结束后,控制可以交回给 Trace32
4) 通知 Trace32 关于 FLASH 的配置,FLASH 编程软件的位置,参数块以及数据缓冲区的位置
1
2
FLASH.Create 200000--3fffff TARGET LONG
FLASH.TARGET 1200 0 1000
此时 SRAM 的内存安排为:
5) 擦除整个 FLASH
FLASH.Erase ALL
6) 编程应用程序 application.elf
FLASH.Program ALL
Data.LOAD.elf application.elf
FLASH.Program OFF
执行 FLASH.Erase ALL 命令时,调用 FLASH 编程软件的擦除功能,相应的参数块填充为:
此时,数据缓冲区没有内容。
擦除结束后,遇到设置的断点,控制权交回给 Trace32,参数表中为返回的状态:
执行 Data.LOAD.bin application.bin 时,调用 FLASH 编程软件的编程功能,相应的参数块填充为:
此时缓冲区中填充了需要编程的数据。
编程结束后,控制权交回给 Trace32,参数表中为返回的状态:
如果没有错误发生,以上的编程过程会一直下去,直到 application.bin 中的数据全部传输完毕。
FLASH 编程软件FLASH 编程软件的流程为:
1) 定义参数块的数据结构:
struct FlashParameter flash_param;
FlashParameter 的定义见上文。
2) 定义每个功能对应的功能号:
1
2
3
4
#define FLASH_PROGRAM 0x00000001
#define FLASH_ERASE 0x00000002
#define FLASH_CHIP_ERASE 0x00000005
…其它功能号
3) 主控制流程:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
switch ( flash_param.status )
{
case FLASH_PROGRAM:
flash_program();
break;
case FLASH_ERASE:
flash_erase();
break;
…其它功能
}
flash_program() 函数从参数块中获取编程的数据、大小以及编程的目标地址,
实现对 FLASH 的编程功能。
flash_erase() 函数从参数块中获取擦除的目标地址以及大小,
实现对 FLASH 的擦除功能。
4) SCL 文件
1
2
3
4
5
6
7
8
9
10
11
12
RAM 0x200000
{
CODE 0x200000
{
main.o (+RO)
* (+RO)
}
APP_RAM +0x0
{
* (+RW, +ZI)
}
}
收藏
分享
评分
回复
引用
订阅
TOP
返回列表
电商论坛
Pine A64
资料下载
方案分享
FAQ
行业应用
消费电子
便携式设备
医疗电子
汽车电子
工业控制
热门技术
智能可穿戴
3D打印
智能家居
综合设计
示波器技术
存储器
电子制造
计算机和外设
软件开发
分立器件
传感器技术
无源元件
资料共享
PCB综合技术
综合技术交流
EDA
MCU 单片机技术
ST MCU
Freescale MCU
NXP MCU
新唐 MCU
MIPS
X86
ARM
PowerPC
DSP技术
嵌入式技术
FPGA/CPLD可编程逻辑
模拟电路
数字电路
富士通半导体FRAM 铁电存储器“免费样片”使用心得
电源与功率管理
LED技术
测试测量
通信技术
3G
无线技术
微波在线
综合交流区
职场驿站
活动专区
在线座谈交流区
紧缺人才培训课程交流区
意见和建议