维普资讯 http://www.cqvip.com
第1200卷08年6月 第6期 簖姆厂壤缔 Vo1.10 No.6 Jun.2008 采用16 bit Flash实现的TMS320C6414 二级Bootloader设计 周玮,陈伟 (武汉理工大学信息工程学院,湖北 武汉430070) 摘 要:以TI公司高性能DSP芯片TMS32OC6414为例,介绍了TMS20C64X系列数字信号处理 器的加载方式,详细论述了采用16 bit Flash存储器实现TMS32OC6414二级Bootloader的设计方 案。给出了通过RS232串1:7对DSP进行在系统编程的具体实现方法。 关键词:TMS320C6414;Flash;自举加载 O 引言 1 系统描述 TMS320 C6414是TI公司TMS320C6000系列 1.1 系统总体设计 DSP中的一款高性能定点芯片。它每周期可以执 图1所示是整个系统的原理框图。图中,PC 行8条32位指令,具有高达600 MHz、1.67 ns指令 机负责从编译器生成的目标代码文件中提取出需 周期的运行速度以及4800MIPS的处理能力。此 要烧写的程序代码。并按照要求加入必要的信息 外,TMS320C6414还具有很强的外设支持能力, (如每个段的长度和大小1后,重新生成一个二进 它拥有一个64位EMIFA接口和一个16位EMIFB接 制文件。接着把文件中的数据按照事先约定好的 口,可方便地和SRAM、EPROM、Flash、SB— 帧格式进行打包,然后通过232串口发给DSP。 SRAM和SDRAM等同步和异步存储器进行连接。 DSP接收到每一帧的数据后,经校验正确即可再 TMS32OC6414可支持不加载、8 bit R0M加载 烧写进Flash。这样。在完成对Flash的编程操作 和HPI加载三种加载方式。在很多情况下,要求 后,系统重新上电时,DSP就可以自动从Flash中 把数据以16 bit甚至更高比特位宽的形式存储在 加载更新后的程序并运行了。 lfash中。由于TMS320C6414只支持8 bit ROM ̄I载 控制线 方式,因而它只能外接8 bit宽度的FLASH,这一 点了TMS320C6414整体性能的发挥。因此, 本文探讨了一种改进方案,该方案可在不改变 控 TMS320C6414内部自带的搬移程序的基础上,使 TMS320C6414能够支持16 bit ROM的加载。这样 就可以使DSP存取数据的时间减少一半,从而提 图1 系统原理框图 高系统的运行效率。另外,针对传统的JTAG下 1.2 DSP与FLASH的接口设计 载方式存在的接口信号太多、以及需外接仿真器 本系统选用的Flash型号是Spansion公司的 配合等缺点,本文提出了一种采用RS232串口对 S29AL016D,存储容量是2 M ̄8 bit/1 Mxl6 bit, TMS320C6414进行在系统编程的方法,该方法具 它采用3 V供电,最大访问时间为90 ns,DSP可 有程序加载灵活、方便快捷等优点。 通过EMIFB接口与该Flash相连,其连接电路如图 2所示。其中瓦为片选信号,丽为输出使能信 收稿日期:2007—12—11 号,WE是写选通信号,A【19..O】和D【15..O】分 WWW.ecda.cn 2008.6电子元器件主硐 l5 维普资讯 http://www.cqvip.com
第10卷第6期 电子元器件壶用 Electronic Component&Device Applications Vo1.10 No.6 20o8年6月 Jun.2008 C13 tab舵O BE LⅪN A11 Dl3 tabBE1 BECL}∞Ur1 皿 BECLK0UT2 u- nBARBtlBSDCAs 1BSADS/fIBSRE A10 nBAOE/nB¥ORAS/rtBSOE B ̄SP FASHfflBSOE 訾 DsP兀JAsH nBs伍rnBCEO 山 旧r SDW ⅡBSWE Cll DSP FLASH nBSW ̄ nBARDY El1 j兰 nBCE1catbCE2 j nB(Am3 ⅡBSOE3 一 rubP0T E12 nBHOLD El9 nBH0LDA E13 ——FLASH BEA20 El6 R DSPBBusREQ 互lL R DSP FLASH BEA1,D18 BEA2O DSP-FLASH BEA18 C18 BEA19 FLASH BEA17 BI8 BEA18 R DSPR DSPJLA:gH BEA16 A18 BEAl 7 DBED15 R DSP ASH BEA15 D17 BEA16 SH BED15 7 DSPFLAB6 DSP FLASH BEDI4 RDSP FLASH BEA14 C17 BEA15 BED14 C7 DSP FLASH BED13 DSP FLASH BEA13 BI7 BEAl4 DSPBED13 A6 DSP FLASH BED12 BED12 兀JAS BEA12 A17 BEA13 DSPlFLASH BEAll D16 BEA12 DSP FLASHD8 DSP_FLASH BEDll BEDl1 B7 DSP FLASHBED10 B∞10 C8 DSP FLASH BI ̄)9 BED9 BED8 C9 DIS FLASH 15P ̄BEA10 C16 BEAll OSP FLASH BEA9 R16 BEA1O DS LAsH EA8 A16 BEA9 A7 DSP FLA3HBEDS D 7 DSP』LASH BEA7 D15 BEA8 DSP FLASH BEA6 C15 BEA7 FLASH BEA5 B15 BEA6 DSPDSP且BED7 BED6 B8 DS FLASH BED6 B目D5 139 DS FLASH BED3 ASH EA4 A15 BEA, LASH I ̄,A3 D14 B队4 BED4 B9 DSP—FLAStt BP294 BED3 C1oDSPFLASH BED3 D,S DSP FLASH BEA2 C14 BEA3 BEA2 DSP FLASH BEAI A14 BEA1 BED2 A9 U3PJLASH BED2 BED1 D10DSPFLASH BED1 BEDO B10DSP FLASH BED0 图2 TMS320C6414与FLASH的接口连接 别为地址线和数据线,BYTE为8位或16位数据模 式选择,这里接VCC,并选择16位模式。 一NOP 4 STH A5, A7++[2】 ;把数据送A7和 B7指向的片内RAM区 『 ISTH B5, B7++『21 SUB A1,1,A1 fA1】B LOOP;代码未搬移完,继续循环 般TMS320C6414上电后只能自动加载1KB 大小的程序代码到内部RAM,而通常用户程序的 代码远大于1 KB,因此需要编写二次搬移程序以 加载其它代码。二级搬移程序的大小不能超过1K 字节,且必须用汇编语言编写,它主要完成两项 任务:一是把其它应用程序搬移到DSP内部RAM NOP 5 、 MVKL 0x400+20"4.BO 的指定地址单元处;二是跳转到应用程序的入 MVKH 0x400+20*4.B0 口。搬移程序的代码如下:…………..LDW*BO.BO NOP 4 : 完成DSP的初始化工作 MVKL 0x25800,A1;A1存放的是代码的长度 f字节1/4 B B0;跳转到程序的入口地址: c int00 MVKH 0x25800.A1 川2 PC机与DSP的通信 地址MVKL 0x 004竺 3.nash中程序代码的首 2.1 从COFF3 ̄件中提取和重组代码 EMIFB的CE1空间 … … “…一 ……’ .M V KH 0x64000400.A3 因为编译器生成的目标代码文件f.out)中的 代码长度与Flash的设置不同.所以必须根据 COFF文件的格式重新从代码文件中提取出程序 代码,包括初始化段和可执行代码段.非初始化 段由于是在程序运行时才分配空间的.所以不用 MVKL 0x400,A7 RAM的首地址 MVKH 0x400.A7 ADD A3,2,B3 ADD A7,2 B7 ;程序代码存放在片内 提取。在COFF文件中提供有每个段的相关信息 (如各段的大小,起始地址等等1,可以方便地帮 助我们提取所需的数据。在把代码提取出来后, 下一步的工作是把代码按照一定的规则重新组合 起来,以便于Flash的烧写和程序的加载。因为在 LOOP: LDH A3++[2】,A5;并行指令,一共 从flash中读取一个word I 1LDH B3++[2】,B5 l6 电子元器件主用 2008.6 W'WW.ecdcacn 维普资讯 http://www.cqvip.com 第10卷第6期 2008年6月 黪墓缔 V01.10 No.6 Jun.2008 COFF文件中,代码是以32 bit为单位进行存储的, 所以重组代码时,首先要把搬移段(二级搬移程 序)的每一条指令拆成4个字节,然后将每个字 节通过高8位补零方式扩充成4个16 bit数据。剩 帧格式如表1所列。其中帧号¥FsTAH为烧写开始 命令帧,¥FBDTH为烧写程序代码帧,¥FCENH为 烧写结束指令帧。 表1发送帧格式 下的段只需把每一条指令拆成2个16 bit的半字即 可,最后将这些重新组合好的程序代码写入一个 新的二进制文件中。代码的提取和重组可由上位 机的程序来完成。该程序采用VC编写,其基本 工作流程如图3所示,程序界面如图4所示。 l从coFF文件中读取代码I ● 对代码进行重组,如果是搬移段,每条指令 拆分成4个字节,其余段则每条指令拆成2个16bit 半字,然后写入到一个新的二进制文件中 ‘ 与DsP进行通信,将数据按照帧格式 打包发给DSP,完成数据的传输。 图3 PC机程序工作流程图 2.2串口通信程序设计 本设计中的DSP是通过串口通信模块 (UART)与PC机进行异步通信的。接收数据时, PC机将数据发到UAR 莫块后,先由UART模块完 成串并转换,然后通过DSP的外部中断口通知 DSP从数据总线上读取数据。发送的过程则刚好 相反,DSP通过数据总线往UART模块内写入并 行数据后,UART模块负责完成数据的并串转换, 然后以异步串行通信方式发给PC机。串行通信的 波特率为115200 bps,数据位格式为:起始位1 bit,数据位8 bit,校验位O bit,停止位1 bit。数 据的交互采用帧交换方式,即在DSP接收到数据 后根据帧号来区分帧类型。PC机发给DSP的数据 DSP返回给PC机的数据帧格式如表2所列。 表2中的帧号¥FsTAH表示烧写开始确认帧, ¥FENDH表示烧写结束确认帧,¥ERROR表示数 据校验错误帧。 表2返回帧格式 下面给出DSP与PC机通信的C程序代码: void CodeRev(BYTE*pch,其它参数) { BYTE pHead[3][7]={’’¥FSTAH”,” ¥FBDTH”,”¥FCENH”1; BYTE pRHead[7]=”\0”; memcpy(pRHead,pch,6); if(!strcmp((char )pRHead,(char )pHead [O])) { ………,/对Flash进行擦除,做好烧写准备 l else if(!strcmp((char )pRHead,(char ) pHead[1])) { ………,/向Flash写人数据 l else if(!strcmp((char )pRHead,(char ) pHead[2])) { ………//确认Flash烧写成功后,向PC机发出 烧写结束确认指令 1 www.eedtken 2008.6电子元器件主用 l7 维普资讯 http://www.cqvip.com 第10卷第6期 电子元器件主珂l Electronic Component&Device Applications Vo1.10 No.6 2oo8年6月 Jun.2oo8 3对16 bit FLASH的编程 3.1代码的存放方式 因为上电时.TMS320C6414采用8 bit ROM模 式来读取lK字节的程序并将其放到内部RAM中, 而FLASH的设置为l6 bit模式,所以,为了成功 加载,必须把用户自己编写的二级搬移程序存储 在flash地址为0~400h的低8 bit上,而高8 bit的空 间不用f可以往里面写入任何数据1。这一点是自 举能否成功的关键,因为自举时,DSP会按照地 址递增的顺序把连续的4个半字地址的低8位合成 为一个32 bit的数据送到内部RAM中,高8 bit不 用。因此,如果二级搬移程序不是按照上述方式 存储的话,DSP读进内部RAM的前1 KB代码就会 因为是错误的指令而无法执行将用户程序调入内 存的操作。其它应用程序则应存放在400h单元以 后的flash空间,具体的存放方式如图5所示。 高8 bit单元 低8 bit单元 0x0Oo0h 填0区 二级搬移程序 代码区 用户应用程序代码区 图5 flash内部数据存放形式 3.2对flash的编程 对flash的编程有两种烧写方式:通过仿真器 在线烧写和通过专门的烧写器烧写。具体选择哪 种方式取决于flash的封装形式是采用表贴式还是 可插拔形式。目前多采用前者的原因,一是符合 系统小型化的趋势,二是其在线烧写方法比较灵 活,且易于开发 在线烧写Hash时,只需根据Flash芯片的要 求把程序代码写到Flash存储器中指定的地址即 可。本例采用的Flash芯片是S29AL016D,采用3 V电压供电,完全兼容JEDEC标准,可支持在系 统编程,并可提供硬件和软件方法来检; ̄1]Flash存 储器的操作。在本例中,当DSP从串口获得l6进 制的代码后,向对应的命令寄存器写入命令序列 即可实现对Flash的数据写入。但由于Flash存储 器是以l6位进行访问的.所以对Flash存储器而 18 电子元器件主用 2008.6 .ecda.cn 言,其物理地址以l6位为单位进行编址,而程序 中使用的逻辑地址是以字节为单位进行寻址的, 所以二者之间的关系为: 逻辑地址=物理地址<<1 对于Flash RAM的具体编程操作步骤可参考 芯片手册。图6给出的是其编程流程图。 擦除整} ̄'FLASH I I地址指针初始化, ̄'h"@Flash存储单元的首地址 t N 、、 : / Y●一 将数据写入地址指针指向的单元 N Y● 地址指针自增,指向Flash的下一个存储单元 图6 F1ash编程流程图 4结束语 本文以TI公司的高性 ̄,DSP TMS320C64l4为 例,论述了采用l6 bit Hash实现二级Bootloader的 具体方案以及采用RS232串口对DSP进行在系统 编程的方法和步骤。这种方法已经在实际工程中 得到了应用,并且取得了比较好的效果。实践表 明,该方法具有操作灵活简单、程序加载方便和适 应性强等优点。 参考文献 【1] 张雄伟,陈亮,徐光辉.DSP芯片的原理与开发应用(第3 版)【M].北京:电子工业出版社,2003.2.26—27. 【2] TMS320C6414,TMS320C6415,TMS320C6416 Fixed— Point Digital Signal Processors【EB/OL].http://focus.ti. con.cn/cn/docs/prod/folders/print/tms320c6414.html, May 2005. 『3 3]S29AL0 16D—oo—A6.E.pdf 【EB/OL].http://www. spansion.corrdproducts/S29AL016D.html,Sep,2007. 『4 4]TMS320C6000 Assembly Language Tools v6.0 Beta User's Guide【EB/OL].http://focus.ti.con.cn/cn/general/ docs/techdocsabstract.tsp?abstractName =spru186p, October 2006.