• 休闲生活
  • 教育教学
  • 经济贸易
  • 政法军事
  • 人文社科
  • 农林牧渔
  • 信息科技
  • 建筑房产
  • 环境安全
  • 当前位置: 达达文档网 > 达达文库 > 经济贸易 > 正文

    基于DM642自启动的FLASH烧写原理研究及实现

    时间:2020-09-19 07:55:23 来源:达达文档网 本文已影响 达达文档网手机站

    摘 要:便携性与实时性的要求使得嵌入式系统需要具备自启动功能,在DM642的平台上,阐述FLASH的工作原理以及其与DM642的硬件结构,研究DM642从外围FLASH自启动及多级引导程序开发原理,并结合自己的实际经验,针对使用CPLD和FPGA的不同系统,详细介绍其FLASH在线编程的步骤,实现大型应用程序的自启动加载DSP系统。

    关键词:FLASH;DM642;自启动;引导加载

    中图分类号:TP333.12文献标识码:B

    文章编号:1004373X(2008)2200804

    Implementation and Principle Study of FLASH Burning Based

    on DM642 Self-startup System

    LIU Fazhi,ZHANG Dong,YANG Yan,ZHU Xiaoding

    (School of Physics Science and Technology,Wuhan University,Wuhan,430072,China)

    Abstract:Requirement of portability and real-time ability,the embedded system needs a self-starting function.Based on DM642 platform,the principle of FLASH memory and the hardware structure are introduced,DM642 self-startup procedure from the FLASH memory is studied.According to the writer′s own actual experience,it is an innovation that the development process and implementation method of multi-level bootloader for the system are proposed in detail used either CPLD or FPGA.A DSP self-startup system with a large-scale applications is realized.

    Keywords:FLASH;DM642;self-startup;boot load

    TMS320DM642(DM642)是TI公司发布的专门面向多媒体应用处理器,其工作频率可达600 MHz,集成了视频端口、音频应用、以太网MAC等外设,可自启动的特点使得其在便携式和自动化系统中得到广泛应用。本文在DM642平台上,介绍FLASH烧写原理并给出一套DM642的自启动加载方案以及实际应用的一些经验。

    1 FLASH工作原理

    FLASH是一种可以在线进行电擦写,并在掉电后信息不丢失的非易失性存储器,具有在线电擦写、低功耗、大容量、擦写速度快等特点,适用于需要实时写入数据并且掉电保持的系统。

    FLASH按其内部结构的不同可以分为NOR FLASH,NAND FLASH,OR FLASH及AND FLASH等,常用的是NOR FLASH和NAND FLASH,前者就是常说的闪存,而后者就是U盘和一些移动存储设备的存储介质。NOR FLASH使用字写于的方式,而NAND FLASH只支持为页的操作,同时NAND FLASH的数据线与地址线是复用的,虽然两者的结构不同,但操作相似。本文采用的是AMD公司的NOR FLASH 芯片Am29LV033C,其容量是32 Mb(4 Mb×8),最快读取速度70 ns,64个64 b的扇区,0.32 μm工艺技术,数据可保持20年不丢失。对于FLASH,读操作比较简单,只要从指定的地址读出对应的数据即可,而写操作和擦除操作必须通过往指定地址写指定命令的方法来实现,且每次写操作时首先要擦除要写入区内容。其操作命令控制如表1所示:

    2 DM642与FLASH的硬件连接

    DM642有1个64位的EMIF接口,引脚上包括数据总线ED[63:0],地址总线EA[22:3],时钟信号线,其可使能4个不同的空间(CEn,n=1-4),因此可将CE1空间配置成8位异步模式,作为FLASH的映射空间。然而EMIF口只有20根地址线,寻址空间只有1 Mb(220),小于FLASH的4 Mb(222)的地址空间,必须采用分页的方式来访问,这里利用CPLD(或者FPGA)来控制FLASH的高3位地址线进行分页,每页512 kb,分为8页,一旦写入FLASH的程序大于512 kb,通过控制页寄存器进行分页。硬件连接图如图1所示:

    3 DM642自启动原理

    DM642启动方式是通过上电时采样引脚AEA[22,21]的电平来设置的。可以选择NO BOOT(AEA[20,19]均为低电平)和从外部存储器自启动(AEA[20,19]均为高电平)以及HPI/PCI启动。如果选择从外部存储器FLASH启动,则在系统结束复位状态后,DM642将FLASH空间(CE1空间,起始地址90000000H)的前1 kB复制到片内0地址开始的存储单元中,并从0地址开始执行。用户的应用程序往往大于1 kB,所以位于0地址的1 kB程序经常是一个装载程序(又叫二级BootLoader),它用来完成将应用程序从FLASH中读出放到RAM存储器中,当装载完成后,指向程序的入口地址c_int00()处并开始执行应用程序,这个过程也被叫作二次加载。

    二级BootLoader主要完成3个功能:

    (1)初始化EMIF口,配置其寄存器;

    (2)然后从FLASH的前半页的1 kB以后开始把程序的各个段和数据拷贝到指定的存储器物理地址中;

    (3) 跳到C程序的人口点处c_int00()。由于Bootloader在FLASH中的位置是0x90000000~0x90000400,而Bootloader又是放在用户程序中的。因此,为了在用户成程序的.cmd文件中把Bootloader定位在程序段的起始位置。

    图2显示了使用使用二级Bootloader的应用程序加载过程。

    4 自启动加载实现过程

    利用DM642的在线编程能力,实现DM642的自启动加载实现过程,大致分为一下几个步骤:

    4.1 应用程序建立

    TI代码产生工具产生的目标文件是一种模块化的文件格式COFF格式。程序中的代码和数据在COFF文件中是以段的形式组织。COFF文件是由文件头、段头、符号表以及段数据等数据结构组成;编译器会将我们的应用程序转换为COFF格式.out文件,编译器是怎样知道应用的程序段放在哪个存储空间,这个工作是通过一个连接命令文件(.cmd)完成。这个文件里面就包含DSP和目标板的存储器空间的定义以及代码段、数据段是如何分配到这些存储器空间的。

    编写连接命令文件可以利用DSP/BIOS提供的MEM(Memory Section Manager)模块。其非常方便用户管理和安排各数据程序段,而且其模板已经定义了一系列的常用存储段(用户可以通过窗口对话框修改段属性),如果用户要添加新的段,则需要修改用户的连接命令文件。具体操作如下:创建BOOT 内存区,在System→MEM-Memory Section Manager,创建BOOT 段,起始地址为0,长度为0x400(1 kB),而且需要把内存段后移,从0x400开始,并把长度减去0x400。否则段重叠将导致之前写入的数据被覆盖。

    创建连接命令文件,取代原有的BIOS自动产生的cmd 文件(videocfg.cmd)。在新建的cmd 文件中,包含原有的cmd 文件,并把添加.boot_load 段代码映像到BOOT 内存区。内容如下:

    -l videocfg.cmd

    SECTIONS

    {.BOOT>ISRAM}

    这样就成功创建了BOOT段并把其映射在ISRAM的前1 kb之中。也就是说在DM642自启动上电以后,DM642会自动将FLASH中0x9000000~0x90000400复制到ISRAM的0x0~0x400段。

    4.2 编写二级加载程序

    二级加载程序写在一个汇编程序BOOT.asm(也就是BOOT段所存放的数据),并需添加到应用程序之中。对于boot.asm中内容中关于初始化化EMIF口以及调转程序入口部分以省略,这里只给出关于拷贝应用程序代码,如下:

    COPY_TABLE .equ0x90000400

    .sect ".boot_load"

    .global _boot

    _boot:

    mvkl COPY_TABLE,a3;拷贝表指针

    mvkh COPY_TABLE,a3

    ldw*a3++,b1;入口地址

    copy_section_top:

    ldw*a3++,b0;地址增1

    ldw*a3++,a4;ram 起始地址

    nop3

    [!b0] b copy_done;是否拷贝完

    nop5

    copy_loop:

    ldb*a3++,b5

    subb0,1,b0;减数计数r

    [ b0] b copy_loop;跳转

    [!b0] b copy_section_top

    zero a1

    [!b0] and3,a3,a1

    stbb5,*a4++

    [!b0] and-4,a3,a5

    [ a1] add4,a5,a3

    4.3 转换成二进制文件

    编译器生成的COFF格式.out文件不能直接烧写,现行的在系统编程的方法一般都是先把待加载程序(用户程序)的.out文件(COFF格式)转成HEX格式,然后去掉HEX格式文件的文件头,再通过烧写程序写到FLASH里去。这里利用TI提供的hex6x二进制文件转换工具,其可将out文件转换为ASCII二进制文件。不过需要用户正确设置hex6x的命令行文件,编写完下列文件后双击out2hex.bat即可生成所要转换的文件.hex

    hex6x的命令行文件,用来设置转换的一些参数,内容如下:

    user′s_programe.out

    -a // Select ASCII hex file format for output

    -memwidth 8// Generate output for an 8-bit wide FLASH device

    -boot//为所有的段创建一个boot表

    -map h263loopback.map //Generate .map file

    ROMS

    {FLASH: org = 0x90000000,len = 0x80000,rowidth = 8,files ={ user′s_programe.hex}

    }

    //ROM下大括号中定义的文件长度,0x80000为每页512 kB

    需注意的是在各文件中文件名必须一致,否则将提示找不到该文件。

    4.4 FLASH烧写过程

    正如上文所述,FLASH写操作和读擦除操作必须通过往指定地址写指定命令的方法来实现,用户可以自己编写程序来完成,也使用TI提供的FLASHburn工具来烧写,通过执行FBTC.out的内容来完成FLASH的读写和擦除。因为FLASH写入时只有数据为0时才进行写入,数据为1时则什么也不做,所以每次烧写之前都需要将FLASH擦除干净。

    对于使用CPLD与FPGA烧写程序略微有些不同,其原因在于FPGA是掉电数据就丢失了,因此每次都需要烧写FPGA的配置osd_fpa_rev4_ahex.hex(放在第0页的后半页),而且在应用程序中还需添加EVMDM642_fpgaLoad(0x90040000)语句,自启动过程中完成往FPGA写配置的过程,这样FPGA才能够工作。而CPLD掉电数据仍在,故不需要这样做。

    小程序烧写(所谓小程序是指在第0页就能存放下的程序,对于使用FPGA的系统因其第0页后半页已被使用,故其只能放下256 kb的小程序,而对于CPLD,存放小程序为1页大小512 kb)与大程序烧写也略微有些区别,小程序不用分页,直接利用FLASHburn工具来烧写,需注意的是在FLASHburn工具在Downloading 栏中,File to burn 项填入要烧写的用户程序的.hex 文件,logical Addr 填入0x0。FLASH Physical项填入0x90000000,Bytes 项填入0x400000。大程序则需要利用CPLD/FPGA分页,具体实现方法是利用1个变量不断的计数,每拷贝1个数据(8 b)计数值加1,并将计数值与0xffff(64 k×8 b=512 kb),一但大于则通知分页寄存器加1,开始往下一页来拷贝程序。这里在CPLD/FPGA中设置地址为0x9008001A的寄存器,对应与FLASH的高3位地址线,往这一页写入的值(0~7)就代表了第几页,需要修改FBTC642.pjt的FLASH的基地址为0x9008001A。

    下面介绍如何实现将应用程序能放在FLASH的任意页,而不用从第0页开始,特别是使用FPGA的大程序烧写,就必须这样做,因为如果从第0烧写大程序将覆盖FPGA的配置程序。在FLASH的前1 kB中存放原来的boot段用来拷贝存放在FLASH的9000000400以后的程序,而放在9000000400以后的程序就是snd_bootload,它是用来拷贝放在FLASH第二页0x90010000以后的程序。所以对于FPGA的大程序,需要烧写3个HEX文件并要求遵循一定顺序。首先应用程序FPGA的配置程序在第0页后半页;然后下载运行fpga.out确保FPGA工作;然后烧写应用程序,修改FLASHburn工具在Downloading 栏中logical Addr 填入0x100000(第二页);最后烧写snd_bootload程序。对于CPLD则只需后面2步,这样就成功完成大程序的烧写。

    5 结 语

    文章结合自己实际开发经验,给出对于FLSAH烧写的原理和一些方法与经验的总结,对于FPGA+DM642是用的TI的EVM评估板,而CPLD+DM642则是使用的是自己的开发板,通过烧写FLASH,成功完成视频图像处理的应用程序自启动运行。

    参 考 文 献

    [1] AMD.Am29lv033c Datasheet.2003.

    [2]Texas Insturments.TMS320C6000 EMIF to ExternalFLASH Memory.Literature Number:SPRA568A,February 2002.

    [3]Texas Insturments.TMS320 DSP/BIOS Users Guide.Literature Number:SPRU423E,March,2004.

    [4]Texas Insturments.Creating a Second-Level Bootloader for FLASH Bootloading on TMS320C6000 Platform with Code Composer Studio.Literature Number:SPRA999A,August 2004.

    [5]李方慧,王飞.TMS320C6000系列DSPS 原理与应用\.2版.北京:电子工业出版社,2005.

    [6]闻亭科技发展有限责任公司.TDS642EVM 多路实时图像处理平台\.2005.

    [7]北京瑞泰发展有限责任公司.ICETEK-DM642-IDK-MT图像语音和网络系统硬件、软件使用说明书和实验指导书\.2005.

    [8]李兴友,游志胜.基于DM642的大容量FLASH引导加载方法研究与实现\.计算机应用,2005,25(8):1 929-1 941.

    [9]胡嘉凯,蒋建国,齐美彬.基于TMS320DM642的FLASH在系统编程方法\.电子设计应用,2006(4):110-111,120.

    [10]周世新.大容量FLASH与DSP接口技术的实现\.无线电工程,2006,36(3):57-58,62.

    [11]江思敏,刘畅.TMS320C6000 DSP应用开发教程\.北京:机械工业出版社,2005.

    [12]常传文,茅文深.DM642上利用DMA和CACHE优化内存存取实例\.现代电子技术,2007,30(22):145-147.

    [13]路锦正.基于DM642DSP的MPEG4视频解码算法优化设计\.现代电子技术,2007,30(4):80-82,91.

    作者简介 刘发志 男,1984年出生,湖北武汉人,硕士研究生。研究方向为信息处理与微系统。

    张 东 男,1963年出生,广东梅县人,副教授。研究方向为信息处理与微系统,通信,数据库技术。

    杨 艳 女,副教授。研究方向为图像分析与处理。

    朱晓鼎 男,1984年出生,湖北广水人,硕士研究生。研究方向为信息处理与微系统。

    相关热词搜索: 原理 启动 研究 DM642 FLASH

    • 生活居家
    • 情感人生
    • 社会财经
    • 文化
    • 职场
    • 教育
    • 电脑上网