首页 > 使用 Trace32 对 FLASH 编程

使用 Trace32 对 FLASH 编程

from:   http://www.ibm.com/developerworks/cn/linux/l-trace32/

随着软硬件复杂性的增加,在嵌入式系统开发中,调试器对项目的开发进度、质量起着越来越重要的作用。在众多的调试器中,Lauterbach 公司的 Trace32 凭借其强大的功能,出色的性能,成为目前嵌入式系统开发中,尤其是高端系统中普遍采用的调试工具。

Trace32 除了具有对代码设置断点、跟踪调试等常规的功能以外,还能够控制对目标系统的 FLASH 进行编程。本文首先对比了 Trace32 FLASH 编程的两种方式:"Emulator controlled flash programming" 和 "Target controlled flash programming",指出"Target controlled flash programming"方式的优点;然后介绍了与 FLASH 编程相关的 Trace32 脚本命令,以及 Trace32 脚本命令与 FLASH 编程软件之间的通信机制;最后,给出了 "Target controlled flash programming" 方式的控制流程。

注:本文中使用的"编程"一词,除了具有对 FLASH 烧写的含义外,还包括擦除、校验等其它对 FLASH 的操作。

一、FLASH 编程的两种方式

对目标系统中的 FLASH 有两种方式进行编程,分别是 "Emulator controlled flash programming" 和 "Target controlled flash programming"。

在 "Emulator controlled flash programming" 方式下,所有对 FLASH 编程的操作都是由 Emulator 完成的,不使用目标系统的资源。Trace32 软件支持市面上几乎所有的 FLASH芯片(可以访问 http://www.lauterbach.com/ylist.html 查询 Trace32 支持的 FLASH 型号),只要在脚本命令 FLASH.Create 中指明目标 FLASH 的型号,地址范围以及总线的配置,用户就可以使用脚本命令直接将数据烧写到 FLASH,不需要编写任何对 FLASH 操作的代码。

在 "Target controlled flash programming"方式下,对 FLASH 的编程控制是由运行在目标系统上的 FLASH 编程软件完成的,而这个软件必须由用户自行开发。此时,Trace32通过使用脚本对目标系统内存地址空间的访问,向 FLASH 编程软件传送控制参数和数据。

由于直接在目标系统的处理器上运行,采用 "Target controlled flash programming" 方式可以获得比 "Emulator controlled flash programming"方式快得多的编程速度。这对于烧写大的文件,以及生产线等场合来说十分重要。另外,只要编写相应的 FLASH 编程软件,用户选择的任何 FLASH 都能够被支持。

因此,对于 FLASH 编程的内容较少,或者对编程的时间要求不高的情况下,可以使用"Emulator controlled flash programming" 方式;但是,对于需要编程较大的文件,而且对速度要求较高的情况下,"Target controlled flash programming" 方式是唯一的选择。本文中只讨论 "Target controlled flash programming" 方式。

 







回页首



二、Trace32 脚本

在 Trace32 的界面中,可以使用菜单,鼠标完成操作,也可以完全使用命令操作。事实上,Trace32 内嵌了强大的命令和脚本处理功能。使用 Trace32 的命令不仅可以完成所有的功能,而且可以获得比菜单方式更大的操纵性和灵活性。脚本以 .CMM 为后缀。

下面就介绍 Trace32 中与 FLASH 操作相关的命令,见下表:

 

这里列出后面需要使用到命令的详细格式,以便参考。

1. FLASH.Create

格式:

FLASH.Create
   



: I28F001B | I28F200B | ... | TARGET | EEPROM | NOP

: Byte | Word | Long | Quad

 

例如,定义Am29LV640(16 bit mode, 16 bit bus, 128 sectors, 64Kbyte/sector)

FLASH.RESet

FLASH.Create 1. 0x0 -- 0x7FFFFF 0x10000 AM29LV100 Word

对于采用 "Target controlled flash programming" 方式,familiy_code 必须选择为TARGET。与 FLASH 编程软件的连接由 FLASH.Target 完成。

2. FLASH.Erase

格式:

FLASH.Erase
 |  | ALL


 

例如:

FLASH.Erase 0x0 -- 0x1FFFF

FLASH.Erase ALL

3. FLASH.Program

格式:

FLASH.Program
[ |  | ALL | OFF
]

 

一旦激活了编程模式,任何对 FLASH 地址空间的写访问操作将会导致对 FLASH 的编程。例如:

FLASH.Program ALL

Data.LOAD.Binary data.bin /Word <- 装载数据到FLASH空间

FLASH.Program OFF



 

4. FLASH.TARGET

格式:

FLASH.TARGET
  [] [] 

 

运行在目标系统上的 FLASH 编程软件被下载到的 RAM 起始地址,占用的大小为FLASH 编程软件本身的大小,另外再加上 32 字节。



  • 参数块的起始地址,大小为 32 字节(参数块)+ + 256 字节(stack)。


  • 从 Trace32 软件一次传递给 FLASH 编程软件的数据字节数。建议的缓冲大小为 4KB。


  • 二进制形式的 FLASH 编程软件。

使用上面这些命令进行 FLASH 编程的一般步骤是:

1) 首先使用 FLASH.Create 定义目标 FLASH 的地址空间,类型,及总线配置。

2) 对于"Target controlled flash programming"方式,必须向目标系统加载 FLASH 编程软件。FLASH.Target 命令把 FLASH 编程软件的起始地址,参数块的起始地址,以及缓冲区大小等信息通知 Trace32。FLASH.Program 和 FLASH.Erase 命令就会调用确定的 FLASH 编程软件,并传递合适的参数。

3) FLASH.Program 启动编程模式后,如果有数据传输命令执行(如 Data.Set 或者Data.LOAD),Trace32 会检查数据传输的地址是否落在 1)中定义的 FLASH 地址空间内。如果是,Trace32 会根据缓冲区的大小,把部分数据填充到数据缓冲区中,初始化参数块,设置目标系统的 PC 为 FLASH 编程软件的起始地址,并开始执行。执行结束后,控制权回到 Trace32。Trace32 检查返回的信息(也在参数块中),如果正常,继续处理剩余的数据。

下面通过一个例子来说明:

目标系统的配置了的 FLASH 为 Intel Strata FLASH 28F320J3A(16 bit mode, word access),CPU 为 ARM core。

目标系统的内存影像(memory map)为:

  • FLASH: 0x0 - 0x3FFFFF
  • RAM 起始地址:0xA0000000

相应的 Trace32 脚本为:

FLASH.RESet

FLASH.Create 1. 0x0--0x3FFFFF 0x20000 TARGET Word

FLASH.Target 0xA0000000 0xA0001000 0x1000 ~~/demo/arm/FLASH/word/i28f200j3.bin

FLASH.Erase 1.

FLASH.Program 1.

Data.LOAD.Elf my_application.elf /Word

FLASH.Program OFF

 

首先,通过 FLASH.Create 创建一个 FLASH 区域1,地址范围为 0x0 到 0x3FFFFF,Sector 的大小为 0x20000,对此 FLASH 区域的编程软件由 TARGET 指定。WORD 参数则指明目标系统 CPU 访问 FLASH 的数据宽度(还可以是 BYTE, LONG, QUAD)。

FLASH.Target 指定对 FLASH 区域编程软件的位置在 0xA0000000,参数块在0xA0001000。参数块后面一般紧跟着数据缓冲区,缓冲区的大小为 0x1000。编程软件是~~/demo/arm/FLASH/word/i28f200j3.bin。

接着擦除 FLASH 区域 1,然后启动 FLASH 编程模式。

Data.load.elf 命令将 my_application.elf 装载到 FLASH 区域,触发了 FLASH 编程软件,从而被写入到指定的 FLASH 区域中。

最后,关闭 FLASH 编程模式。

 







回页首



三、Trace32 命令与 FLASH 编程软件之间的通信机制

从上面的例子可知,在 Trace32 软件与 FLASH 操作程序之间有一个数据交换区-参数块,用来传递控制命令和数据,并返回操作结果。参数块的位置是由FLASH.Target命令中的data_address指定的。紧跟着参数块是缓冲区。

参数块的定义如下:

 

操作结束后,参数块存放操作的返回结果:

参数块以及紧跟的缓冲区的相应 C 语言定义如下:

struct { 

ulong32 flashaddr;

ulong32 flashwidth;

ulong32 width;

ulong32 offset;

ulong32 addr;

ulong32 size;

ulong32 reserved;

ulong32 status; /* in: 1=program, 2=erase, out: 0=o.k., 0x100=fail */

uchar8 data[4096]; /* Programming Buffer, size can be made smaller

(FLASH.TARGET command) */

} FlashParameter;









回页首



四、Target controlled flash programming 流程

开发基于"Target controlled flash programming" 方式的一般流程为:

1. 编写在目标系统上运行的 FLASH 编程软件

2. 将 FLASH 编程软件装载到目标系统的 RAM 中(使用 Data.LOAD 命令)

3. 通过命令 FLASH.Create 和 FLASH.Target 命令将 Trace32 连接到目标系统上的FLASH 编程软件

4. 使用命令 FLASH.Program,FLASH.Erase 等命令控制对目标系统上 FLASH 的操作,这些命令会调用 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 编程软件的位置,参数块以及数据缓冲区的位置

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) 定义每个功能对应的功能号:

#define FLASH_PROGRAM               0x00000001

#define FLASH_ERASE 0x00000002

#define FLASH_CHIP_ERASE 0x00000005

…其它功能号

 

3) 主控制流程:

  switch ( flash_param.status )

{

case FLASH_PROGRAM:

flash_program();

break;

case FLASH_ERASE:

flash_erase();

break;

…其它功能

}

flash_program() 函数从参数块中获取编程的数据、大小以及编程的目标地址,

实现对 FLASH 的编程功能。

flash_erase() 函数从参数块中获取擦除的目标地址以及大小,

实现对 FLASH 的擦除功能。

 

4) SCL 文件

RAM 0x200000

{

CODE 0x200000

{

main.o (+RO)

* (+RO)

}

APP_RAM +0x0

{

* (+RW, +ZI)

}

}

更多相关:

  • 分析凤凰网发现,跟广告相关的这个js频繁出现,它是生成图片和swf广告代码片段模板的脚本。 特分析如下: http://h0.ifengimg.com/ifeng/sources/yingguang-20140307.js 其源码如下 (function() {if (/.swf$/.test(ad.toLowerCase...

  • Flash 5开始就可以以 XML 或者“变量/值”配对输出格式向服务器传送 数据 。虽然这些数据能通过Flash编译器自动解析或者通过 开发 人员自行编写的 代码 手动解析, 但解析的速度慢。因为在解析过程中,XML需要按节点逐层处理数据。而且使用XML和“变量/值”配对格式处理的数据类型只能是字符型,数字也不例外。而Flash R...

  • FLASH中:0x08000000--0x08000000+SIZE保存的是用户代码 Rule: 16位为传输单位 读数据: u16 STMFLASH_ReadHalfWord(u32 faddr) 可以在通用地址空间直接寻址:data=*(vu16*)ADDR;[ADDR为32位数据,指向的数据为uv16型]写数据: 写之前1:解锁...

  • Flash Builder在Debug时出现的问题:Flash Builder 找不到所需的Adobe Flash Player调试器版本 解决方法: 1. 进入Flash Builder的安装目录 C:Program FilesAdobeAdobe Flash Builder 4.6playerwin11.1 2. 安...

  • 今天:对这一阶段的任务进行了分配,我就自己的任务内容搜集了一些资料,尝试了编程。明天:继续进行编程。遇到的问题:编程方面有些许的困难。 转载于:https://www.cnblogs.com/guantianhuan/p/10051436.html...

  • 它的主要特点有: • 使用了kuwo.cn(酷我音乐盒)的网络资源, 内容非常丰富. • 可以播放/下载mp3或者ape格式的歌曲, 也可以直接播放MV(有mp4和mkv两种格式), 并且播放时文件会自动缓存到本地, 不需要再次下载, MV也会缓存到硬盘的, 很方便. • 可以收听电台. • 可以显示歌词. • 酷我音乐盒拥有的其...

  •   经过几天的阅读,终于将这本书看完了,读完了整个故事,我进行了简单的总结,感觉不仅仅是在写代码与计算机或软件交流,更多的是做事行为。   首先是做事得有目标。无论做什么事情都要有目标和动力,这样做起事来无论是在质量还是时间上才会有跟假的效果,就像我们做软件一样,我们的目标是什么,要做一个什么样的软件,要有怎样的预期效果,需要多少时间...

  • 任何软件系统开发的共同本质: – 从现实空间的需求到计算机空间的软件代码之间的映射与转换; 软件工程本质: 用严格的规范和管理手段来缩小偏差,通过牺牲“时间”来提高“质量”。  软件工程的两个映射: 概念映射:问题空间的概念与解空间的模型化概念之间的映射 业务逻辑映射:问题空间的处理逻辑与解空间处理逻辑之间的映射 软件工程的作用: 为...

  •   类把属性和方法作了封装!   总结: 面向过程程序设计:数据结构 + 算法 主要解决科学计算问题,用户需求简单而固定 特点: 分析解决问题所需要的步骤 利用函数实现各个步骤 依次调用函数解决问题 问题: 软件可重用性差 软件可维护性差 构建的软件无法满足用户需求 面向对象程序设计:由现实世界建立软件模型 将现实世界中的事物直接...

  • 计算机科学和软件工程同属计算机类专业,他们的联系确实非常紧密,但还是有很多区别的。 计算机科学:   偏重于硬件与计算机理论方面的学习研究,像计算机原理,计算机系统结构等方面的内容。当然也会涉及软件方面,但不是太深。而软件工程则主要偏重于应用与实践,主要是培养适应国内外软件产业市场需求的高素质、多层次、实用型软件人才,这也是教育部专...