APP下载

基于TMS320C6670 Boot Loader的研究与实现

2016-03-24陈发堂肖冬冬薛尧

中国新通信 2016年4期

陈发堂 肖冬冬 薛尧

【摘要】 软件在DSP上开发成熟后,都需要脱离仿真器运行,实现自动加载功能。众所周知,多核DSP的启动与单核启动区别很大,涉及到二级引导和核间中断的问题,针 对于此,本文基于TMS320C6670 四核DSP,对多核程序加载进行了研究与实现。为了快速生成特定格式的多核镜像,设计了一系列TI工具链用于添加SPI启动参数表、DDR3启动表、程序入口地址以及完成程序内容格式的转换,最终实现了DSP的SPI Nor flash 多核启动

【关键词】 多核启动 数字信号处理器 核间中断 启动表

一、引言

在DSP程序的调试阶段,可执行文件存放在主机的硬盘上,调试时,由JTAG仿真器将可执行代码加载到DSP的内存中调试。但是,当软件成熟之后准备上市时,嵌入式设备要脱离调试用的PC独立工作。这时,可以根据应用以及系统设计不同,选用不同的启动(boot)模式,将可执行代码加载到DSP的内部RAM中运行[1]。

本文主要介绍了c66x系列DSP多核启动的若干关键技术与基于Nor flash的SPI接口的加载原理,并设计了一系列工具来实现多核启动。

最终提供一个方便易行的基于工具链使用的多核加载方案。该方案很好地解决了c66x 的多核加载,具有一定的参考意义。

二、多核启动的若干关键技术

2.1启动参数表

对于C66x系列DSP,固化在ROM上的BootLoader程序会初始化core0最后的0xD23F 个字节,存储启动过程中的配置信息,即启动参数表,决定启动的流程[3]。

2.2 Boot magic 地址

每个核都有一个Boot magic地址,存放环境入口点_c_ int00()的地址。对于多核DSP,存在局部地址和全局地址之分,每个核的Boot magic地址为本地L2地址的最后一个字。当检测到Boot magic 地址为0时,核处于空闲态,直到地址值不为0时,相应核跳出空闲态,转到Boot magic 地址处执行应用程序。

三、TMS320C6670多核启动原理

多核启动一般都需要进行二次启动,在启动设计过程之前,需要将启动代码写入片外ROM的前1KB内存中,程序代码写入片外ROM的1KB之后的内存。由于只有核0具有执行一级引导的权限,在启动过程中,核0负责程序代码加载,其它二级核都执行空指令,处于等待中断的状态。

四、基于SPI NOR FLASH的多核启动实现

4.1多核镜像生成

在CCSv5 集成开发坏境下,多核DSP的每个

核经过编译链接后都会生成一个独立的.out可执行文件。该文件包含重定位、符号表等一系列辅助信息,格式解析复杂,一般不直接烧写到Flash上,而是让其经过一系列工具链的转换,刷选掉无用信息,保留有效信息。

多核镜像由启动参数表和启动数据两部分组成,其中,启动参数表为Boot Loader提供了当前启动需要知道的一些信息。通过工具链的使用,将启动参数表放置于启动数据的前面,从而构成一个完整的多核镜像。C6670多核镜像生成流程如图1所示。

4.2 多核镜像烧写

对于多核镜像的烧写,我们使用TI提供的MCSDK下的Nor-Writer程序。Nor-Writer工程中有个nor_writer_input.txt文档,当我们把多核镜像.dat文件放到Nor-Writer工程目录下后,我们只需将filen_name改成我们需要烧写的镜像名,start_addr改成DDR开始运行的地址,然后运行程序,便可实现多核镜像的烧写。

五、结论

本文基于TI的4核DSP TMS320C6670,对多核启动原理进行了深入研究,并给出了一种基于工具链使用的SPI多核启动设计与实现。该研究使得复杂的多核启动过程清晰明了,工具链的使用也大大降低了开发难度,对多核启动的开发可以提供一定的参考。

参 考 文 献

[1] 牛金海.TMS320C66x KeyStone 架构多核DSP入门与实例精解[M]. 上海:上海交通大学出版社,2014.

[2] 陶永燕.基于TI C66 多核 DSP 技术的研究与应用[D].北京:北京邮电大学,2012.

[3] 苏保禹.基于TI-C6678的多核DSP图像处理系统研究[D].中国科学院研究生院(光电技术研究所), 2014.