TI DSP c6000的二次boot
C6000EMIF接口EEPROM启动的二次bootloader
140lab of uestc
一, 二次boot概述 C6000有3种启动方式
? 直接执行方式。这种方式中,DSP采用map0储器映射方式,即地址0x00000000指
向片外的存储器。上电后DSP直接从地址0x00000000开始执行。注意这种模式并不适用于TMS320C621x/C671x系列的芯片。
? 主机启动模式。主机通过DSP的HPI口搬移代码和启动DSP。
? EMIF接口的并行ROM启动模式.上电后DSP通过EMIF接口装载代码, 在上述各种启动模式中,ROM启动模式实现简单,速度较快,在实际系统应用中也最为广泛,本文会主要介绍这种启动模式,
当采用EMIF接口的并行ROM启动模式时,大多数6000系列的DSP芯片只能从CE1向地址0处搬移1K bytes的代码,那么当应用程序代码超过1K bytes时就需要两次的代码搬移,这就是所说的二级启动过程。简单过程如下。
1, DSP上电或硬复位时通过EDMA自动地从EMIF接口的BE1空间搬移的1k
bytes的二次boot代码到片内ram的0x00000000到0x00000400空间
2, 搬移完成后自动跳转到地址0x00000000处执行搬移进来的二次boot代码。 3, 二级boot代码将应用程序从外部存储器搬移到内部RAM中,并且在代码搬移
完后跳转到程序入口地址c_int00。
当需要访问外部存储器时,二级启动代码应包括对EMIF寄存器的配置,这些寄存器包括EMIF_GCR,EMIF_CE0,EMIF_SDCTRL及EMIF_SDRP,对这些寄存器的配置可根据原理图的设计及程序的要求用户自己进行编写。对于有内部PLL控制时钟的DSP6000芯片,TI推荐在二级启动代码中配置PLL以提高启动的速度。
二次 boot 代码长度必须小于1k个bytes,这使得我们很难用c语言来编写二次boot代码。因为初始化c运行环境需要空间不小。
二,二次boot 的关键。
? 二次boot代码的编写和boot table 的设置。boot table的作用是告诉二次boot代码
所搬的各个程序段的大小,在片外rom中的源地址和在片内ram中的目的地址。 ? 存储器的安排。包括片内ram和片外eeprom。
1,二次boot代码可以直接使用TI 的6713dsk的boot代码。我简单的修改了一下,主要是将代码合成了一个文件,代码在后面的附录中。可见Boot table 放在改boot代码的最后一块。
2,对于boot table,TI的技术文档(参考1)中提出了3中配置方法,最简单的一种是用hex6x的-boot 选项生成boot表。但需要要注意的是这种方法要求hex6x 的version 至少是4.33版本,低版本中这boot选项时无效的。现在我们教研室的版本都还不够。以后要用这种方法具体可以参考文献1。还由一种采用link来作的,也需要的ccs版本至少2.2。我使用的是三种方法,这种方法通过检查.map文件来手工写boot表。
Boot表的格式如下:
copyTable:
.word 第一个段的大小
.word 第一个段在片外eeprom中的起始地址 .word 第一个段在片内ram中的起始地址 .word 第二个段的大小
.word 第二个段在片外eeprom中的起始地址 .word 第二个段在片内ram中的起始地址 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
.word 0 .word 0 .word 0
依次写入各个段的参数。最后是以三个0的word表示表的结束。 这种boot表的格式时TI推荐的,方便和以后的boot软件兼容 3 存储器的安排。
通过cmd文件来设置,如下一个例子(适用于6713) MEMORY { BOOT : origin = 0x00000000, len = 0x00000400 /* L2. for custom boot code*/ IRAM : origin = 0x00000400, len = 0x0003fc00 /* L2. for non.custom boot code*/ SDRAM : origin = 0x80000000, len = 0x10000000 /* EMIF . CE1 . SDRAM */ FLASH_BOOT: origin = 0x90000000, len = 0x00000400 /* Flash . for custom boot code */ FLASH_REST: origin = 0x90000400, len = 0x0001FC00 /* Flash . for application code */ }
SECTIONS { .boot_load : LOAD = FLASH_BOOT, RUN = BOOT .vectors : LOAD = FLASH_REST, RUN = IRAM .text : LOAD = FLASH_REST, RUN = IRAM .const > FLASH_REST .cinit > FLASH_REST .bss > IRAM .far > IRAM .stack > IRAM .sysmem > IRAM }
一般来所凡是已初始化的代码段,比如text,.vector段都需要烧到片外eeprom中,上电时通过2次boot装入到片内ram中运行。不过像.const 和cinit等的段虽然也是已初始化段,但因为这些代码段只在程序刚开始的时候运行一次,所以可以只放在片外的 eeprom中
就行了。
从上可见,在片内的ram和片外的eeprom的开始都专门给出了1k bytes的空间给.boot.load程序段。以保证正常的boot过程。
需要说明的是当采用如上的cmd文件来biuld工程时,是无法用仿真器加载代码的。所以在进行应用程序功能测试时不能使用这个 cmd文件。可以用一个对应的段定义。Memory定义不用修改。 SECTIONS { .boot_load > BOOT .vectors > IRAM .text > IRAM .const > IRAM .cinit > IRAM .bss > IRAM .far > IRAM .stack > IRAM .sysmem > IRAM }
等完成功能测试后,将sections改为如前的定义方式再biuld一次。
三,具体的超作步骤。 这种方法适合于非BIOS的应用,对于BIOS的应用参考文献一。
1, 编写和测试DSP应用程序。
2, 在工程中加入boot.asm。根据不同的平台修改对EMIF接口和
PLL的配置。根据前面所诉的方法修改cmd文件的MEMORY和SECTION定义。
3, 选择生成map文件,build 工程。检查map文件。
在map文件中可找到各个段的大小,在eeprom中的位置和在ram中的位置。 根据map文件的信息,填写boot.asm中的boot table。
4,填完boot table 后,重新build代码。生成.out文件.
5 , 用hex6x将coff格式的.out文件转化为16进制文件.hex. hex6x 的cmd文件如下(适用于6713)
input_file_name.out /* name of input file*/ -map hex.map /* create a hex map file */ -a /* create ASCII image */ -image /* Create a memory image (no discontinuities) */ -zero /* reset address origin to 0 for output file(s) */ -memwidth 8 /* Width of ROM/Flash memory */ ROMS {
FLASH:org=0x90000000,len=0x20000,romwidth=8,files={out_file_name.hex} }
6, 对应ccs buld的map文件检查hex6x的map文件。如过没错误,用烧写器 将生成的*.hex文件烧入eeprom.。
四,一些补充说明。 如果不考虑效率的话,可以直接在片内ram中化分为boot,code 和data区,将除了boot_load的所有的代码都放到code区去,那么boot table中可以简单到如下只有一项。的形式
copyTable: .word code的大小 .word code在片外eeprom中的起始地址 .wor …… 此处隐藏:3023字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [资格考试]机械振动与噪声学部分答案
- [资格考试]空调工程课后思考题部分整合版
- [资格考试]电信登高模拟试题
- [资格考试]2018年上海市徐汇区中考物理二模试卷(
- [资格考试]坐标转换及方里网的相关问题(椭球体、
- [资格考试]语文教研组活动记录表
- [资格考试]广东省2006年高应变考试试题
- [资格考试]LTE学习总结—后台操作-数据配置步骤很
- [资格考试]北京市医疗美容主诊医师和外籍整形外科
- [资格考试]中学生广播稿400字3篇
- [资格考试]CL800双模站点CDMA主分集RSSI差异过大
- [资格考试]泵与泵站考试复习题
- [资格考试]4个万能和弦搞定尤克里里即兴弹唱(入
- [资格考试]咽喉与经络的关系
- [资格考试]《云南省国家通用语言文字条例》学习心
- [资格考试]标准化第三范式
- [资格考试]GB-50016-2014-建筑设计防火规范2018修
- [资格考试]五年级上册品社复习资料(第二单元)
- [资格考试]2.对XX公司领导班子和班子成员意见建议
- [资格考试]关于市区违法建设情况的调研报告
- 二0一五年下半年经营管理目标考核方案
- 2014年春八年级英语下第三次月考
- 北师大版语文二年级上册第十五单元《松
- 2016国网江苏省电力公司招聘高校毕业生
- 多渠道促家长督导家长共育和谐 - 图文
- 2018 - 2019学年高中数学第2章圆锥曲线
- 竞争比合作更重要( - 辩论准备稿)课
- “案例积淀式”校本研训的实践与探索
- 新闻必须客观vs新闻不必客观一辩稿
- 福师大作业 比较视野下的外国文学
- 新编大学英语第二册1-7单元课文翻译及
- 年产13万吨天然气蛋白项目可行性研究报
- 河南省洛阳市2018届高三第二次统一考试
- 地下车库建筑设计探讨
- 南京大学应用学科教授研究方向汇编
- 2018年八年级物理全册 第6章 第4节 来
- 毕业论文-浅析余华小说的悲悯性 - 以《
- 2019年整理乡镇城乡环境综合治理工作总
- 广西民族大学留学生招生简章越南语版本
- 故宫旧称紫禁城简介




