当前位置:文档之家› 使用 Trace32 对 FLASH 编程

使用 Trace32 对 FLASH 编程

使用 Trace32 对 FLASH 编程随着软硬件复杂性的增加,在嵌入式系统开发中,调试器对项目的开发进度、质量起着越来越重要的作用。

在众多的调试器中,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芯片,只要在脚本命令 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 <unit_number> <physical_range> <sector_size> <family_code><bus_width><family_code>: I28F001B | I28F200B | ... | TARGET | EEPROM | NOP<bus_width>: Byte | Word | Long | Quad例如,定义Am29LV640(16 bit mode, 16 bit bus, 128 sectors, 64Kbyte/sector)FLASH.RESetFLASH.Create 1. 0x0 -- 0x7FFFFF 0x10000 AM29LV100 Word对于采用"Target controlled flash programming" 方式,familiy_code 必须选择为TARGET。

与 FLASH 编程软件的连接由 FLASH.Target 完成。

2. FLASH.Erase格式:FLASH.Erase <unit> | <address_range> | ALL例如:FLASH.Erase 0x0 -- 0x1FFFFFLASH.Erase ALL3. FLASH.Program格式:FLASH.Program [<unit> | <address_range> | ALL | OFF]一旦激活了编程模式,任何对 FLASH 地址空间的写访问操作将会导致对 FLASH 的编程。

例如:FLASH.Program ALLData.LOAD.Binary data.bin /Word <- 装载数据到FLASH空间FLASH.Program OFF…4. FLASH.TARGET格式:FLASH.TARGET <code_address> <data_address> [<buffer_size>] [<file>] <code_address>运行在目标系统上的 FLASH 编程软件被下载到的 RAM 起始地址,占用的大小为FLASH 编程软件本身的大小,另外再加上 32 字节。

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

<buffer_size>从 Trace32 软件一次传递给 FLASH 编程软件的数据字节数。

建议的缓冲大小为 4KB。

<FLASH_algorithm>二进制形式的 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 - 0x3FFFFFRAM 起始地址:0xA0000000相应的 Trace32 脚本为:FLASH.RESetFLASH.Create 1. 0x0--0x3FFFFF 0x20000 TARGET WordFLASH.Target 0xA0000000 0xA0001000 0x1000 ~~\demo\arm\FLASH\word\i28f200j3.bin FLASH.Erase 1.FLASH.Program 1.Data.LOAD.Elf my_application.elf /WordFLASH.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指定的。

相关主题