一种带自检功能的SoC应用程序引导方法与流程

文档序号:12304948阅读:444来源:国知局
一种带自检功能的SoC应用程序引导方法与流程

本发明涉及一种带自检功能的soc应用程序引导方法,属于soc加载技术领域。



背景技术:

soc,systemonchip的简称,即片上系统。从狭义角度讲,它是信息系统核心的芯片集成,是将系统关键部件集成在一块芯片上;从广义上讲,soc是一个微小型系统,如果说中央处理器是大脑,那么soc就是包括大脑、心脏、眼睛和手的系统。国内外学术界一般倾向将soc定义为将微处理器、模拟ip核、数字ip核和存储器(或片外存储控制接口)集成在单一芯片上,它通常是客户定制的,或是面向特定用途的标准产品。由于其强大的可扩展性和高度的集成性,目前soc被广泛用于移动电子产品、智能设备和控制装置中。如果将soc比作躯干,那么运行于soc中的嵌入式软件即为片上系统的灵魂。soc借助运行于其中的应用软件来控制外设工作,进行逻辑运算从而完成其所担负的应用功能。本发明所述方法即为嵌入式软件的一部分,属于bootloader的一种。

在嵌入式操作系统中,bootloader是在操作系统内核运行之前运行。可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。在嵌入式系统中,通常并没有像bios那样的固件程序,因此整个系统的加载启动任务就完全由bootloader来完成。目前的bootloader程序在上电后直接将soc的flash空间中的应用程序目标码搬运到sram中,并从第一条语句开始执行。一旦出现故障,无法判别是由于应用程序实现不正确还是由于芯片本身存在故障,或者是由于程序搬运过程存在错误,造成后续排故成本高企。



技术实现要素:

本发明提出一种带自检功能的soc应用程序引导方法,在启动嵌入式应用程序运行前,对其运行的环境及其应用程序运行前的状态的正确性进行检查,从而提高了嵌入式应用程序运行的正确性和可靠性。

本发明目的通过如下技术方案予以实现:

提供一种带自检功能的soc应用程序引导方法,步骤具体如下:

(1)生成关于应用程序的在soc芯片中运行的应用程序目标码,计算应用程序目标码的crc校验码;

(2)将应用程序目标码和应用程序目标码的crc校验码打包;

(3)生成带自检功能引导方法的目标码,并将引导方法的目标码放于最前端,与应用程序目标码及应用程序目标码的crc校验码,一起构成带自检功能的可执行目标码;

(4)上传带自检功能的可执行目标码到soc的flash空间中。

优选的,所述步骤(3)中生成带自检功能引导方法的目标码具体包括如下步骤:

步骤3.1,初始化soc芯片;

步骤3.2,对应用程序运行的目标sram区进行工作正确性检查;

步骤3.3,将应用程序目标码部分从flash搬运到应用程序运行的目标sram中;

步骤3.4,读取搬运到sram中应用程序目标码,采取所述的步骤(1)中计算应用程序目标码的crc校验码的方法,计算sram中应用程序目标码的crc校验码;

步骤3.5,读取flash中的应用程序目标码的crc校验码,与步骤3.4中计算出sram中应用程序目标码的crc校验码进行比较,检查是否一致,若不一致则报警,若一致,则继续执行步骤3.6;

步骤3.6,运行应用程序。

优选的,步骤3.2中对应用程序运行的目标sram区进行工作正确性检查,即对每个sram区的存储单元,以双字为单位,进行正确性检查处理,检查处理包括如下步骤:

步骤3.2.1,依次向sram的存储单元中写入特定值;

步骤3.2.2,在每次写入特定值后,读取所写入的存储单元中的数据,检查读取数据与写入的值是否一致,若不一致,则sram存在故障,进行故障报警;若一致,则继续完成其他单元的检查,直至完成全部应用程序运行的目标sram区的正确性检查。

优选的,步骤3.2.2及步骤步骤3.5中的故障报警的方式包括通过soc的i/o或总线报警。

优选的,故障报警通过i/o输出故障波形或通过总线输出故障消息来完成。

优选的,步骤4中上传带自检功能的可执行目标码到soc的flash空间中的具体方法为:

步骤4.1,通过soc提供的程序上传接口,将可执行目标码上传至以soc上电后执行的第一条指令的地址为起始地址的flash地址空间中;

步骤4.2,传输完毕后,从flash地址空间中读取所上传的可执行目标码,并以字节为单位,与所上传的源目标码进行比较,若一致则结束传输,若不一致,则重新执行步骤4.1;如果两次传输失败则检查soc和上传硬件通路是否存在故障,排除故障后重新执行步骤4.1。

优选的,soc上电,执行flash地址空间中的带自检功能的引导程序。

优选的,soc芯片的型号为bm3101,soc的微处理器为leon2版本的sparcv8架构。

优选的,在sram自检的过程中,由于sram是检查的目标,因此在检查的过程中不使用sram区。

优选的,以sparc的指令集实现的sram自检功能的引导方法的目标码具体构造步骤如下:

步骤1.将待检查的sram区长度以立即数的形式放入l7寄存器中;

步骤2.将l3寄存器清零,作为当前已访问sram单元计数器;

步骤3.将l5寄存器设置为sram区的检查基址;

步骤4.判断是否sram区全部地址检查完毕,如果检查完毕进入步骤12,如果没有检查完毕进入步骤5;

步骤5.将当前地址值偏移量写入l4寄存器;

步骤6.向寄存器g1中写入当前检测值;

步骤7.向l5+l4指定的sram地址中写入g1寄存器中的值;

步骤8.读出l5+l4指定的sram地址中的数值到寄存器l2中;

步骤9.比较g1和l2中的值是否相等,如不相等则置o2寄存器为1,跳到步骤12,否则继续执行后续步骤;

步骤10.给寄存器l3中的值加一;

步骤11.比较l3的长度与l7中的长度是否相等,如果不相等,则跳转到步骤4,如果相等则执行步骤12;

步骤12.判断o2寄存器中的值是否为0,如果为0,则sram自检成功继续执行后续步骤,否则报故障,然后进入死循环等待状态;

步骤13.将应用程序目标码从flash区搬运到sram区域;

步骤14.计算sram中的目标码的crc校验码;

步骤15.比较sram区中应用程序目标码crc与flash中的应用程序目标码的crc校验码字段的一致性,若一致,则将sram中应用程序目标码首地址放入程序指令寄存器中,若不一致,则进行故障报警。

本发明与现有技术相比具有如下优点:

(1)本发明在程序上传至soc的flash空间的过程中进行了一致性校验,保证了flash空间中的程序的正确性。

(2)在程序由flash空间搬运到其运行的sram空间前,对sram空间进行功能性校验,保证了程序运行环境的正确性。

(3)在程序由flash空间搬运到其运行的sram空间后,对程序搬运的正确性进行校验,保证了本次上电运行程序与flash空间中的程序一致。

(4)本发明通过程序上传的一致性校验、搬运前、后的校验,保证了从源程序到每次运行程序的正确性,保证了运行环境功能完好,一旦程序发生故障,能够快速进行故障定位。

附图说明

图1为本发明带自检功能的soc应用程序引导方法流程图;

图2为本发明带自检功能的可执行目标码实施例结构示意图。

具体实施方式

结合图1,带自检功能的soc应用程序目标码生成及加载方法,步骤具体如下:

(1)生成关于应用程序的在soc芯片中运行的目标码,以字节为单位,计算crc校验码;

(2)将目标码和crc校验码打包,即将所计算出的应用程序crc校验码放于紧跟应用程序目标码的后面,占用一个字的空间;

(3)生成带自检功能引导方法的目标码,并将其放于应用程序目标码的前面,并与应用程序目标码及所计算出的crc校验码,一起构成带自检功能的可执行目标码,参见图2。

带自检功能的引导方法包括如下步骤:

步骤3.1,初始化soc芯片,包括存储器访问配置、cache访问配置,芯片工作频率、i\o接口、串口、总线等在内的运行最小配置集;

步骤3.2,对应用程序运行的目标sram区进行工作正确性检查;对应用程序运行的目标sram区进行工作正确性检查,具体为:对每个sram区的存储单元,以双字为单位,进行正确性检查处理,检查处理包括如下步骤:

步骤3.2.1,依次向sram的存储单元中写入特定值,包括0xffffffff,0xaaaaaaaa,0x55555555,0x00000000;

步骤3.2.2,在每次写入特定值后,读取所写入的存储单元中的数据,检查读取数据与写入的值是否一致:若不一致,则sram存在故障,进行故障报警;若一致,则继续完成其他单元的检查;报警的方式可通过soc的i/o、串行总线或其他扩展总线,如1553b总线等通过输出故障波形或故障消息来完成;

步骤3.3,将应用程序目标码部分从flash搬运到应用程序运行的目标sram中;

步骤3.4,读取搬运到sram中应用程序目标码,采取所述的步骤(1)处理中相同的方法,以字节为单位,来重新计算crc校验码;

步骤3.5,读取flash中的crc校验码,与步骤3.4中计算出的crc校验码进行比较,检查是否一致,若不一致则报警,若一致,则继续执行步骤3.6;

步骤3.6,利用跳转指令,跳转至应用程序的第一条指令处,运行应用程序。

(4)上传带自检功能的可执行目标码到soc的flash空间中,包括如下步骤:

步骤4.1,通过soc提供的程序上传接口,将可执行目标码上传至以soc上电后执行的第一条指令的地址为起始地址的flash地址空间中;

步骤4.2,传输完毕后,从flash地址空间中读取所上传的可执行目标码,并以字节为单位,与所上传的源目标码进行比较,若一致则结束传输,若不一致,则重新执行步骤4.1;如果两次传输失败则检查soc和上传硬件通路是否存在故障,排除故障后重新执行步骤4.1。

soc的工作过程如下:

soc上电,执行flash地址空间中的带自检功能的引导程序,执行步骤3.1-3.6,运行应用程序。

在一个实施例中,在型号bm3101的soc芯片中实现上述引导程序。该soc的微处理器为leon2版本的sparcv8架构。本实施例在引导程序进行自检时发现故障的情况下,采用1553b总线对故障信息进行发送。

本发明所构建的bootloader,即引导程序,是在加电后自动执行,完成cpu和相关硬件的初始化后,再将固化的嵌入式应用程序装在到内存中然后跳转到嵌入式应用程序所在的空间,启动嵌入式应用程序运行。

本发明所述的技术包括了一种引导程序的构建方法,运行逻辑。与其他传统的引导程序不同的方面在于,其在启动嵌入式应用程序运行前,对其运行的环境及其应用程序运行前的状态的正确性进行检查,从而提高了嵌入式应用程序运行的正确性和可靠性。

以下是以sparc的指令集实现的sram自检功能的具体实现方法,在自检失败后,构建1553b故障信息消息并放入rt对应子地址的发送缓冲区中,同时程序停止执行后续功能(进入死循环),等待排故。在sram自检的过程中,由于sram是检查的目标,因此在检查它的过程中不允许使用sram区,包括堆栈区。

带自检功能引导方法的目标码构造步骤如下:

步骤1.将待检查的sram区长度以立即数的形式放入l7寄存器中;

步骤2.将l3寄存器清零,作为当前已访问sram单元计数器;

步骤3.将l5寄存器设置为sram区的检查基址;

步骤4.判断是否sram区全部地址检查完毕,如果检查完毕进入步骤24,如果没有检查完毕进入步骤5;

步骤5.将当前地址值偏移量写入l4寄存器;

步骤6.向寄存器g1中写入当前检测值0xffffffff

步骤7.向l5+l4指定的sram地址中写入g1寄存器中的值;

步骤8.读出l5+l4指定的sram地址中的数值到寄存器l2中;

步骤9.比较g1和l2中的值是否相等,如不相等则置o2寄存器为1,跳到步骤24,否则继续执行后续步骤;

步骤10.向寄存器g1中写入当前检测值0xaaaaaaaa

步骤11.向l5+l4指定的sram地址中写入g1寄存器中的值;

步骤12.读出l5+l4指定的sram地址中的数值到寄存器l2中;

步骤13.比较g1和l2中的值是否相等,如不相等则置o2寄存器为1,跳到步骤24,否则继续执行后续步骤;

步骤14.向寄存器g1中写入当前检测值0x55555555

步骤15.向l5+l4指定的sram地址中写入g1寄存器中的值;

步骤16.读出l5+l4指定的sram地址中的数值到寄存器l2中;

步骤17.比较g1和l2中的值是否相等,如不相等则置o2寄存器为1,跳到步骤24,否则继续执行后续步骤;

步骤18.向寄存器g1中写入当前检测值0x00000000

步骤19.向l5+l4指定的sram地址中写入g1寄存器中的值;

步骤20.读出l5+l4指定的sram地址中的数值到寄存器l2中;

步骤21.比较g1和l2中的值是否相等,如不相等则置o2寄存器为1,跳到步骤24,否则继续执行后续步骤;

步骤22.给寄存器l3中的值加一

步骤23.比较l3的长度与l7中的长度是否相等,如果不相等,则跳转到步骤4,否则继续执行后续步骤;

步骤24.判断o2寄存器中的值是否为0,如果为0,则sram自检成功继续执行后续步骤,否则报故障,然后进入死循环等待状态;

步骤25.将应用程序目标码从flash区搬运到sram区域;

步骤26.计算sram中的目标码得crc(由于此时sram已检查完毕,算法可以使用sram区,可以用高级语言撰写);

步骤27.比较sram区中应用程序目标码crc与flash中的应用程序目标码的crc校验码字段的一致性,若一致,则将sram中应用程序目标码首地址放入程序指令寄存器中,否则报故障。

以上所述,仅为本发明最佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。

本发明说明书中未作详细描述的内容属于本领域专业技术人员的公知技术。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1