DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 4833|回复: 2
打印 上一主题 下一主题

TMS320VC55x系列DSP简单有效的Flash烧写方法

[复制链接]
跳转到指定楼层
楼主
发表于 2011-4-25 09:20:13 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
1 引言
  随着数字信号处理技术的快速发展,DSP越来越广泛地应用于各种数字信号处理系统中。由于TMS320VC55x系列DSP的内部存储器没有可供用户使用的Flash,而最终开发的系统要想脱离仿真器运行。必须将程序代码存储在非易失性存储器中,所以要对DSP外接存储器。Flash存储器以其大容量和可在线编程等特点已成为DSP系统的一个基本配置。如何将程序烧写入Flash,并在上电时加载到DSP内部的RAM,是Flash在DSP系统中应用的两个基本技术问题。
  以基于TI公司的TMS320VC5502和SST公司的SST39VF200开发的系统为背景,详细介绍了系统引导相关的硬件设计,烧写软件设计以及自举引导等实现方法。
  2 TMS320VC5502的自举引导
  2.1 TMS320VC5502的存储区以及Bootloader
  TMS320VC5502的存储区是统一分配地址,即对程序和数据的访问在相同的物理空间。TMS320VC5502的存储区共分为4个区,即CE0,CEl,CE2,CE3,其字节地址分别为000000h-3FFFFFh,400000h~7FFFFFh,800000h~BFFFFFh.C00000h"FFFFFFh。片内存储器共48 K字节,可分为32 K的16位字的RAM和16 K的16位字的ROM,片内RAM的字节地址为000000h~00FFFFh,位于CEl区;片内ROM的字节地址为FF8000h~FFFF00h。
  片内ROM从FF8000h开始的区域包含Bootloader,该程序在系统上电或复位后可以将用户代码自动搬移到片内RAM运行。
  2.2 自举加载模式选择
  TMS320VC5502的引导模式选择是通过3个模式选择引脚BOOTM[0:2]配置完成的。BOOTM[0:2]引脚分别与GPl00,GPl01,GPl02相连。自举加载模式选择如表1所示。
  




  TMS320VC5502每次上电复位后,在执行完一系列初始化工作后,根据预先配置的自举模式,通过固化在ROM内的Bootloader程序进行程序引导。系统设计中,采用EMIF(外部存储接口)并行引导模式(16位数据宽度),只需将BOOTM[2:0]设置成011即可。
  2.3 TMS320VC5502的引导表
  Bootloader允许应用代码存放在慢速非易失性的外部存储器中,然后再将代码搬移到高速的片内存储器执行。应用代码以一种Bootloader能够理解的特殊格式编码,这种格式就是自举加载表。Boofloader在引导程序时,程序代码是以自举加载表形式加载。自举加载表包含了将要搬移的代码段、程序段,以及这些段将要被搬移到的地址和加载完成后程序要执行的地址(即程序入口地址)和其他一些配置信息。
  TMS320VC55x系列DSP的自举加载表结构如表2所示。
  




  其中,程序入口地址是自举加载表加载结束后用户程序开始执行的地址;寄存器配置数目决定了后面有多少个寄存器需要配置:只有当延时标志为0xFFFF时,延时才被执行;延时长度决定了在寄存器配置后延时多少个CPU周期才进行下一个动作;段长度、段起始地址和数据则为用户程序中定义的各个段的内容,并且可以重复添加;最后以0x00000000(32个01作为引导表的结束标志。
  若要生成引导表,可用CCS最终编译生成的.out文件通过CCS自带的hex55.exe转换程序得到。将hex55.exe文件、.out文件、.cmd文件放在同一个文件夹中,通过DOS命令调用hex55.exe和.cmd文件,即可完成.out文件到.hex格式的引导表文件的转化。.cmd文件用于提供引导表的相关配置信息,以下为一个.cmd文件实例。
  boot:表示生成一个自举加栽表
  v5510:2:生成C55x格式的自举加载表
  parallell6:加载模式是16位外部异步存储器
  a :要求的输出格式是ASCII格式
  o mvbso.hex:指明输出文件名
  bso.out:指明输入文件名
  经hex55.exe文件转化后的.hex格式的自举加载表文件是不能直接导入CCS中,CCS只支持将特别规定的DAT格式文件通过LDADDATA导入内存。所以在导入之前必须先将自举加载表转化成DAT格式文件,这个工作可以用VC编写简单的C语言转化程序实现。
  2.4 TMS320VC5502和Flash的连接
  EMIF为外部存储接口,通过EMIF接口可灵活地和各种同步或异步存储器件无缝连接。通过EMIF接口可以将TMS320VC5502的存储空间扩展到128 Mbit。存储空间被分为CE0"CE3四个区.每区占用不同的地址。在EMIF的并行引导模式下,ROM固化的Bootloader程序是以字地址0x200000为首地址开始加载程序。Ox200000即为CEl空间的首地址,所以Flash必须接在DSP的CEl空间上。
  TMS320VC5502的EMIF有内部和外部两种地址总线。内部地址总线为A[21:2],外部地址总线为A[19:0]。EMIF根据所用的存储器数据线大小自动将内部地址总线移位,以便与外部地址总线连接。外存储器的地址总线应该总是连接在EMIF、的以A2开始的地址线上。例如一个8,16或32位的异步存储器的地址总线A[n:0](其中n表示外存储器的地址线个数)应该连接EMIF的地址线A[n+2:2]。图1给出TMS320VC5502和Flash的连接实例。表3为TMS320VC5502的内部总线和外部地址总线的映象关系。
  




  




  3 并行Flash的烧写
  3.1 数据烧写程序设计
  Flash的数据可直接读取,但对Flash的编程和擦除操作则需要通过一系列命令才能进行。SST39VF200的写操作只能将1变成0,而O变成l必须通过擦除操作进行。所以每次写Flash之前必须进行片擦除,使存储单元值变成0xFFFF才能进行编程。擦除命令需要6个周期,编程命令需要4个周期,操作命令如表4所示H。
  




  编程和擦除操作都需要一定周期的时间(SST39VF200的单字编程时间是14μs,整片擦除时间是70 ms)。用户可以通过查询标志数据线DQ6和DQ7确定编程或擦除是否完毕。当器件正处于编程或擦除状态时,连续读任意单元的值,D06的值将一直在O、l之间交替变化。当编程或擦除结束时,读DQ6则得到一个恒定值。这里即通过此方法判断操作是否结束。
  根据Flash的编程和擦除命令,编写了相应的C语言程序,其中在TMS320VC55x系列1)SP中,对外接存储器的访问要调用库函数far_poke()和far_peek()。这2个函数包含在头文件中,并且寻址的地址为字地址。以下给出擦除程序,写操作与此类似。表5为对外接存储器读写的库函数。
  




  




  3.2 程序的烧写实现
  系统在CCS仿真环境下对Flash进行在线编程。先建立一个Flash的烧写工程,并在工程中将要烧写进Flash的自举加载表文件通过CCS的LOADDATA功能直接加载进DSP的内存。根据加载的首地址和数据长度,在仿真环境下烧进Flash中。当然也可以直接在程序中定义一个数组,将DAT文件中的数据赋值给该数组的元素,然后将该数组的每个元素写入Flash。在运行烧写程序之前,要先对EMIF进行设置,因为EMIF默认的是接8位异步存储器,可以通过调用GEL菜单中Init_CE0_Async_16命令完成。
  4 结语
  阐述了一种针对TMS320VC55x系列DSP简单有效的Flash烧写方法,并提出了程序自举加载的实现方法。讨论的加载方法包括硬件设计及相关程序,已在笔者实际开发的高精度数据采集项目中使用并成功运行。欢迎转载,本文来自电子发烧友网(http://www.elecfans.com/)
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏1 分享分享 支持支持 反对反对
沙发
发表于 2022-8-16 03:28:12 | 只看该作者

来晚了,估计没银子了。那也顶一贴!
板凳
发表于 2022-8-16 17:52:03 | 只看该作者


感谢分享 需要银子
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-12-27 02:02 , 耗时 0.087767 秒, 20 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表