首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

DSP C6000系列的二次bootloader

DSP C6000系列的二次bootloader

T MS320C6000系列 DSP在片内固化了 Bootl oader代码 ,这段代码负责在DSP上电时从外部空间搬移
1 k (C621X /C671X)或者 64 k (C620X/C670X)的代码到地址 0处 ,然后从地址 0处执行。一般情况下 1 k
或者 64 k代码量对于一个真实的应用系统来说是远远不够的 ,这就需要进行二次 Bootl oader。


C6000 系列 DSP 提供 3 种引导模式, 无引导NO BOOT) ROM 引导( ROM BOOT) 和主机引导
HOST BOOT) , 具体用哪种模式由芯片外部引脚决定 无引导方式就是 CPU 上电后直接从存储器地
址0 处开始执行; ROM 引导方式是 DSP 在片内固化了引导代码, 负责在 DSP 上电时从外部空间 CE1 处
起始位置搬移1k 字节的代码到地址0 处, 然后从地址0 处执行; 主机引导是器件上电后, CPU 保持复位
状态, 外部主机将应用程序写到 DSP 内部, 并修改相应的寄存器内容, 完成后置位 DSPINT, 使 CPU 从地址0 处开始运行 第 1 种方式只能用于仿真运行; 第3 种方式一般用于存在主机的设备, 而在实际DSP 系统中最常采用的是第 2 种方式, 它只需要一片非易失性存储器就可方便实现程序配置。


The program, located in external ROM, is copied to address 0 by the direct memory access/extended direct memory access (DMA/EDMA) controller. On TMS320C62x/TMS320C67x, this boot process also lets you choose the width of the ROM. For the TMS320C620x/TMS320C670x, these values are expected to be stored in little-endian format in the external memory。


C620x/C670x: The DMA copies 64K bytes from CE1 to address 0, using default ROM timings. After the transfer, the CPU begins executing from address 0.


For the C620x/C670x the dedicated BOOTMODE[4:0] pins determine the device boot
configurations.


<IMG style="PADDING-BOTTOM: 0px; BORDER-RIGHT-WIDTH: 0px; LIST-STYLE-TYPE: none; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; PADDING-TOP: 0px; border-image: initial" title="DSP C6000系列的二次bootloader" name=image_operate_94541355202988976 alt="DSP C6000系列的二次bootloader" src="http://s10.sinaimg.cn/mw690/735f2910gd08cc6f42929&690" action-type="show-slide" action-data="http%3A%2F%2Fs10.sinaimg.cn%2Fmw690%2F735f2910gd08cc6f42929%26690" real_src="http://s10.sinaimg.cn/mw690/735f2910gd08cc6f42929&690">



在 ROM 引导时, DSP 上电复位后, 会通过EDMA控制器自动传输 flash 地址0 开始的1K 字节空间到DSP 内部的RAM 中, 传输完毕后CPU 复位,程序从地址0 处开始执行 而由于通常的用户程序都大于1K 字节, 所以需要进行二次引导, 将更大空间的程序搬移到 DSP 内部的 RAM 中 这样在上述传输的1k 字节空间就应存放一个二次引导程序,用于在 DSP 复位后将外部 flash 保存的应用程序搬移到内部来, 当二次引导完毕后, 程序即跳转到用户程序入口, 运行主函数。


For the C620x/C670x, the memory mapped at address 0 can either be the internal program
memory (MAP1) or the external memory space CE0 (MAP0), which may contain SDRAM,
synchronous burst static RAM (SBSRAM), or asynchronous memory, (DRAM/ASRAM).



我的理解是这样的


<IMG style="PADDING-BOTTOM: 0px; BORDER-RIGHT-WIDTH: 0px; LIST-STYLE-TYPE: none; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; PADDING-TOP: 0px; border-image: initial" title="DSP C6000系列的二次bootloader" name=image_operate_84711355129717450 alt="DSP C6000系列的二次bootloader" src="http://s5.sinaimg.cn/mw690/735f2910gd07b7f4a1624&690" width=690 height=329 action-type="show-slide" action-data="http%3A%2F%2Fs5.sinaimg.cn%2Fmw690%2F735f2910gd07b7f4a1624%26690" real_src="http://s5.sinaimg.cn/mw690/735f2910gd07b7f4a1624&690">



或者说在应用程序1里面包含一个擦写flash的函数,这样就能从CE1空间的首地址重新写起来了。
二次 Bootloader(secondboot)主要完成以下几项任务:
a) 配置 PLL,使系统工作在合适的频率。
b) 根据 Flash存储器和 S DRAM的时序要求配置
EM IF,使代码可以访问外存储空间的 Flash存储器和
SDRAM。
c) 按照链接文件定义的各个段的存储地址和运
行地址的要求 ,从 Flash存储器中搬移数据到 SDRAM
中。
d) 调用 C语言入口函数 _c_int00 ( ) ,开始 C语言
运行环境的初始化以及用户代码的执行。


前两个任务对系统运行的硬件环境进行了初始化 ,为任务 c的运行做好准备 ,任务 c是 Bootloader(secondboot)的核心 ,它负责具体的数据搬移工作。
从 Flash中搬移数据到 SDRAM中必须严格按照COFF文件格式进行。COFF文件格式是 TI公司 DSP
的通用文件格式 ,它把数据分成 3个类型的段:程序段、 已经初始化的数据段、 未初始化的数据段。其中 ,
程序段和已经初始化的数据段需要进行搬移 ,因此在cmd文件中需要给它们指定不同的存放地址和运
行地址。

返回列表