打印

大容量无线传输技术中高性能DSP的启动方法

[复制链接]
939|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Plantt|  楼主 | 2019-1-2 12:06 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
大容量无线传输技术中高性能DSP的启动方法



摘要:大容量无线传输技术的实现依赖高性能数字信号处理器(DSP)。大多数 C6000系列DSP采用ROM (Flash) 启动方式。采用ROM启动方式时,C6000系列DSP在上电后会自动拷贝存储于 Flash中的 1K字节代码到内存中。然而 DSP的程序往往大于 1K字节,这时就需设计一个二级 bootloader来辅助完成程序的加载。本文设计并实现了一种 C6000系列 DSP的启动方法,重点研究了二级 bootloader的设计,如何将程序编译生成的目标文件转换成基于 Flash格式的文件,以及如何将基于 Flash格式文件烧写入Flash。实践证明,该方法性能稳定,可移植性好,具有较大的工程应用价值。
关键词:DSP;启动;二级 bootloader

1引言
在极低谱密度,高频谱利用率的大容量无线传输技术中,高速实时信号处理成为技术的关键。目前市场上,能满足对高速实时信号处理的需要有具有良好的可编程性的器件主要有DSP和FPGA。 TMS320C6000系列 DSP是 TI公司推出的一种高性能的数字信号处理器,包含定点和浮点两个系列,其中定点系列包括 TMS320C62xx和 TMS320C64xx,浮点系列包括TMS320C67xx。C6000系列 DSP有三种启动方式:
(1) 主机启动
如果选择主机启动模式,在复位信号结束后,DSP的CPU被内部“阻塞”而其他部分都被释放。在此期间,一个外部的主机在必要时可以通过主机接口初始化 CPU的内存空间,包括配置与启动相关的内部寄存器。一旦主机完成了所有必须的初始化,它必须将 HPIC寄存器的 DSPINT位置“1”来完成启动过程。在程序加载完后,CPU被从“阻塞”中唤醒,然后从地址 0处执行指令。在 CPU被唤醒后,CPU需要将 DSPINT位清零 。
       (2) ROM启动
如果采用 ROM启动模式,则 C6000系列的DSP(C621x/C671x/C64x)复位后自动从 CE1空间的起始处拷贝 1K字节的代码到内存空间。该拷贝过程由 EDMA完成,使用默认的 Rom时钟。在此过程中 CPU一直处于“阻塞”状态,直到拷贝完成后才被被唤醒,然后从地址 0处开始执行程序[1]。
      (3) 无启动 如果选择无启动模式,CPU复位后直接从地址 0处开始执行指令。 C6000系列 DSP的器件配置情况决定了选择的启动方式。具体来说就是 DSP的启动模式
管脚(boot mode pins)接上拉还是下拉电阻。以 C6416为例,BEA[19:18]是启动模式管脚,它们取不同的值(上拉电阻代表“1”,下拉电阻代表“0”)代表的含义如表 1-1所示:


如果 DSP的程序小于 1K字节,那么上述 ROM启动机制已经可以完成程序的加载。然而事实上大部分 DSP的程序会大于 1K字节,这时就需要创建一个特定启动程序来完成更多代码的加载。该特定启动程序又被称作二级 bootloader。
在需要二级 bootloader的程序中,这段特定启动代码通常驻留在 ROM存储器的起始位置以便在 DSP复位后能自动被加载到内存地址 0处。当 1K字节代码被加载完毕后,CPU开始从地址 0处执行,也就是执行二级 bootloader的内容。二级 bootloader的功能就是将程序的剩余部分拷贝到内存中。 2 启动方法的设计与实现
采用二级 bootloader的 DSP启动方法的实现大体分为四步:配置存储器;编写secondary bootloader代码;编译程序,转换目标文件的格式;将程序烧写进Flash。图 1为实施该启动方法的硬件平台示意图,其中 DSP的型号选择 C6416,Flash的型号选择AM29LV800B。


2.1 配置存储器

2.1.1 定义存储器分区
为了实现使用二级 bootloader的 ROM启动,需要将 Flash划分为 FLASH_BOOT,FLASH_REST两个区。这两个区分别存储由on-chip bootloader拷贝的程序段和由secondary bootloader拷贝的程序段。对于 BIOS程序,Memory段的定义在 MEM(Memory SectionManager)对象里。对于非 BIOS程序,Memory段定义在 linker commandfile中。一个 C6416的 Memory段定义的例子如下所示:
MEMORY
{ …
FLASH_BOOT: o = 0x64000000  l = 00000400h
FLASH_REST:  o = 0x64000400  l = 0000fc00h
}

2.1.2 COFF段的定位
DSP程序是以 COFF段的形式在内存中存放的。一个 COFF段就是一个代码或数据块,它在内存中占据连续空间。COFF段分为自定义段,初始化段和未初始化段三种。COFF段可以有各种属性,其中 load属性和 run属性跟 DSP启动有密切关系。Load属性指明段的存储地址,run属性指明段的执行地址。二级 bootloader负责将所有的段从 load地址拷贝到 run地址。例如:
.text: LOAD= FLASH, RUN= IRAM 表示代码段.text被存储在 flash中,DSP启动时二级 bootloader将该段拷贝到 IRAM中。

2.2 编写 Secondary Bootloader代码
对于C6416,外部存储器接口(EMIF)需要正确配置以后才可以访问外部存储器件。在这项工作完成后,二级bootloader应该将所有的初始化段从它们的load地址拷贝到run地址,之后再跳转到_c_int00,也即是程序入口点。Secondary Bootloader用汇编语言编写,因为此时 C环境尚未建立。
二级 bootloader必须知道所有初始化段的大小,在 Flash中存储的位置以及应该被加载到何处才能进行正确的拷贝。事实上,二级 bootloader通过读取段拷贝表获得上述信息。本文第三部分详细说明了有关段拷贝表的内容。
完成二级 bootloader代码的编写后,应将它添加入工程,与工程的其他代码一同编译链接生成.out文件。

2.3 转换目标文件的格式
编译链接生成的是.out格式文件,然而 Flash一般接收的是 ASCII格式的文件 [3]。CCS附带的工具 hex conversion utility可将.out文件转换为 ASCII格式的.hex文件,Hex6x以命令行文件的形式执行。Hex命令行文件中,首先指明输入文件(.out),输出文件的格式和 ROM的大小及类型,以及哪些段需要被放在 ROM中。一个 Hex命令行文件的例子如下所示(注释内容用“/*”和“*/”括起):
-a /*输出文件采用ASCII格式*/
-image /*镜像模式*/
-memwidth 8/*ROM数据宽度 8bit*/
ROMS
{
FLASH: org = 0x64000000, len=0x100000, romwidth = 8, files = {.\rom_boot.hex}
} SECTIONS /*列出所有需要固化在 Flash中的 COFF段*/

2.4将程序烧写进 Flash
将 2.3节生成的 ASCII文件烧写进 Flash可以使用 CCS自带的 FlashBurn工具。FlashBurn是一个带图形界面的软件,它首先将一个称作FlashBurn TargetComponent (FBTC)的程序下载到 DSP内存中,通过与 FBTC的实时数据交换完成对 Flash的擦除编程等操作。针对不同的硬件(DSP,Flash型号)修改 FBTC是该方法的关键。所需修改处包括 Flash的基地址,大小,及读写命令字等。 3 段拷贝表
二级 bootloader使用一个段拷贝表(section copy table)进行段的拷贝。段拷贝表包含每个需要拷贝的段的必要信息,如段的 load地址,段的 run地址,段的大小。段拷贝表被插入在 secondary bootloader的末尾。 生成段拷贝表的方法有两种:
1)使用 hex conversion utility的-boot选项
在 2.3节中我们讨论了程序文件格式的转换和 hex命令行文件,事实上 Code Composer Studio自带的工具 hex conversion utility提供了一种更为方便的生成段拷贝表的方法,只要在 hex命令行文件中使用一些特殊的选项即可。特殊的选项有–boot, −bootorg和 –bootsection,这三个选项的含义分别如下:
-boot 使用该选项时 hex conversion utility将自动转换所有初始化段的格式 -bootorg 指明段拷贝表的地址 -bootsection 指明二级bootloader所在的段的名称
2)使用 linker选项(LOAD_START,RUN_START,SIZE)
涉及段拷贝表的生成的有三个选项:LOAD_START,RUN_START和 SIZE,可分别获得一个段的驻留地址,运行地址和大小。例如下列代码可获得 text段的驻留地址(存于_text_ld_start中),运行地址(_text_rn_start)和段的大小(存于_text_size)
.text : load = FLASH_REST, run = IRAM
LOAD_START(_text_ld_start),
RUN_START(_text_rn_start),
SIZE(_text_size)

4 结束语
        本文针对在极低谱密度,高频谱利用率的大容量无线传输技术研究中 C6000系列 DSP的应用程序大于1K字节的情况,提出了一种使用二级bootloader从Flash启动DSP的方法。该方法可应用于采用了 C6000系列 DSP的嵌入式系统中,不需要额外的 Flash编程器,具有广泛的适用性。
本文作者创新点:在二级 bootloader中引入段拷贝表用以控制程序加载过程,并利用CCS自身的编译功能获取段拷贝表的内容,该方法可提高效率且准确性高。

评论
dirtwillfly 2019-1-7 08:46 回复TA
感谢分享 

相关帖子

沙发
51xlf| | 2019-1-6 11:24 | 只看该作者
大容量无线传输 ?

使用特权

评论回复
板凳
i1mcu| | 2019-1-6 11:25 | 只看该作者
怎么编码的呢?           

使用特权

评论回复
地板
pmp| | 2019-1-6 11:25 | 只看该作者
无线技术呢?

使用特权

评论回复
5
mmbs| | 2019-1-6 11:25 | 只看该作者
这个看不懂呢

使用特权

评论回复
6
1988020566| | 2019-1-6 11:25 | 只看该作者
主要是DSP的启动吧

使用特权

评论回复
7
lzbf| | 2019-1-6 11:26 | 只看该作者
大容量无线传输技术有什么区别

使用特权

评论回复
8
houjiakai| | 2019-1-6 11:26 | 只看该作者
大多数 C6000系列DSP采用ROM (Flash) 启动方式?

使用特权

评论回复
9
youtome| | 2019-1-6 11:26 | 只看该作者
这个无线是什么技术

使用特权

评论回复
10
cemaj| | 2019-1-6 11:27 | 只看该作者
大多数 C6000系列DSP没有使用过

使用特权

评论回复
11
updownq| | 2019-1-6 11:27 | 只看该作者
这个看着给力呢。               

使用特权

评论回复
12
pmp| | 2019-1-6 11:27 | 只看该作者
怎么都是关于DSP的

使用特权

评论回复
13
51xlf| | 2019-1-6 11:27 | 只看该作者
使用的是什么芯片呢?

使用特权

评论回复
14
i1mcu| | 2019-1-6 11:27 | 只看该作者
多大的带宽呢?   

使用特权

评论回复
15
updownq| | 2019-1-6 11:27 | 只看该作者
CMD资料有吗?      

使用特权

评论回复
16
cemaj| | 2019-1-6 11:27 | 只看该作者
正常的可以使用DSP6678吧

使用特权

评论回复
17
youtome| | 2019-1-6 11:27 | 只看该作者
有具体的无线设计方案吗?        

使用特权

评论回复
18
houjiakai| | 2019-1-6 11:27 | 只看该作者
是内置的ROM吗?   

使用特权

评论回复
19
lzbf| | 2019-1-6 11:27 | 只看该作者
是信号的干扰问题吗

使用特权

评论回复
20
1988020566| | 2019-1-6 11:27 | 只看该作者
分析一下DSP启动就行。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

637

主题

901

帖子

4

粉丝