本发明属于SoC(片上系统)芯片启动技术领域。本发明涉及一种SoC启动方法和装置,尤其涉及一种基于eFuse模块的SoC启动方法和装置。
背景技术:
在消费电子的SOC中,由于产品的多样化,导致Boot ROM(on-chip bootrom)所支持启动的启动方式也越来越多,量产烧写方式也多种多样了,比如EMMC Boot、NAND Flash Boot、SPI NOR Flash Boot等等。随着启动方式的增多,如果还是采用传统轮询每种启动方式则会影响启动时间。于是采用多个专用GPIO(General Purpose Input Output ports)引脚通过外接上下拉电阻,使该引脚呈现高低电平状态,通过多个GPIO引脚的电平状态组合来选择不同启动方式,但随着SOC的集成度越来越高,面积越来越少,GPIO的资源已经变的非常的宝贵了。
于是出现采用GPIO复用的方式,这种方式在不影响启动速度的情况下,即节省若干个GPIO,也满足可以选择不同的启动方式。但这种技术方案存在一些问题,由于这些被复用的这若干个引脚,它们是通过外接上下拉电阻,使该Pin呈现高低电平状态,因此只有一些低速IO口,并且要求外接上下拉电阻对其输入输出没有影响或者影响很小的IO口才能复用。
存在一种需求,要求为Boot ROM提供灵活方式以选择不同启动项的,同时不必占用IO口资源,并且不会引发额外问题。
技术实现要素:
本发明提出一种SoC启动方法和装置,能够为片上系统和Boot ROM提供灵活的启动方式,同时减少了启动所占用的资源。
本发明采用的技术方案一方面提供了一种基于eFuse模块的SoC启动方法,其技术特点在于包括以下步骤:
A、在eFuse模块存储器中分配至少一组字节位;
B、在分配的所述至少一组字节位中写入与启动方式关联的编号字段;
C、在启动SoC时,通过BOOT ROM读取eFuse模块中的所述编号字段;
D、根据所述编号字段选择对应的启动项来执行。
作为该技术方案的进一步改进,其中所述步骤A包括:在eFuse模块存储器中,分配至少一组常规使用的字节位用于储存所述编号字段;配置其余有效的字节位作为备用。
优选地,其中所述步骤A还包括:如果当前待分配的一组字节位是否已使用,则标记该组字节位为无效,并分配一组备用的字节位作为新的一组常规使用的字节位。
作为该技术方案的进一步改进,其中所述步骤B包括:优先在常规使用的一组字节位中写入与启动方式关联的编号字段。
优选地,其中所述步骤B包括:在无效的一或多组字节位中,配置无效识别位或写入无效识别字段。
更优选地,其中所述步骤B还包括:在分配的至少一组常规使用的和/或备用的字节位中,配置启动参数字段和/或纠错字段。
作为该技术方案的进一步改进,其中所述步骤C包括:优先在常规使用的一组字节位中读取与启动方式关联的编号字段。
作为该技术方案的进一步改进,其中所述步骤D包括:对通过BOOT ROM读取的所有编号字段和相应的组号进行遍历;根据预定义的启动项与编号字段的对应表以及遍历的编号字段,解析启动项;根据所述组号的顺序,依次配置启动项的执行次序。
优选地,其中所述步骤D还包括:根据所述启动参数字段为相应的启动项配置启动功能;和/或根据所述纠错字段为相应的启动项配置纠错功能。
本发明的技术方案另一方面为一种基于eFuse模块的SoC启动装置,包括:分配模块,用于在eFuse模块存储器中分配至少一组字节位;烧写模块,用于在分配的所述至少一组字节位中写入与启动方式关联的编号字段;eFuse读取模块,用于在启动SoC时通过BOOT ROM读取eFuse模块中的所述编号字段;启动执行模块,用于根据所述编号字段选择对应的启动项来执行。
优选地,所述基于eFuse模块的SoC启动装置可以在任何公知的计算设备中通过软件系统实施,也可以在Boot ROM的软件系统中实施。
根据本发明另一方面技术方案,可以是一种基于eFuse模块的SoC启动装置,包括用于储存指令的存储器和处理器,所述处理器执行该指令以运行以下步骤:在eFuse模块存储器中分配至少一组字节位;在分配的所述至少一组字节位中写入与启动方式关联的编号字段;在启动SoC时,通过BOOT ROM读取eFuse模块中的所述编号字段;根据所述编号字段选择对应的启动项来执行。
本发明的有益效果为:不需要进行大量的压力性测试,减少测试成本、缩短开发时间。不需要占用IO口资源;启动方式实现简单、操作方便,基本不增加芯片成本。
附图说明
通过参考以下结合附图对所采用的优选实施例的详细描述,本发明的上述目的优点和特征将变得显而易见,其中:
图1是根据本发明的方法的总体流程框图;
图2是在一实施例中根据本发明方法的通过eFuse模块选择Boot ROM启动方式的示意图;
图3是在一实施例中根据本发明方法的烧写启动方式编号的流程图;
图4是在一实施例中根据本发明方法的使Boot ROM读取eFuse模块中启动方式编号得流程图。
具体实施方式
图1所示为根据本发明的基于eFuse模块的SoC启动方法的总体流程框图。
在步骤A中,在eFuse模块存储器中分配至少一组常规使用的字节位用于储存所述编号字段,配置其余有效的字节位作为备用。如果当前待分配的一组字节位是否已使用,比如已经写入了某启动方式的编号字段但该启动方式需要变更,则标记该组字节位为无效,并分配一组备用的字节位作为新的一组常规使用的字节位。
在步骤B中,在分配的所述至少一组字节位中写入与启动方式关联的编号字段,其中优先在常规使用的一组字节位中写入与启动方式关联的编号字段;在无效的一或多组字节位中,配置无效识别位或写入无效识别字段。优选地,在分配的至少一组常规使用的和/或备用的字节位中,配置启动参数字段和/或纠错字段。例如,可以在一组字节位中存放一些配置参数,为固化程序配置多个参数、备份纠错代码,从而增强代码的兼容性、灵活性;还可以在其中存放固件的版本号,防止固件版本回退的功能。
在步骤C中,在启动SoC时通过Boot ROM读取eFuse模块中的所述编号字段。优选地,优先在常规使用的一组字节位中读取与启动方式关联的编号字段。具体地,首先将需要最先启动方式的编号字段写入eFuse模块中的常规使用的一组字节位中,然后再按照待其他启动项的顺序,依照eFuse模块中的字节位组号逐一写入与其他启动方式关联的编号字段。
在步骤D中,使Boot ROM根据所述编号字段选择对应的eFuse模块中启动项来执行。具体地,对通过BOOT ROM读取的所有编号字段和相应的组号进行遍历;根据预定义的启动项与编号字段的对应表以及遍历的编号字段,解析启动项;根据所述组号的顺序,依次配置启动项的执行次序。还可以根据所述启动参数字段为相应的启动项配置启动功能,和/或根据所述纠错字段为相应的启动项配置纠错功能。
图2是在一实施例中根据本发明方法的通过eFuse模块选择Boot ROM启动方式的示意图。图2还示出了利用eFuse模块、eFuse存储器和Boot ROM控制模块之间通过总线的连接关系。Boot ROM控制模块在SoC开机运行Boot ROM的时候,读取eFuse模块中若干个bit的逻辑状态组合,并根据会根据所述若干个bit的逻辑状态组合,选择相应的启动代码来执行以选择不同的启动方式。eFuse模块,用于在编号字段中储存不同启动方式的编号。eFuse控制器模块,用于在上电之后的启动过程中来进行相关启动配置。
在本实施例中,在量产烧写过程中在eFuse模块存储器(eFuse ROM)中烧写入不同的启动方式的编号字段。根据本实施例,可以预先为每一种启动方式分配一一对应的编号,如表1所示。
表1.eFuse模块存储器的编号字段与启动设备之间的关系表
假设分配16个bit的efuse作为启动方式的编号的字段,会把这16个bit分成4组,每4个bit为1组,每组一共有16种组合。第1组作为常规使用,后面的3组作为备份组,由于efuse还有将0编程为1后,无法再改为0的特性,所以当客户需要修改启动方式时,选择备份组进行使用。如表2所示:
表2.eFuse中Boot ROM配置的字段
在量产烧写的过程中,会把编号写到eFuse模块的编号字段,但需要注意如果写后面3 组编号时,需要把前面若干组的编号写成0xF(即是使该组的编号无效),然后再写该组的编号。但最后一组(即第四组)时,它不允许写无效。
如图3所示为烧写启动方式编号过程的流程,对eFuse ROM量产烧写过程包括:
步骤S1、从固件中获取组号group_id和编号boot_id;
步骤S2、group_id为1则读取eFuse模块编号字段中的第1组的编号id,若groud_id为n(n>1),则把前n-1组的编号写成0xF(即该组的编号无效);
步骤S3、eFuse模块编号字段中第1组的编号id为0则写boot_id到eFuse字段中的第1组,若不为0则结束;eFuse模块编号字段中的第n(n>1)组的编号id为0则写boot_id到eFuse模块编号字段中的第n(n>1),若不为0则结束。
如图4所示为Boot ROM读取eFuse模块中启动方式编号的过程的流程图。根据本发明,当SoC(比如是系统级CPU等)上电时,Boot ROM会从第1组开始读取字段编号,如果第1组编号有效的话,则选择对应的启动方式进行启动,如果无效的话,则需要读取下一组的编号,并在该组编号有效时选择对应的启动方式进行启动。
本发明的技术方案另一方面为一种基于eFuse模块的SoC启动装置,包括:分配模块,用于在eFuse模块存储器中分配至少一组字节位;烧写模块,用于在分配的所述至少一组字节位中写入与启动方式关联的编号字段;eFuse读取模块,用于在启动SoC时通过Boot ROM读取eFuse模块中的所述编号字段;启动执行模块,用于根据所述编号字段选择对应的启动项来执行。优选地,所述基于eFuse模块的SoC启动装置可以在任何公知的计算设备中通过软件系统实施,也可以在Boot ROM的软件系统中实施。
本发明具有以下的优点:
1.不需要进行大量的压力性和稳定性测试,减少测试成本、缩短开发时间;
2.不需要占用IO口资源;
3.实现简单,操作方便,基本不增加芯片的成本;
4.还可以增加芯片的安全性,比如用若干bit来控制某些模块的敏感区域进行访问。
以上所述,只是本发明的较佳实施例而已,本发明并不局限于上述实施方式,只要其以相同的手段达到本发明的技术效果,都应属于本发明的保护范围。在本发明的保护范围内其技术方案和/或实施方式可以有各种不同的修改和变化。