利用Flash实现DSP对多个程序有选择的加载
发布时间:2008/5/27 0:00:00 访问次数:446
摘要:主要介绍一种利用flash存储器实现双dsp系统对多份用户代码有选择的上电加载的方法。其中,重点介绍m29w800ab flash的使用和编程方法,tms320vc54x dsp的上电自动引导过程,以及hpi模式和并行模式加载用户代码的方法。
关键词:flash存储器 dsp 主机接口 bootloader 引导表
引 言
在tms320c54x系列dsp系统的开发中,由于dsp片内只有rom和ram存储器,如要将用户代码写入rom中,必须要由dsp芯片厂家来完成;但这样做用户就不能再更改代码,很不实用。由于ram在dsp掉电后不能再保存数据,因此,常常利用eprom、flash等一些外部存储器来存放用户代码。在dsp上电工作后,利用dsp提供的boot机制,再将程序下载到dsp ram中运行。如果使用eprom外部存储器存放用户代码,需要用代码转换工具将用户代码转换为二进制目标文件,然后用编程器将其烧写进eprom;而如果使用flash存储器存放用户代码,则可直接使用dsp仿真器和ccs(code composer studio )仿真环境进行在线编程,使用灵活方便,不再需要其它编程设备。在某一以太网通信系统中,我们就采用flash存储器来实现多份用户代码的有选择加载。下面就以此系统为例介绍对tms320vc54x dsp的一种用户代码加载的方法。
1 系统构架
此通信系统基于802.3以太网标准,用以实现各终端之间的话音和其它数据的通信,以及实现局域网内终端与外界的话音和数据通信。为节约开发成本,提高系统的可扩展性、通用性和灵活性,我们对每个网内终端采用同样的硬件架构,通过使用不同的软件代码而使其实现不同的功能,发挥不同的作用。
每一通信终端由2块dsp芯片、1块网卡、1块cpld和1块fpga以及flash存储器等器件组成可扩展的基本结构。其中,以tms320vc5410 dsp作为主cpu,负责系统的逻辑控制和一般数据传输;以ms320vc5416 dsp作为从cpu,负责话音的编解码和回声消除、语音检测等工作。2块dsp之间通过主机接口(hpi)进行通信。为了实现代码的有选择下载,可由fpga配置一端口作为拨码开关,使用户通过调节拨码开关,可以有选择地下载存储于flash中的用户代码,其结构如图1所示。
配置拨码开关是为了扩充系统的功能,以实现一个硬件平台的多种用途。我们可以将实现不同功能的多份用户代码都写入flash存储器中存放,通过硬件拨码开关的设置,选择其中一份用户代码下载执行。在系统上电加载用户代码时,系统先从flash下载fpga配置程序,然后通过fpga读出拨码开关的值,再根据此值从flash中选择对应的5410 dsp用户代码加载;而5416 dsp的用户代码加载是在5410代码加载完成,启动运行后由5410程序从flash中读出相应的5416代码,再通过hpi加载到5416的,以此实现5416 dsp的代码加载与启动。
2 m29w800ab flash存储器介绍及使用
在此系统中,我们选用的是m29w800ab flash存储器,其容量为512k×16位, 分为16页,每页32k。其中,第0页有4个模块:0x00~0x1fff、0x2000~0x2fff、0x3000~0x3fff、0x4000~0x7fff。其余各页,每页为1个模块,共有19个模块。
对flash的操作要靠写入一系列特定的地址和数据序列来完成。在每次对flash写入之前,要对其原来的内容进行擦除。flash的擦除包括块擦除和芯片擦除两种。块擦除是对一个模块进行擦除,芯片擦除是擦除整个flash的内容。因此,对flash的操作,是以模块为基本单元的。对flash的操作由指令决定,其必须满足flash的时序要求,每条指令需要1~6个不等的指令周期。主要操作指令包括读数据指令、编程指令、复位指令、自动选择指令和擦除指令。每个指令周期由一个命令构成,每个命令代码所执行的任务如表1所列。
表1 flash的命令说明
hex代码 | 命 令 | ||||||||||
00h | 有效/保留 | ||||||||||
10h | 芯片擦除确认 | ||||||||||
20h | 保留 | ||||||||||
30h | 模块擦除继续/确认 | ||||||||||
摘要:主要介绍一种利用flash存储器实现双dsp系统对多份用户代码有选择的上电加载的方法。其中,重点介绍m29w800ab flash的使用和编程方法,tms320vc54x dsp的上电自动引导过程,以及hpi模式和并行模式加载用户代码的方法。 关键词:flash存储器 dsp 主机接口 bootloader 引导表 引 言 在tms320c54x系列dsp系统的开发中,由于dsp片内只有rom和ram存储器,如要将用户代码写入rom中,必须要由dsp芯片厂家来完成;但这样做用户就不能再更改代码,很不实用。由于ram在dsp掉电后不能再保存数据,因此,常常利用eprom、flash等一些外部存储器来存放用户代码。在dsp上电工作后,利用dsp提供的boot机制,再将程序下载到dsp ram中运行。如果使用eprom外部存储器存放用户代码,需要用代码转换工具将用户代码转换为二进制目标文件,然后用编程器将其烧写进eprom;而如果使用flash存储器存放用户代码,则可直接使用dsp仿真器和ccs(code composer studio )仿真环境进行在线编程,使用灵活方便,不再需要其它编程设备。在某一以太网通信系统中,我们就采用flash存储器来实现多份用户代码的有选择加载。下面就以此系统为例介绍对tms320vc54x dsp的一种用户代码加载的方法。 1 系统构架 此通信系统基于802.3以太网标准,用以实现各终端之间的话音和其它数据的通信,以及实现局域网内终端与外界的话音和数据通信。为节约开发成本,提高系统的可扩展性、通用性和灵活性,我们对每个网内终端采用同样的硬件架构,通过使用不同的软件代码而使其实现不同的功能,发挥不同的作用。 每一通信终端由2块dsp芯片、1块网卡、1块cpld和1块fpga以及flash存储器等器件组成可扩展的基本结构。其中,以tms320vc5410 dsp作为主cpu,负责系统的逻辑控制和一般数据传输;以ms320vc5416 dsp作为从cpu,负责话音的编解码和回声消除、语音检测等工作。2块dsp之间通过主机接口(hpi)进行通信。为了实现代码的有选择下载,可由fpga配置一端口作为拨码开关,使用户通过调节拨码开关,可以有选择地下载存储于flash中的用户代码,其结构如图1所示。 配置拨码开关是为了扩充系统的功能,以实现一个硬件平台的多种用途。我们可以将实现不同功能的多份用户代码都写入flash存储器中存放,通过硬件拨码开关的设置,选择其中一份用户代码下载执行。在系统上电加载用户代码时,系统先从flash下载fpga配置程序,然后通过fpga读出拨码开关的值,再根据此值从flash中选择对应的5410 dsp用户代码加载;而5416 dsp的用户代码加载是在5410代码加载完成,启动运行后由5410程序从flash中读出相应的5416代码,再通过hpi加载到5416的,以此实现5416 dsp的代码加载与启动。 2 m29w800ab flash存储器介绍及使用 在此系统中,我们选用的是m29w800ab flash存储器,其容量为512k×16位, 分为16页,每页32k。其中,第0页有4个模块:0x00~0x1fff、0x2000~0x2fff、0x3000~0x3fff、0x4000~0x7fff。其余各页,每页为1个模块,共有19个模块。 对flash的操作要靠写入一系列特定的地址和数据序列来完成。在每次对flash写入之前,要对其原来的内容进行擦除。flash的擦除包括块擦除和芯片擦除两种。块擦除是对一个模块进行擦除,芯片擦除是擦除整个flash的内容。因此,对flash的操作,是以模块为基本单元的。对flash的操作由指令决定,其必须满足flash的时序要求,每条指令需要1~6个不等的指令周期。主要操作指令包括读数据指令、编程指令、复位指令、自动选择指令和擦除指令。每个指令周期由一个命令构成,每个命令代码所执行的任务如表1所列。
|