微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > 基于EDMA的TMS320C6713片外Flash自举引导

基于EDMA的TMS320C6713片外Flash自举引导

时间:02-12 来源:本站整理 点击:

基于EDMA的TMS320C6713片外Flash自举引导

在基于DSP的系统设计中,为了保证掉电时程序不丢失,总是将程序保存在非易失性存储器中,以便系统在上电复位时可将其引导到DSP内部的RAM中执行。以TI公司的TMS320C6713浮点DSP和AMD公司的AM29LV040Flash存储器为例,通过JTAG加载来设计一个完整的自举引导方案。着重描述了引导引脚以及相关寄存器的设置,分析了采用EDMA传输方式将代码从Flash复制到DSP的过程,并对引导程序给出基于汇编语言的代码实现。工程实践证明,该设计方案是可行、有效的。
关键词:TMS320C6713;自举引导;Flash

    引言

    在许多基于DSP的系统设计中,程序代码总是保存在ROM、Flash或其他非易失存储器中,以保证掉电时代码仍存在,因此必须要解决引导装载的问题。自举引导(Bootload)是指系统上电时,DSP将一段存储在外部非易失性存储器的代码搬移到内部的高速存储器单元中执行(如片内RAM)。本文以TI 公司的TMS320C6713(以下简称为C6713)浮点DSP和AMD公司的AM29LV040Flash存储器为例,通过JTAG口加载来设计一个完整的引导装载方案。

     TMS320C6713的引导配置

    外部信号BOOTMODE[4:3]决定了C6713的引导配置,在RESET信号的上升沿BOOTMODE[4:3]信号被获取。C6713DSP只有2种引导方式:

     (1)ROM/Flash引导。外部存储器的一部分通过EDMA控制器拷贝到DSP内部地址0处。尽管引导程序在器件从外部复位释放后才开始执行,但在 CPU被保持在内部复位时,这个拷贝就进行了。Flash宽度也通过BOOTMODE[4:3]选择。在Flash宽度小于32bit的情况下,DSP通过EMIF读取时,可以自动将相邻的8bit字节或16bit半字打包形成32bit的指令字,并且这些数值在外部存储器中可以通过设定HD8来确定 endian存储模式。

     (2)主机引导。核心CPU停留在复位状态,器件其余部分保持正常状态。外部主机通过HPI或扩展总线初始化CPU的存储空间。在必要的初始化完成之后,主机在HPI控制寄存器的DSPINT位写1,这个写操作引起DSPINT信号的跳变,从而导致引导配置逻辑使CPU脱离复位状态,然后CPU从地址0处开始运行。

     Flash引导模式的实现

    硬件设计
     C6713引导引脚说明如表1所列。

    

    设计时将DSP主机口引脚HD[4:3]中的HD4通过下拉电阻接地,HD3通过上拉电阻接3.3V电源,即HD[4:3]=01B。C6713的 EMIF含有4个CE空间寄存器,由于Flash加载程序是从CE1空间搬入的,因此DSP的CE1与Flash(AM29LV040)的片选相连,这种连接将Flash的内部地址映射到DSP的0x90000000处,从而完成了基本的硬件设计。DSP与Flash接口的硬件连接如图1所示。

   
    图1  DSP与Flash的引脚连接

    引导程序的设计

     Flash存储器的擦除
    在对AM29LV040Flash进行读写操作之前,应对其进行擦除,擦除操作需要6个总线周期:

     (1)向555H地址的存储单元写入数据AAH;
     (2)向2AAH地址的存储单元写入数据55H;
     (3)向555H地址的存储单元写入数据80H;
     (4)向555H地址的存储单元写入数据AAH;
     (5)向2AAH地址的存储单元写入数据55H;
     (6)向555H地址的存储单元写入数据10H;

    完成上述操作后,Flash存储器完全擦除。

    在CCS环境下,用C语言编写上述操作如下:

     voidFlash_Erase()
   {
     *(char*)FLASH_ADR1=0xAA;
     *(char*)FLASH_ADR2=0x55;
     *(char*)FLASH_ADR1=0x80;
     *(char*)FLASH_ADR1=0xAA;
     *(char*)FLASH_ADR2=0x55;
     *(char*)FLASH_ADR1=0x10;
   }

    根据前面的设计,Flash的内部地址已经映射到C6713的CE1空间,其开始地址为0x90000000。因此FLASH_ADR1,FLASH_ADR2的定义如下:

     #define   FLASH_ADR1   0x90000555
     #define   FLASH_ADR2   0x900002AA

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top