杨磊 张莹
摘要:介绍了TI生产的多核DSP TMS320C6678的启动过程,详细讲解了其内置启动程序RBL提供的几种常用启动方式,并从应用场景,硬软件设计等多个方面分析了各方式的优劣。提出了一种基于EMIF16接口的添加引导服务程序的多级引导模式,能够很好的扩展C6678二级引导程序的功能。
关键词:C6678;EMIF16;RBL;二级引导;自启动
中图分类号:TP13 文献标识码:A 文章编号:1007-9416(2019)01-0054-02
0 引言
在当今数字化不断加快的背景下,各信号处理系统对嵌入式实时性要求在进一步提高。TI推出的多核DSP TMS320C6678,具有8个运算核心,单核心主频最高可达1.25Ghz[1],无论是定点或浮点都具有较高的计算能力,并且TI为其配套了专用嵌入式实时操作系统SYS/BIOS,使该款芯片在软件设计上的难度大大降低。
在实际应用中,应用场景复杂多变,我们可根据其引导方式将其分成两类,一类需要主机将应用程序镜像下载到DSP内存并激活DSP运行用户程序。另一类是将用户程序烧写在外部存储器中,上电后由DSP的引导程序完成自加载启动[2-3]。C6678内置了一级引导程序RBL,RBL为用户提供了多种引导方式以满足其不同需求。但同时RBL程序相对简单,无法满足一些较为复杂的引导需求,这时往往需要二级引导程序的辅助。因此,C6678的启动引导过程常常是由一级和二级引导程序共同完成的。
1 C6678启动过程
RBL是厂家固化在其Boot Rom内的一段程序,其主要功能是通过判断DEVSTAT寄存器后三位BOOTMODE[2:0]的状态来决定运行的Boot代码。当C6678上电后,由内部的EDMA将Boot Rom中的代码搬运到Core0的内存中执行,完成一系列初始化工作。
C6678上电启动的大致过程可描述为:Core0运行RBL;RBL根据BootMode[2:0]运行相应一级引导程序;一级引导程序引导用戶程序启动,如有二级引导,则先引导二级引导程序,由二级引导程序引导用户程序启动。
2 C6678常用引导方式
2.1 PCIE Boot
PCIE[4]是一种高速串行总线的扩展标准,C6678集成了PCIE外设接口,PCIE启动过程可简单描述为:RBL检测到BootMode[2:0]的值并初始化PCIE模块;主机加载程序在PC与DSP间建立内存映射;主机通过PCIE总线将DDR初始化程序送入Core0 的L2内存并初始化DDR;主机将用户程序推送至DDR内存指定位置,并将入口地址写入magic地址[5],DSP跳转到magic内的入口地址执行,并通过IPC中断通知从核工作。
PCIE启动方式能够通过PC来控制DSP的启动过程,能很好地与以往采用X86架构的工控系统衔接。但该方式也有局限性,例如当一个系统中C6678节点较多时,PC无法为每个节点分配足够的映射空间,会导致主机系统无法启动。此时需借助二级引导程序来降低RBL中为C6678设置的BAR空间大小,以保证PC顺利完成PCIE枚举过程。
2.2 Ethernet Boot
以太网启动是主机将用户镜像通过以太网下载到C6678的内存中启动的一种方式。这里的主机可以是具有以太网功能的PC,ARM芯片或PowerPC芯片。以太网启动虽然通用性较强,但由TI提供的主机加载程序以及RBL内置的以太网加载代码功能较为简单,而操作起来又比较复杂。因此在实际应用中通常是通过二级引导程序来扩展以太网启动功能。
2.3 SRIO Boot
SRIO[6]是一种高速串行接口标准,与PCIE相比,灵活性更强。SRIO节点可通过对方的Srio ID直接读写其内存数据。SRIO引导过程可以描述为:RBL检测BootMode[2:0]的值并初始化芯片的SRIO模块,设置SRIO模块的Srio ID,连接模式等;主机将DDR初始化程序下载到Core0 L2内存中并完成DDR初始化工作;主机将用户程序镜像通过SRIO总线写入DSP的DDR内存中,并改写Magic地址;Core0根据Magic地址跳转执行用户程序,并通过IPC中断唤醒从核工作。
与PCIE引导相比,SRIO具有硬件结构灵活,软件设计简单等特点,但PC机并没有扩展SRIO接口,因此,通常是采用另一片C6678或PowerPC等集成了SRIO模块的芯片作为主机加载平台,这就在一定程度上限制了SRIO 启动方式的使用范围。
3 Nor Flash引导服务程序
与上面介绍的几种boot 方式不同,在大多工程应用中,我们需要将用户程序固化在EMIF16接口的外挂Nor Flash存储器中,由DSP自动完成加载过程。Nor Flash的特性决定了程序可直接在其中运行,但为了提高运行速度,往往将程序搬移到DDR内。TI的EVM板及薛志远等人[7]提出的方法都是在引导程序后直接添加用户代码,功能单一。
为解决普通Nor Flash引导功能单一的问题,我们在二级引导代码后增加了引导服务程序。此服务程序主要通过软件方式完成DSP参数设置,引导方式选择等功能。可在此服务代码中增加以太网启动,SRIO启动,PCIE启动以及自启动服务模块。增加了引导服务程序后的完整启动流程如图1所示。
通过引导服务程序,可以用串口更改保存在Flash保留区域并且与启动相关的环境变量。随后根据人为设置的环境变量选择启动加载模式,经测试,此方式大大增加了C6678启动方式的灵活性。
4 结语
通过对C6678启动方式的分析,本文中提出了一种基于EMIF16接口的引导设计方案,增加了引导程序的通用性。但是目前而言,DSP端的引导程序并不能做到完全复用,大部分是根据实际功能进行定制。因此,设计一个能够满足各种应用需求,类似于Uboot的开源DSP BootLoader将是今后研究的重点,这将大大降低DSP嵌入式软件的开发成本,促进DSP在我国军事和民用高速信号处理系统中的应用和发展。
参考文献
[1] 牛金海.TMS320C66x KeyStone架构多核DSP入门与实例精解[M].上海:上海交通大学出版社,2014.
[2] 孙红磊,蔡雨琦,施镇峰.TMS320C6678 DSP的加载引导研究[J].微型机与应用,2015,34(24):73-75.
[3] 黄震,刘亚斌.TMS320C6000系列DSP程序固化的研究[J].電子设计工程,2016,24(12):26-28+32.
[4] 乐亮.新一代多核DSP-TMS320C6678的PCIE接口驱动设计[A]. 第六届全国信号和智能信息处理与应用学术会议论文集[C],2012:4.
[5] 李飞平,卿粼波,滕奇志,舒君,何小海.基于TMS320C6678的多核程序加载研究与实现[J].电子技术应用,2015,41(03):31-34.
[6] 卢建章,刘洋.TMS320C6678中的高速串行接口RapidIO研究[J].单片机与嵌入式系统应用,2017,17(06):51-53.
[7] 薛志远,王春雷.基于TMS320C6678的多核Bootloader设计与实现[J].航空兵器,2017(04):80-83.
Abstract:The startup process of multi-core DSP TMS320C6678 produced by TI is introduced.,several common startup methods provided by its built-in startup program RBL are explained in detail,the advantages and disadvantages of various methods are analyzed from application scenarios, hardware and software design,etc.A multi-level boot mode of adding boot service program based on EMIF16 interface is proposed,which can extend the function of C6678 two stage boot program.
Key words:C6678; EMIF16; RBL; secondary boot; self-boot