双芯片系统的DSP56858自引导技术
1引言 随着DSP在通信、控制、测试/测量、电子娱乐等领域应用的日渐广泛,DSP技术的发展越来越快,无ROMDSP芯片的自引导技术成为DSP应用中的重要技术之一。在单芯片工作系统中,如果片内缺少足够的ROM空间,可按照常用方法外接1块ROM芯片;但对于双芯片工作系统,如果其中1块芯片可以为另1块提供足够的ROM空间,外加ROM就毫无必要了。本文通过分析DSP56858的原理,解析片内固化的自引导程序,讨论几种源程序下载的技术过程与要点,提出在双芯片工作系统中,无ROMDSP芯片的自引导解决方案,最后给出DSP56858E自引导模式的功能实现。
2方案设计 在DSP应用开发中,常常需要使用一些芯片自带提供的外部引导(bootstrap)的功能,通常可根据不同需要选择芯片提供的自引导方式,实现从外接ROM中导入程序。现在的软件开发工具多为集成开发工具,将编译、链接、调试和烧片等多种功能合为一体,能为用户提供方便、一体化的服务,这种开发环境下链接产生的目标代码,除了源程序代码对应的二进制码外,还加入了许多控制代码,使用户可以对下载后的程序进行实时在线调试。为此,可以将实现无ROMDSP芯片自引导问题分解为两个层次:首先是如何从目标代码中提取源程序代码下载至片外ROM中,其次是如何利用片内固化的自引导程序实现外部引导。本文无ROMDSP芯片的自引导研究以DSP56858芯片为例展开,结合实际应用,介绍可能遇到的问题,提出解决方法,实现其功能。本文应用实例方案是以MC9S12DP256(下称HCS12)作为设计中的主芯片,DSP56858为搭建测试平台用的辅助芯片,连接框图如图1所示。方案中充分利用HCS12片内足够的FlashEEPROM空间,采用其Flash作为DSP56858的外挂Flash存贮器,将DSP的源程序代码以数据形式存放在HCS12中。
2.1DSP56858的基本情况 (1)属于MotorolaDSP56800E芯片家族系列的16位数字信号处理器。 (2)单片上集成了1套外围设备,兼具DSP的处理能力和微控制器的功能,能为使用者带来低成本的解决方案。
图1 DSP56858与HCS12连接示意图
(3)采用程序存储器与数据存储器分离的双哈佛结构,可达到120MIPS的指令执行速度,高效率的流水线指令执行方式。 (4)片内有40K×16bit的程序RAM,24K×16bit的数据RAM以及1K×16bit的ROM存放引导程序;外部扩展可到达2M×16bit的程序和6M×16bit的数据存储空间。 (5)提供了强大的系统接口: ——6信道的DMA(DirectMemoryAccess) ——2个ESSI(EnhancedSynchronousSerialInterfaces) ——2个SCI(SerialCommunicationInterfaces) ——1个SPI(SerialPortInterface) ——8位并行主机接口(ParallelHostInterface) (6)为开发者提供了EOnCE(EnhancedOnchipEmulation)模块和JTAG(JointTestAccessGroup)接口;在一定的调试环境下,可以在线观察寄存器、内存或片上外设的内容,避免了牺牲任何用户可访问的片上资源用作调试。
2.2HCS12的基本情况 (1)属于STAR12系列16位的单片机; (2)低成本、低功耗,在通信和各种电子产品中有着广泛的应用; (3)40MIPS的指令执行速度; (4)片内有256KB的FlashEEPROM、4KB的EE-PROM和12KB的RAM; (5)Flash分为16页(0×30页~0×3F页),每页64KB,以16条地址线结合页地址可寻址全部Flash空间。
2.3软件集成开发环境 DSP56858和HCS12所使用的软件集成开发环境都是Metrowerks公司的CodeWarriorIDE。CodeWarriorIDE简单易用、功能强大,它集成了C/C++编译器、汇编器、连接器、烧片器(burner)和译码器及多用途调试器,可实时仿真调试嵌入式应用程序,并能针对不同芯片仿真硬件,使用户能在纯软件环境下进行设计开发。
3源程序下载技术 3.1目标程序代码合并机制 3.1.1SRecord文件格式 通过适当的配置,CodeWarrior的链接器能够产生1种SRecord文件,该文件遵循Motorola制定的格式规范,是1种标准的、可打印格式的文件。SRecord文件是通过对链接器生成的目标程序或数据进行编码生成的,适用于在计算机平台间传送,也可以在编辑后用于交*平台间的传送。SRecord文件编码简单,可以通过IDE下载,但无法在线实时调试。SRecord文件是由多条记录组成的,每条记录都是由5个字段组成的ASCII字符串,格式如表1所示。 表1 记录格式
(1)记录类型 由两个字符组成,描述了该条记录的可能类型(从S0至S9); (2)记录长度 是对应于2byte十六进制数的一对ASCII字符,表示该条记录后续字符对的个数; (3)地址 由4个~8个字符组成,也是由十六进制值翻译得到的ASCII字符,给出数据字段将存放在存储器中的地址; (4)数据 由每2byte十六进制值翻译得到的成对的ASCII字符,这些十六进制数值可能是存放在存储器中的数据,或者是描述信息; (5)校验和 它们所对应的十六进制数值是根据除记录类型之外的其他字段字符成对累加之和求反所得; (6)换行符 每条记录都由换行符终止。针对不同的目标器件,可能每条记录的结束符不尽相同,设计中用传输程序来提供一致的换行符。 所有的SRecord文件都是以类型为S0的记录作为首条记录,这条记录在数据字段中给出文件的信息,包括路径、版本号等,这些信息是供阅读的,将不被存放到存储器中。SRecord文件的中间记录可能是类型为S1、S2或S3的记录,其地址字段分别对应2、3、4byte地址,因而主要区别在于寻址空间的不同。SRecord文件以S7、S8或S9类型的记录作为末条记录,除了地址字段长度不同外,它们都给出了程序执行的起始地址,并都不含数据字段。
3.1.2SRecord文件典型格式 (1)DSP56858的SRecord文件典型格式文件含有1条S0记录,3条S3记录和1条S7记录。 S0记录:记录3类型S0,记录长度0C表示后续有12(0x0C)个ASCII字符对; 首条S3记录:记录类型S3,记录长度25表示后续有37(0x25)个ASCII字符对; S7记录:记录类型S7,记录长度05表示后续有5(0x05)个字符对。 (2)HCS12的SRecord文件典型格式文件含有1条S0记录,1条S1记录,两条S2记录和1条S9记录。 因寻址空间不同,HCS12的SRecord文件采用了与DSP56858的SRecord文件不完全相同的记录类型,但两者的分析方式基本相同。 S0记录:记录长度为6(0x06)个字符对,4个字符的全零地址字段; S1记录:记录长度为35(0x23)个字符对; S2记录:记录长度为21(0x15)个字符对; S9记录:记录长度为3(0x03)个字符对。 3.1.3SRecord文件合并机制 由此可以看出,由于两个文件采用了不同的记录类型,并不能通过简单插入生成新的SRecord文件。但由于SRecord文件格式简单明晰,只要在VC环境下编写的一个简单的标准C程序,利用ANSIC提供的文件操作的库函数,按照以下方法就能够实现将两个SRecord文件整合成1个新的HCS12的SRecord文件。 对DSP56858的SRecord文件按记录逐条处理:读出数据字段,再根据欲插入的HCS12Flash的地址,加上相应的类型、长度和地址字段,最后计算校验和,就得到了符合HCS12的SRecord文件格式要求的记录。注意每条记录之后都应带有相应的行结束符。这样组装后的记录就可以插入到原始HCS12SRecord文件相应位置。利用CodeWarriorIDE集成的烧片器下载合成后的SRecord文件后,能够从实时调试环境中观察到DSP56858源程序代码已经被成功地写入指定的HCS12Flash空间。 3.2源码串口下载机制 合并机制虽然方法简便,但要求两种芯片的集成开发环境都能够提供符合标准的由目标代码生成的文件。采用串行通信接口(SCI)下载源码的机制,克服了这个不足。 3.2.1技术方法 (1)在DSP56858的源程序中加入1段程序(下称源码输出程序),这段程序负责读取DSP程序存储器中的程序代码(包含了源程序和输出程序),并将读到的程序代码传给HCS12。 (2)同时,HCS12中运行的接收程序将接收从SCI接口收到的数据,并将其写入指定的Flash地址单元。 (3)在硬件上,将两方的SCI接口相连,配置统一的波特率,按照1位起始位、8位数据和1位终止位、无奇偶校验的数据格式传送即可。 (4)源码输出程序只在输出过程中工作,运行源程序时这段代码应当被屏蔽。因此,可利用通用输入/输出接口(GeneralPurposeInput/Output)的1个引脚信号作为判断标志,根据该信号位高电平或低电平决定这段程序是否工作。
3.22下载流程 在软件上,为了保证DSP传出的程序代码能够被HCS12快速、准确无误地接收,需要制定1个简单的传输协议以支持双方通信。 3.2.3重传和校验机制 在收发过程中加入了重传和校验的机制。双方预约1个控制字符用于通信同步。DSP56858作为数据输出方应尽量降低额外开销以保证数据输出的效率,设计方案中控制字由HCS12主送,DSP56858等待接收。DSP56858每传送定长的程序代码后,再送出该段代码之和,继而进入等待状态;同时,HCS12在每接收到定长代码后,根据同样的方式计算出代码之和,如果与收到的和值相等,就可以将这段代码写入Flash。不论比较结果是否相等,HCS12都会将求得的和值发送给DSP56858,以通知DSP56858继续传送,DSP56858将根据HCS12回传的和值决定是否重传下1段代码。这个重传、校验机制虽然简单,但实验结果表明能有效地避免收发过程中可能出现的出错、丢失、错误蔓延等情况。 3.2.4Flash的编程和擦除 虽然相对于EPROM,Flash存储器的系统灵活性和可*性都显著提高了,但是对Flash的操作仍有严格的步骤要求。只有遵循这些要求,才能正确地编程和擦除Flash。 (1)首先配置Flash的时钟在150kHz~200kHz之间,考虑时钟同步对于函数定时精度的影响,当总线时钟低于1MHz时,将无法对Flash进行任何编程或擦除操作。 (2)配置完成后,根据HCS12技术规范所提供的编程或擦除Flash的命令状态对Flash进行操作。值得注意的是,编程或擦除Flash有严格的时序要求,必须完全依照规范给出的顺序读写Flash寄存器,这个过程不能插入任何其它指令,更不能够被其它动作中断。因此,HCS12的SCI接口最好是以查询方式工作,若以中断方式工作,则要注意必须在操作Flash之前关闭中断。
4 DSP56858自引导模式及其应用 DSP56858片内有一个系统集成模块(SystemIntegrationModule),负责部分系统控制功能,包括产生时钟、复位信号,控制上电模式、自引导模式,外部I/O控制等功能。为满足不同的使用要求,DSP56858提供了7种自引导模式,每次复位后会根据用户选择的模式启动。不同模式的区别主要在于程序导入的接口和程序导入后存放的存储器。 (1)自引导模式0是外部存储器导入模式(BootstrapFromByte-WideExternalMemory)。通过片选信号选择外部存储器,导入后的程序装载在片内程序RAM中执行。该模式需先由头数据来同步引导程序和外设(头数据包括需载入程序的总长以及在RAM中存放该程序的起始地址),然后以每次16比特程序字的方式装载程序代码。完成导入后,自引导程序将跳转到起始地址执行导入的程序。请注意:如果模式配置不对或者传输格式不符合要求,自引导程序将跳入一个无限循环的过程。 (2)自引导模式1是从SPI接口导入程序(BootstrapFromSPI),默认使用通过SPI从串行的EEPROM中导入程序,置入片内程序RAM中,该模式兼容ATMEL的AT25xxx和AT45xxx系列的串行EEPROM。但是即使没有符合要求的ATMEL系列的芯片,也同样可以利用现有芯片仿真ATMEL芯片的工作方式,通过SPI上传程序。自引导程序在这种模式下,将本方的SPI配置成主(master)工作方式,因而要求另一方的SPI工作在从(slave)的方式下。其硬件连接如图2所示。
图2 硬件接口 为确定芯片类型,自引导程序会先以500kHz左右的频率发送一定量的空字符,然后要求接收到ASCII字符“BOOT”,若接收正确,自引导程序将认为外部是ATMEL小AT25xxx系列的EEPROM。否则,自引导程序会再以同样频率发送定量空字符,若此时能正确收到“BOOT”字符,那么就认为是ATMEL大AT25xxx系列的EEPROM。如果前两者都不是,则自引导程序将以20MHz的频率,按照上面同样的方式判断是否会是ATMELAT45xxx系列的EEPROM。因此,即使没有ATMEL符合要求的芯片,但只要能按照自引导程序要求的方式发送头数据,就可以仿真成AT25xxx或AT45xxx系列的芯片,利用这种自引导模式工作。 模式2是正常扩展模式(NormalExpandedMode)。 模式3是开发扩展模式(DevelopmentExpandedMode)。 模式2和模式3都是自引导程序直接跳转到外部程序存储器去运行。 模式4是通过单选通主机的导入模式(BootstrapFromHostPort-SingleStrobeClocking)。 模式5是通过双选通主机的导入模式(BootstrapFromHostPort-DualStrobeClocking)。 模式4和模式5都是通过不同类型的主机并行导入程序的。
模式6是通过SCI接口导入程序(BootstrapFromSCI)。根据自引导程序的要求,将HCS12SCI的波特率配置成38400bps,数据格式为1bit起始位、8bit数据位和1bit终止位,不含奇偶校验位,无硬件流控。这种模式的使用比较简单,和模式0一样,在传送程序之前,先传送头数据以同步双方通信,然后传送程序字。
5结束语
根据实际情况,从以上两个步骤的不同方法加以组合,选择最优且最可行的方案,可以很好地解决无ROMDSP芯片的自引导问题。本文提出的虽然是双芯片系统,无ROMDSP芯片的自引导解决方案,但同样可作为单芯片系统中解决类似问题的参考方案。
|