最新TMS320C5410烧写Flash实现并行自举引导 精品.docx
《最新TMS320C5410烧写Flash实现并行自举引导 精品.docx》由会员分享,可在线阅读,更多相关《最新TMS320C5410烧写Flash实现并行自举引导 精品.docx(6页珍藏版)》请在冰豆网上搜索。
最新TMS320C5410烧写Flash实现并行自举引导精品
TMS320C5410烧写Flash实现并行自举引导
摘要介绍在3205410环境下对29200存储器进行程序烧写,并且实现了3205410上电后用户程序并行自举引导。
关键词29200并行自举引导自举表
是一种可在线进行电擦写,掉电后信息不丢失的存储器。
它具有低功耗、大容量、擦写速度快等特点,并且内部嵌入算法完成对芯片的操作,因而在数字信号处理系统中得到了广泛的应用。
本文通过一个完整的实例,介绍29200存储器的烧写方法,实现3205410以下简称5410上电后用户程序的并行自举引导。
129200存储器
11存储器简介
29200是公司生产的存储器,其主要特点有3单电源供电,可使内部产生高电压进行编程和擦除操作;支持单电源存储器标准;只需向其命令寄存器写入标准的微处理器指令,具体编程、擦除操作由内部嵌入的算法实现,并且可以通过查询特定的引脚或数据线监控操作是否完成;可以对任一扇区进行读、写或擦除操作,而不影响其它部分的数据。
本文中128×16位29200映射为5410的片外数据存储空间,地址为08000~0,数据总线16位,用于16位方式的并行引导装载。
128的用32地址分四页进行访问,上电加载程序时使用的第3页。
12存储器的操作命令
向存储器的特定寄存器写入地址和数据命令,就可对存储器编程,但要按一定的顺序操作,否则就会导致存储器复位。
由于编程指令不能使"0"写为"1",只能使"1"变为"0",而擦除命令可使"0"变为"1",所以正确顺序是先擦除,后编程。
下面就介绍几个常用的操作命令编程命令、擦除命令、读数据命令、复位命令。
①编程命令。
该命令向的指定地址中写入数据,需要四个总线周期,前两个是解锁周期,第三个是建立编程命令,最后一个周期完成向编程地址中写入编程数据,如表1所列。
表1编程命令
周期1解锁2解锁3建立4编程地址0555020555编程地址数据005500编程数据
由于向每个编程地址写入数据都需要四个周期,所以在循环写时使用宏比较简单。
的首地址为08000,故偏移地址0555对应物理地址就为08555。
编程程序如下
_,;单一周期编程的写命
;令宏,是编程地址,是编程数据
1
,1;1指向编程地址
,
,*1;把编程数据放入1的编程地址中
#12
1
_,;编程宏,是编程地址寄存
;器,是存放编程数据的寄存器
_#8555,#0;周期1解锁
_#82,#055;周期2解锁
_#8555,#00;周期3建立
,;周期4编程
,;把寄存器中数据放入
;寄存器的地址中
#12
_,;检测编程是否正确,见
;的操作检测
_是实现一个周期编程的写命令宏,而_是完成对指定地址编程的四个完整周期。
表2擦除命令
周期1解锁2解锁3建立4解锁5解锁6片擦除6扇区擦除地址0555********扇区地址数据00550800055010030
②擦除命令。
该命令有片擦除和扇区擦除两种,都需要6个总线周期,前两个解锁周期,第三个建立周期,四、五两个解锁周期,最后是片擦除或扇区擦除周期,如表2所列。
一旦执行编程或擦除命令后,就启动的内部编程或擦除算法,自动完成编程或擦除操作。
擦除程序如下
_;擦除宏
_#8555,#0;周期1解锁
_#82,#055;周期2解锁
_#8555,#080;周期3建立
_#8555,#0;周期4解锁
_#82,#055;周期5解锁
_#8555,#010;周期6片擦除
#8555,3
#010,
,*5
_*3,*5;检测是擦除结束,见的
;操作检测
③读数据命令。
上电或内部编程、擦除操作结束后就进入读数据状态,写入要读取的地址即可读出该地址的数据。
④复位命令。
它使存储器复位,进入读数据状态,向任何一个地址写入数据00就能使存储器复位。
在进行编程、擦除之前,都应先复位,在编程或擦除等正常操作中出
现错误时也要复位。
复位程序如下
_
_#8001,#00
;向8001写入00使复位
#12
13的操作检测
内部的编程或擦除算法可自动完成编程或擦除操作,但我们必须了解其内部的操作检测机制,以便知道操作是否完成或正确。
常用检测的状态位有跳变位6、超时标志位5、数据查询位7和引脚。
检测的方法有三种。
第一种是判断引脚的状态,在编程、擦除或擦除挂起操作过程中,引脚一直为"0",操作完成后变为"1"。
第二种是检测跳变位6,在编程或擦除时对任何地址进行连续的读均引起6连续跳变,直至操作结束才停止跳变。
最后一种是使用数据线的7、57位在编程或擦除过程中输出的数是写入该位数据的反码,当操作完成时输出才变为写入该位的数据;5的状态为"1"时表示操作超时,此时应再读一次7的状态,若7输出仍不是写入的数据,则操作失败,复位,其流程如图1所示。
检测程序如下
_,;检测宏程序。
是编程地址寄存
;器,是存放编程数据的寄存器
_?
1
,;获取写入的数据
#00,;取被写入数据的7~0
,;读被烧写地址的数据
#00,;取7~0
,;保存
,-7,;读7状态
,-7,;是否是反码?
_?
;7不是反码而是写入数据表示操作成功
,#20
_?
;5=1表示操作超时
,;再读被烧写地址的数据
#00,
,-7,
,-7,
_?
;7不是写入数据,表示操作失败
_?
_;复位
_?
1
25410的自举引导
脱离仿真器独立运行程序一般有两种方式一种是上电后用户程序直接在存储器中运行,这种运行速度比较慢;另一种是上电或复位后将用户程序从存储器引导到高速数据存储器中运行,此方法最常用,可以较低的成本实现高速的运行。
为了实现这个过程就必须运用自举引导功能。
1自举引导
5410上电复位后,首先检查状态如果为高电平,说明处于微处理器工作方式,即从外部程序存储器080地址开始执行用户程序;若为低电平,说明被设置为微计算机工作方式,从片内的080地址开始执行程序。
080地址存放的是中断向量表,它实为一条分支转移指令0800,使程序跳转至0800执行自举引导程序。
是固化在芯片内中的一段程序代码,其功能是将用户程序从外部加载至片内或扩展的中,使其高速运行。
在搬运程序之前,首先完成初始化工作使中断无效,内部映射到程序数据区=1,对程序和数据区均设置7个等待状态等。
5410有以下几种自举引导方式主机接口、并行口816位、标准串行口0是16位引导模式,2是8位引导模式以及口816位自举引导方式。
2并行自举引导
这种方式是比较常用的一种,外部存储器的字宽为8位或16位。
在自举引导时,通过外部并行接口总线将这些代码从数据存储空间传送到程序存储空间,而且可以重新设置及寄存器的内容。
并行自举引导方式首先从地址为0的口读取自举表首地址的内容,如果此内容不符合8位或16位的引导方式,就从地址为0的数据存储器读取,进行8位或16位并行自举引导。
所以,在烧写数据的同时,也要在0烧入自举表的首地址。
引导流程如图2所示。
3建立自举表
自举表内容不仅包括欲加载的各段代码,而且包括各段代码长度、各代码段存放的目标地址、程序入口地址等信息。
若要完成自举引导功能,必须建立正确的自举表。
自举表可以由500格式转换器自动生成;也可以手动建立自举表,就是把被烧写的程序直接放在烧写程序中,根据被烧写程序的相关信息手动建立自举表。
35410烧写和并行自举引导
下面通过一个烧写实例,介绍怎样将用户程序烧写进,以及怎样手动建立自举表,并且脱离仿真器以并行自举引导方式使用户程序独立运行。
被烧写和烧写程序如下
""
002
0060
""
;自举表开始
10;16位自举标记
7;7个等待周期
0000;块转换寄
存器
0000;程序入口
0200;程序入口地址_
-
;程序块长度0116
0000;存放目标
0100;存放目标地址
;中断向量表开始地址
"";复位处跳转_
_;被烧写的主程序
#07,
#012,
;=01中断向量指针为100,指向目标地址,=0,=1,=0,=1,=1
;置低
;延时
;置高
6
#0090,6
_
#00
_,*6-
6
;被烧写的程序结束
20
8000
__;烧写程序开始
#00,
#07,
#0,
_;复位
_;擦除
;开始编程
_;复位
#8000,0;起始地址8000
,5;被烧写的源地址自举
;表首地址
#-,4
;写入011个字
_
_*0,*5;调入编程宏
*0+,
*5+,;完成0和5地址自动加1
_,*4-
#0,0;0指向数据空间的
;地址
,5
_*0,*5;向数据空间的
;地址写入自举表的首地址8000
被烧写的主程序是从_开始,一直到。
程序的主要功能是不断改变引脚的状态。
是中断向量文件的开始,在中断复位处放入一条跳转到_指令_。
__是烧写程序的开始,只要程序指针指向__,开始运行就可以完成对的烧写操作。
从自举表首地址08到0216存放的数据就是要写入的内容,从到的数据是自举程序从搬运到片内的程序,具体如下
008;自举表开始
0100;中断向量表首地址
0100_
;中断向量表的内容
0178
0200_
;主程序
0216
被烧写的程序只需一个段,根据以上信息就可以完成自举表的内容,如表3所列。
表1自举表
数据区地址内容含义80001016位自举标记80017800200080030000程序入口80040200程序入口地址80050123程序段长度80060000存放目标80070100存放目标地址8008273程序代码180090200程序代码2………………81100程序代码8110000结束………………8000自举表存放首地址
整个并行自举引导过程为5410上电复位后,判断=0处于微计算机工作方式,从片内的080处执行中断向量表的分支转移指令0800,使程序跳转至0800处执行自举引导程序。
自举引导程序完成初始化后,读取数据空间的0地址的内容,找到自举表首地址8000,从8000处开始读取内容。
首先,是16位自举标记10。
然后分别是寄存器及的内容,程序入口地址、代码段长
度、存放代码段的目标地址等信息。
最后,根据这些信息把的8008到811的程序搬运到片内的100开始的地址中,跳转至片内100、即为100、为0,开始执行用户程序,完成用户程序的并行自举过程。
结语
把程序烧写入后,复位5410,使其处于微计算机工作方式;使用示波器测试引脚,观察程序运行正确与否。
通过上述方法可完成5410对29200的烧写,很好地实现了5410上电后的用