分析使用CPLD译码的DSP外部Flash烧写方法

出处:张芝贤1,邱委华1,朱庆贤2,王 发布于:2011-08-26 21:33:11

  摘 要: 随着科学技术的发展,图像监控系统越来越多的应用,以实际的图像监控系统为背景,介绍了对S29AL008D Flash存储器进行操作的指令格式和控制方法。通过CPLD实现DSP和Flash存储器之间的硬件连接,给出了部分VHDL源程序。

  DSP是一种独特的微处理器,是以数字信号来处理大量信息的器件。其工作原理是接收模拟信号,转换为0或1的数字信号。再对数字信号进行修改、删除、强化,并在其他系统芯片中把数字数据解译回模拟数据或实际环境格式。它不仅具有可编程性,而且其实时运行速度可达每秒数以千万条复杂指令程序,远远超过通用微处理器,是数字化电子世界中日益重要的电脑芯片。它的强大数据处理能力和高运行速度,是值得称道的两大特色。本文设计的以TI公司DSP芯片TMS320VC5509A(以下简称VC5509A)为主处理器的图像监控系统中,使用了AMD公司S29AL008D Flash存储器作为数据和应用程序存储芯片。使用VC5509A对S29AL008D进行操作,在硬件接口设计中采用CPLD进行译码和时序控制。

  Flash 是一种创作工具,设计人员和开发人员可使用它来创建演示文稿、应用程序和其它允许用户交互的内容。Flash 可以包含简单的动画、视频内容、复杂演示文稿和应用程序以及介于它们之间的任何内容。通常,使用 Flash 创作的各个内容单元称为应用程序,即使它们可能只是很简单的动画。您也可以通过添加图片、声音、视频和特殊效果,构建包含丰富媒体的 Flash 应用程序。

  Flash 特别适用于创建通过 Internet 提供的内容,因为它的文件非常小。Flash 是通过广泛使用矢量图形做到这一点的。与位图图形相比,矢量图形需要的内存和存储空间小很多,因为它们是以数学公式而不是大型数据集来表示的。位图图形之所以更大,是因为图像中的每个像素都需要一组单独的数据来表示。

  1 VC5509A及其外部存储空间

  TMS320VC5509A是TI公司的一款16位高速低功耗定点DSP芯片,主要应用于对音频、静态图像的数字信号处理,是设计便携设备的较佳解决方案。该DSP芯片在电压为1.35 V时工作频率为144 MHz;地址线为24位,对地址的寻址范围为16 M×8 bit或8 M×16 bit.VC5509A采用统一的编址方式,即存储空间地址没有重叠但是寻址方式却有2种不同的方式:字节寻址和字寻址[1].当DSP中的CPU访问VC5509A程序存储空间时,通过外部存储器接口(EMIF)对外部存储空间进行管理。外部存储空间被分成CE0~CE3 4个空间,分别由EMIF的CE0#~CE3#引脚管理,外部存储空间划分如图1所示[2].CEn#(n=0~3)与外设的片选端连接。

  2 硬件电路设计

  2.1 VC5509A与Flash的硬件连接

  使用PGE封装的VC5509A对外只提供14条地址线引脚,因此只能寻址8 K×16 bit的空间范围,要对S29AL008D的512 K×16 bit存储空间寻址需19条地址线。解决办法是用CPLD实现锁存译码使D[5:0]具有数据/地址复用功能,为S29AL008D Flash存储器提供高6位地址。通过CPLD的快速译码功能在CE2空间模拟1个Flash高位地址控制寄存器(换页控制寄存器)FPCR,上电复位后通过写FPCR控制FLASH的高位地址来实现换页功能。此处用VHDL对XC9536XL进行编程将FPCR映射到0x400000,由于篇幅限制仅给出如下部分源程序:

  begain

  fce<=ce1;

  foe<=aoe;

  fwe<=awe;

  addr<=a3&a2&a1;

  datain<=d5&d4&d3&d2&d1&d0;

  facs<='1' when ce2='0' and addr='000'

  else'0';

  FAR:process(facs,awe,reset)

  begain

  if reset='0'  then

  fa<='000000';

  else if reset='1' then

  if awe'event and awe='1' then

  if facs='1' then

  fa<=datain(5 downto 0);

  end if;

  end if;

  end if;

  end process;

  dataout<=fa when aoe='0' and facs='1'

  else 'ZZZZZZ';

  ……

  2.2 VC5509ADSP相关寄存器的初始化

  在DSP对S29AL008D 进行读写访问之前,要对DSP内相关寄存器进行正确的设置。此系统的初始化设置如下[6-7]:

  ioport unsigned int *ebsr=(unsigned int *) 0x6c00;

  ioport unsigned int *egcr=(unsigned int *) 0x800;

  ioport unsigned int *ce11=(unsigned int *) 0x806;

  ioport unsigned int *ce12=(unsigned int *) 0x807;

  ioport unsigned int *ce13=(unsigned int *) 0x808;

  *ebsr=0x01;   //外部总线选择寄存器选定完全EMIF模式

  *egcr=0x0a10;    //关闭ARDY控制

  在CPU一半工作频率下,设置CE1

  *ce11=0x162a     //设置存储器模式为异步16位,读操作的setup、strobe、hold与写操作的相同

  *ce12=0x162a; //写操作的setup、strobe、hold

  *ce13=0;

  2.3 Flash存储器的操作

  对S29AL008D的读写过程必须严格按照S29AL008D提供的命令时序来完成。表1给出了S29AL008D对数据字进行复位、擦除、读、写的命令时序[7].

  Flash操作写子函数C程序如下:

  # define flash_ba 0x200000

  //ptr是FLASH存储器映射在整个DSP系统地址空间中的基地址

  # define FAR

  unsigned int PA,PD;

  void write_se(unsigned int se_addr,unsigned int se_data)

  {

  unsigned int *flash_adr,*FAR=(unsignedint*)

  0x400000;

  flash_adr=(unsigned int * )

  (flash_ba+se_addr);

  //se_addr由FAR和A[13:1]来决定

  *flash_adr=se_data;

  }

  对Flash进行写操作前必须先擦除片内原有的数据。Flash的整片字擦除操作时序C语言实现如下:

  void Erase-Chip()

  {

  void write_se (0x555,0xAA);

  void write_se 0x2AA,0x55);

  void write_se 0x555,0x80);

  void write_se 0x555,0Xaa);

  void write_se 0x2AA,0x55);

  void write_se 0x555,0x10);

  }

  Flash要对写入的数据进行校验以及判断操作是否正确完成。Flash写校验C语言实现如下:

  void program_check (void)

  {

  unsigned int algorithm_out;

  unsigned int datapolling_bit;

  unsigned int exceed_time;

  algorithm_out = read_arry( PA);

  datapolling_bit = intalgorith_out &0x80;

  exceed_time = algorithm_out &0x20 ;

  while((datapolling_bit !=PD&0x0080)

  &&(exceed_time != 0x20))

  {

  algorith_out = read_arry( PA);

  datapolling_bit = algorith_out &0x80;

  exceed_time = algorith_out &0x20;

  }

  if (exceed_time = = 0x20)

  {

  datapolling_bit =read_arry(PA) &0x80 ;

  if (datapolling_bit !=PD & 0x0080)

  {

  reset_flash();

  wrong();

  }

  }

  }

  Flash字编程程序如下:

  void Word-Program(void)

  {

  write_se (0x555,0xAA);

  write_se 0x2AA,0x55)

  write_se (0x555,0XA0);

  write_se (PA,PD);

  program_check();

  }

  由于篇幅所限,本文仅给出部分程序代码,读者可利用上述代码编写一个完整的程序。

  本文以解决DSP静态图像无线传输系统项目中对大规模程序和大量图像数据的存储问题为背景,并终在整个系统调试中实现其存储功能和程序的二次加载。经验证,本接口设计和编程实现具有操作方便,易于扩展等优点。

  对DSP外部Flash编程虽不是一项关键技术,但它在整个DSP嵌入式系统开发中却有着至关重要的作用。如果开发者在设计之初就掌握了这项技术,将会大大方便系统的调试,缩短开发时间。


  
关键词:DSPPLD

版权与免责声明

凡本网注明“出处:维库电子市场网”的所有作品,版权均属于维库电子市场网,转载请必须注明维库电子市场网,https://www.dzsc.com,违反者本网将追究相关法律责任。

本网转载并注明自其它出处的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品出处,并自负版权等法律责任。

如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。

相关技术资料
上传BOM文件: BOM文件
*公司名:
*联系人:
*手机号码:
QQ:
应用领域:

有效期:
OEM清单文件: OEM清单文件
*公司名:
*联系人:
*手机号码:
QQ:
有效期:

扫码下载APP,
一键连接广大的电子世界。

在线人工客服

买家服务:
卖家服务:

0571-85317607

客服在线时间周一至周五
9:00-17:30

关注官方微信号,
第一时间获取资讯。

建议反馈

联系人:

联系方式:

按住滑块,拖拽到最右边
>>
感谢您向阿库提出的宝贵意见,您的参与是维库提升服务的动力!意见一经采纳,将有感恩红包奉上哦!