首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

使用 Trace32 对 FLASH 编程(1)

使用 Trace32 对 FLASH 编程(1)

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芯片(可以访问  查询 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
格式:
1
2
3
4
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)
1
2
FLASH.RESet
FLASH.Create 1. 0x0 -- 0x7FFFFF 0x10000 AM29LV100 Word




对于采用 "Target controlled flash programming" 方式,familiy_code 必须选择为TARGET。与 FLASH 编程软件的连接由 FLASH.Target 完成。
2.        FLASH.Erase
格式:
1
FLASH.Erase <unit> | <address_range> | ALL




例如:
1
2
FLASH.Erase 0x0 -- 0x1FFFF
FLASH.Erase ALL




3.        FLASH.Program
格式:
1
FLASH.Program [<unit> | <address_range> | ALL | OFF]




一旦激活了编程模式,任何对 FLASH 地址空间的写访问操作将会导致对 FLASH 的编程。例如:
1
2
3
4
FLASH.Program ALL
Data.LOAD.Binary data.bin /Word  <-  装载数据到FLASH空间
FLASH.Program OFF





4.        FLASH.TARGET
格式:
1
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 - 0x3FFFFF
  • RAM 起始地址:0xA0000000
相应的 Trace32 脚本为:
1
2
3
4
5
6
7
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 语言定义如下:
1
2
3
4
5
6
7
8
9
10
11
12
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 编程软件中相应的功能,并传递合适的参数



思海网络经过近18年的IDC运营,已经积累了丰富的IDC运营经验,推出佛山双线、电信、联通、多个机房供你选择、大带宽独享区域、所有独享线路均由机房核心骨干直连接入服务器。根据不同用户对带宽的需求,我司可提供10M独享~40000M独享带宽租用。多方位的资源,能满足您网络游戏、网页游戏、CDN加速布点、视频资源中心、下载站资源中心、音乐在线播放、电影、P2P、数据库服务器等不同的应用需求。在防护上,有高防、普防等;价格方面:思海网络实行低价优质策略,真正做到物超所值,部分资源可与联通或电信等直接签定合同。
佛山思海大带宽常年优惠促销,低价疯抢,详情请联系QQ:983054746,00001.cn
我们的淘宝网店:http://fssihai.taobao.com 欢迎选购
广东佛山电信千兆独享服务器租用低至16999/月!数量有限,赶快抢购 !-思海网络
返回列表