扩展串行引导代码量的方法

文档序号:6407178阅读:187来源:国知局
专利名称:扩展串行引导代码量的方法
技术领域
本发明涉及通信和计算机技术领域,尤其涉及扩展串行引导代码量的方法。
背景技术
处理器的引导代码存储器(Boot Rom,一般包括EEPROM和Flash两种)通常分为并行和串行两种,对于功耗、体积受到一定限制的产品,采用串行BootRom是一种较好的选择。串行Boot Rom一般采用标准的SPI(Serial PeripheralInterface)接口,该接口为四线连接方式,其中包括时钟信号CLK、片选信号CS、主器件数据输出信号MOSI和主器件数据输入信号MISO,如图1所示。串行Boot Rom具有一些通用的操作指令,比如读指令、写指令、写使能和写保护等,在主器件进行相应操作之前必须先发送相应的操作指令。
每次上电引导(Boot)时,处理器运行内部固化的初始引导程序,该引导程序负责通过SPI接口把Boot Rom中的代码搬移到处理器的RAM存储空间,搬移完毕后程序指针跳转到存储代码的RAM空间首地址,开始运行用户的应用程序,Boot过程结束。处理器内部固化的引导程序和存放引导程序的ROM空间对用户来说通常是不可以修改和访问的。
SPI接口的读取时序如图2所示首先处理器输出串行Boot Rom的读命令比如0x03,然后输出将读取的外部Boot Rom的地址,之后处理器就通过MISO信号通道读取所指定地址空间的数据。
处理器在Boot时,从外部Boot Rom读取的数据格式通常由对应的处理器编译器生成,程序代码通常格式如图3所示。
首先,处理器从Boot Rom的0x00位置读取程序代码有效标志和部分初始化参数,通常为几个字节,设为n1,读入后进行解析,获得相关信息,比如当前数据块是否有效,真正的程序代码的起始地址或相对偏移量,程序块的大小等等。如果有效标志指示有效,则把读取地址指针偏移n1读取代码块首部,设该首部为n2个字节,读入后分析该段代码的属性,然后把指针偏移n2,根据代码段长度的指示读取代码段,并根据代码块内部存放首地址指示把代码块搬移到内部的地址空间中。
通常编译器所生成的代码块有多块,块数和源代码中链接文件的定义有关。处理器会根据代码块的属性来判断该代码块是否是最后块,从而判断出是否继续读取代码块。
由于现有的处理器Boot时,对外部Boot Rom空间的寻址多为8或16bit地址,因此整个处理器代码量的大小就受到限制(处理器的运行代码都是从BootRom搬入的,所以Boot Rom的寻址空间直接决定了处理器代码量的大小)。如采用16bit寻址,则整个Boot Rom中仅能存放64KB的代码。对于比较复杂的系统,代码量会大大超出64KB,如果选择更大容量,如选择24bit地址的串行Boot Rom来存储代码,则处理器将无法进行正常的Boot过程。

发明内容
本发明提供一种扩展串行引导代码量的方法,以解决现有技术中因处理器引导时对寻址位数的制约而导致引导程序代码量受到限制的问题。
为解决上述问题,本发明提供以下技术方案一种扩展串行引导代码量的方法,包括下述步骤处理器执行初始引导程序,从串行存储器中导入寻址位数大于所述初始引导程序的二次引导程序;执行所述二次引导程序,由该二次引导程序控制处理器从串行存储器中导入指定程序;处理器执行所述指定程序完成相应操作。
其中所述指定的程序为应用程序或控制程序。当所述指定程序为控制程序时,处理器执行该控制程序进行控制判断,并根据判断结果执行相应操作。
所述控制判断是指判断应用程序是否需要更新;如果是则先更新应用程序,然后导入更新后的应用程序并执行,否则,直接导入应用程序并执行。
通过在内部程序存储区的首地址存放跳转指令,使处理器在完成初始引导程序后跳转到二次引导程序的主体代码开始运行。
根据初始引导程序在引导时对代码的解析过程确定所述二次引导程序在串行存储器中的存储格式。
本发明在现有技术的基础上,通过多次引导来实现处理器和大容量BootRom的匹配,打破了处理器本身一些固有Boot方式的制约,从而扩展了软件代码的存放空间。采用本发明,在Boot时可以根据需要对Boot Rom的寻址空间进行扩展,不必局限于处理器本身对Boot Rom的支持方式,因而使系统设计的灵活性大大增强。


图1为处理器和串行Boot Rom的连接示意图;图2为SPI读取数据的时序图;图3为程序代码的存储格式示意图;图4为初始引导程序读取代码有效标志字的时序图;图5为初始引导程序读取代码首部的时序图;图6为初始引导程序读取代码块的时序图;图7为本发明的流程图。
具体实施例方式
本发明是采用多次引导(Boot)的方式,即通过二次Boot程序来接管初始Boot程序的工作,由二次Boot程序来完成用户应用程序的Boot过程;而二次Boot程序可以用较多地址位的方式寻址Boot Rom,从而扩展处理器Boot时对外部BootRom的寻址能力。
本实施例以支持16bit Boot寻址的处理器和24bit串行Boot Rom连接为例来对本发明进行说明。
二次Boot程序完全按照初始引导程序Boot时对代码块的解析过程进行编写和存储,并且该代码在运行时是采用24bit的地址来对Boot Rom进行寻址。二次Boot程序在链接文件中指定该代码的主体运行在处理器的L2或者外部RAM存储区,在内部程序存储区的首地址存放跳转指令,跳转到二次Boot的主体代码。由于固化初始Boot程序在完成之后是跳转到内部程序存储区的首地址,因此这样既可以保证在初始Boot后二次Boot程序可以正常运行,也可以保证二次Boot程序本身在完成二次Boot后可以释放其自身所占用的地址空间,不影响用户应用程序的运行。
把二次Boot程序编译生成二进制文件,按照下列步骤烧入Boot Rom中(1)首先在Boot Rom的0x00处写入n1-1个程序代码有效标志字,去除了标志字中的第一个字节,该字节为0。由于这时Boot Rom需要24bit地址,这样可以保证处理器在以16bit方式寻址时可以正确的读取n1个标志字。时序如图4所示。
(2)在Boot Rom的0xn1 00处写入n2-1个代码块首部,去除了首部中的第一个字节,该字节为0。这样可以保证处理器在16bit方式寻址时可以正确读取n2个首部字节,时序如图5所示。
(3)在Boot Rom的0x(n1+n2)00处写入n3-1个字节的代码块,去除了首部中的第一个字节,该字节可以通过在源代码首行加空指令(NOP)来保证为0。这样可以保证处理器在16bit方式寻址时可以正确读取n3个代码块,时序如附图6所示。
重复上述(2)、(3)步骤,把二次Boot代码全部写入Boot Rom中,则可以保证仅支持16bit寻址进行Boot的处理器可以在初始Boot时完成对二次Boot程序的导入。
把最终的软件包代码烧入Boot Rom的0x(n1+n2+n3)00以后的地址段,该烧入段的首地址需要和二次Boot程序中Boot时指定的外部Boot Rom首地址相一致。
参阅图7所示,处理器处理的具体过程如下步骤10处理器上电后开始初始引导程序。
步骤20初始引导程序以16bit方式寻址,从串行Boot Rom中将二次Boot程序导入内存。
步骤30在导入完二次引导程序后,处理器执行内部程序存储区的首地址中存放的跳转指令,跳转到二次Boot程序并运行。二次Boot程序以24bit寻址的方式,完成应用程序的导入。
步骤40执行应用程序,完成相应的操作。如初始化处理器通信接口、开始和外部通信、执行相关的信号处理操作等。
步骤50完成引导。
二次引导程序导入的程序还可以是控制程序代码,控制程序在完成控制判断和执行相应操作后,实现对应用程序的再次Boot,从而实现多次Boot。
控制程序可以用来判断是否更新应用程序代码,如果是则将新的应用程序代码更新原来的应用程序代码,然后再将更新后的代码导入内存并执行,如果不需要更新则直接将应用程序导入内存并执行。
本实施例虽以支持16bit Boot寻址的处理器和24bit串行Boot Rom连接为例进行说明,但本发明的应用并不仅限于此,如支持8bit Boot寻址的处理器和16bit串行Boot Rom连接等同样可以采用本发明的方法进行串行引导代码量的扩展,其原理与上述相同。
权利要求
1.一种扩展串行引导代码量的方法,其特征在于该方法包括下述步骤处理器执行初始引导程序,从串行存储器中导入寻址位数大于所述初始引导程序的二次引导程序;执行所述二次引导程序,由该二次引导程序控制处理器从串行存储器中导入指定程序;处理器执行所述指定程序完成相应操作。
2.如权利要求1所述的方法,其特征在于,所述指定程序为应用程序或控制程序。
3.如权利要求2所述的方法,其特征在于,当所述指定程序为控制程序时,处理器执行该控制程序进行控制判断,并根据判断结果执行相应操作。
4.如权利要求3所述的方法,其特征在于,所述控制判断是指判断应用程序是否需要更新;如果是则先更新应用程序,然后导入更新后的应用程序并执行,否则,直接导入应用程序并执行。
5.如权利要求1至4任一项所述的方法,其特征在于,通过在内部程序存储区的首地址存放跳转指令,使处理器在完成初始引导程序后跳转到二次引导程序的主体代码开始运行。
6.如权利要求5所述的方法,其特征在于,在二次引导程序中指定程序的主体运行在处理器的二级缓存或者外部RAM存储区。
7.如权利要求5所述的方法,其特征在于,根据初始引导程序在引导时对代码的解析过程确定所述二次引导程序在串行存储器中的存储格式。
8.如权利要求1所述的方法,其特征在于,所述指定程序在串行存储器中存储的首地址与所述二次引导程序中指定的外部引导程序存储器的首地址相同。
全文摘要
本发明公开了一种扩展串行引导代码量的方法,以解决因处理器引导时对寻址位数的制约而导致引导程序代码量受到限制的问题;所述方法为处理器执行初始引导程序从串行存储器中导入寻址位数大于所述初始引导程序的二次引导程序;执行所述二次引导程序,由该二次引导程序控制处理器从串行存储器中导入指定程序;处理器执行所述指定程序完成相应操作。
文档编号G06F9/445GK1716196SQ20041004838
公开日2006年1月4日 申请日期2004年6月30日 优先权日2004年6月30日
发明者李连峰, 陶小平, 张铭虎, 汪秦岭 申请人:大唐移动通信设备有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1