前往顾页

TMS320C5509经由过程外部FLASH实现自引导启动

时候:2012-11-14 00:10来源:知行网www.zhixing123.cn 编辑:麦田守望者

弁言
所谓自引导启动(Bootload)就是指由DSP体系上电以后,体系可以在离开仿真环境之下,经由过程外部装备,将法度装在入外部存储器当中,实现法度的引导启动。TMS320C5509(以下简称5509)供应了丰富的引导体例,包含直接外部存储器体例引导、主机接口(EHPI)体例引导、标准串行体例引导和USB体例引导等多种体例。如许的好处是:可以将法度存储于非易失的外部存储器当中,而在运行时加载到相对高速的外部存储器当中;同时可以为用户供应多种引导体例,使得DSP的利用更加矫捷。这里首要会商的是采取FLASH存储器体例对法度实现引导。
基于5509采取FLASH的字引导体例首要有两种:一种是将法度写入FALSH以后在FLASH当中直接运行,这类体例速率较慢;另外一种体例是在上电以后,将FLASH中的法度写入外部的RAM然后运行,这类体例可以供应更高的速率,因此获得遍及的采取。
传统的自引导启动体例需求用户更具不合的引导体例建立呼应的引导表,进而建设呼应的.cmd文件,最后经由过程HEX55东西烧写入FLASH当中。这类体例不但倒霉于用户把握,并且也有必然的范围性,是以这里介绍的体例是经由过程仿真环境下对FALSH的烧写实现自引导启动。

1. 启动体例的挑选
介绍自启动体例之前写申明一下5509供应的FLASH直接引导启动机制。第一步请求肯定启动形式为外部存储器形式,5509采取上电以后对通用IO口GPIO0~3的辨认来实现对引导体例的挑选。详细的引导可以见表1。

表1 引导体例挑选
IO.0 IO.2 IO.2 IO.1 C5509A C5509 引导体例
0 0 0 0 - - 保存
0 0 0 1 有 有 McBSP0 24位串行EEPROM
0 0 1 0 有 有 USB
0 0 1 1 有 - I2C EEPROM
0 1 0 0 - - 保存
0 1 0 1 有 有 EHPI(多种形式)
0 1 1 0 有 有 EHPI(非多种形式)
0 1 1 1 - - 保存
1 0 0 0 有 有 外部16位异步存储器
1 0 0 1 有 有 McBSP0 16位串行EEPROM
1 0 1 0 有 - 8位并行EMIF
1 0 1 1 有 有 16位并行EMIF
1 1 0 0 - - 保存
1 1 0 1 - - 保存
1 1 1 0 有 有 McBSP0 16位标准串行
1 1 1 1 有 有 McBSP0 8位标准串行

是以,如果采取FLASH引导,该当将GPIO0~3设置为1000,如许在上电以后,法度从0x400000的地点开端运行。是以只需在0x400000的地位写入呼应的法度便可以实现自启动。如许的启动在硬件上需求经由过程5509的CE1来选通外部映照到0x400000~0x800000的FLASH来实现,

 

2. FLASH直接运行
先介绍直接将法度在FLASH当中运行。起首由用户体例主法度工程,因为需求在0x400000的地位运行法度,是以需求将主法度的内存建设(.cmd)文件的法度地点设置在0x400000~0x800000以内。可惜的是,在emulator形式下如许的建设将会导致链接呈现问题,是以主法度必须在simulator形式下完成。比方将主法度装入0x400010,编译并链接以后,主法度装入假造的内存当中,然后利用CCS(Code Composer Studio)环境中自带的data save东西将内存中的数据保存上去。
第二个需求用户体例的工程是烧写FLASH的工程,即建立一个emulator工程,先load上述保存的数据进入内存,然后烧写入FLASH当中,必须重视的是此时的烧写地点该当和下面的simulator所建设的地点分歧,这里就是0x400010。值得存眷的问题是如许并没有实现自启动,因为上电以后,初始运行地点0x400000的地位并没有有效数据,是以必须在此FLASH烧写工程中,在0x400000的地位写入跳转指令,将法度计数器指针(pc)指向FLASH中主法度的入口地点。跳转指令的汇编代码是B 40xxxx,呼应的机器码是6A40xxxx,详细地讲,就是在0x400000和0x400001的地点中烧写入6A40xxxx的数据,详细的40xxxx为主法度的入口地点。
完成了上述事情以后,自启动的事情就完成了。上电以后的运行环境是起首检测启动依次,肯定为外部FLASH引导,然后法度从0x400000履行跳转法度,跳转到已烧写入FLASH的主法度的入口地点,从而开端履行主法度本身。

 

3. 高速片内RAM运行
然后介绍上电以后将法度从FLASH中装入高速片内RAM运行,如许可以进步法度的
履行速率。起首由用户体例主法度工程,与下面不合的是此法度为emulator形式,装入内存以后,不竭电,履行第二个FLASH烧写法度,将内存中的法度烧写进入FLASH当中。
第三个法度在simulator形式下完成,摹拟上电运行后将FLASH中的法度读回片内高速RAM,并且在法度的最后需求加上法度计数器指针(pc)跳转指令,跳转到主法度的入口地点。最后需求再次体例一个烧写法度,将此法度写入FLASH呼应的地位中。第三个和第四个法度之间经由过程data save/load来实现数据保存。两次烧写法度的FLASH地点不克不及混叠。一样要重视的是需求在0x400000的地位烧写入跳转指令的机器码,跳转到法度三的入口地点。详细的体例在下面已详细描述,这里不再赘述。
上电以后的运行环境是起首检测启动依次,肯定为外部FLASH引导,然后法度从0x400000履行跳转,跳转到保存在低速FLASH里的法度入口地点,接着在FLASH中履行读出法度,写回高速片内RAM中,写完以后履行跳转指令,将法度计数器指针(pc)指向已进入内存中的主法度的入口地点,从而最后开端履行主法度本身。此入口地点即为第一个工程的入口地点。

 

结语
  实现体系自启动并不是DSP的关头技术,但是倒是离开仿真环境,实现上电体系主动运行所必须的步调,也是DSP初学者的难点之一,本文所供应的体例以FLASH读写为核心,可以较为简朴地实现体系自启动,希望可以对读者有举一反三的感化。

------分开线----------------------------
标签(Tag):FLASH FLASH实例教程 flash技能 flash源代码 flash根本教程
------分开线----------------------------
保举内容
猜你感兴趣