基于OTP的主控芯片的BOOT代码扩展方法技术

技术编号:21999683 阅读:20 留言:0更新日期:2019-08-31 05:15
本发明专利技术公开了一种基于OTP的主控芯片的BOOT代码扩展方法,所述主控芯片具有用于存储BOOT代码的ROM区、用于存储BOOT代码的补丁代码的OTP区以及RAM区,所述BOOT代码扩展方法包括以下步骤:S10、在所述主控芯片上电时,所述BOOT代码将所述OTP区中存储的补丁代码加载至RAM区;S12、所述BOOT代码将NAND FLASH中存储的运行代码加载至所述RAM区,其中,在加载所述运行代码时,当所述ROM区中相应的BOOT代码函数需要被替换时,根据对应的扩展代码函数的函数指针地址跳转到RAM中执行补丁代码,执行完毕之后跳回ROM区中继续执行BOOT代码。

BOOT Code Extension Method Based on OTP Chip

【技术实现步骤摘要】
基于OTP的主控芯片的BOOT代码扩展方法
本专利技术涉及一种基于OTP的主控芯片的BOOT代码扩展方法
技术介绍
移动存储产品U盘、SD卡等都是由主控芯片和NANDFLASH组成。其中主控芯片存储包括ROM区和RAM区。ROM区中存储着芯片生产时固化的BOOT代码。请参见图1及图2,主控芯片通过固化在ROM区中的Bootloader(引导加载)代码把存储在NANDFLASH中的运行代码(算法管理代码)加载到RAM区中,然后运行代码在RAM区中执行,实现对NANDFLASH的存储管理和上位机(HOST)的数据传输。由于NANDFLASH的更新换代,对应的操作可能会存在差异,所以ROM中固化的BOOT代码可能不能从新型的NANDFLASH中加载运行代码,导致主控芯片无法支持新型NANDFLASH。现有的方式是采用以下两种方法来解决上述问题:一、通过修改ROM代码解决,此时需要把主控芯片重新投产,生产周期和对新芯片的验证周期都会非常长。二、中国专利申请号CN201710469792公开的一种ROM代码补丁运行方法和系统中,是采用将补丁代码存放在EEPROM等非易失性存储其中,BOOT代码在上电时读取EEPROM,将补丁代码加载到RAM中,当运行到ROM中有需要被替换的代码,则跳转到RAM中运行补丁代码,补丁代码执行完成后跳转会ROM中继续执行。这种方式需要外挂EEPROM,增加额外的成本,同时芯片的面积会大幅增加,不能应用在SD卡等要求芯片面积小的产品。
技术实现思路
针对上述现有技术的不足,本专利技术所要解决的技术问题是:提供一种降低成本、减小芯片面积的基于OTP的主控芯片的BOOT代码扩展方法。为解决上述技术问题,本专利技术采用的一个技术方案是:提供一种基于OTP的主控芯片的BOOT代码扩展方法,所述主控芯片具有用于存储BOOT代码的ROM区、用于存储BOOT代码的补丁代码的OTP区以及RAM区,所述BOOT代码扩展方法包括以下步骤:S10、在所述主控芯片上电时,所述BOOT代码将所述OTP区中存储的补丁代码加载至RAM区;S12、所述BOOT代码将NANDFLASH中存储的运行代码加载至所述RAM区,其中,在加载所述运行代码时,当所述ROM区中相应的BOOT代码函数需要被替换时,根据对应的扩展代码函数的函数指针地址跳转到RAM中执行补丁代码,执行完毕之后跳回ROM区中继续执行BOOT代码。进一步的,将所述补丁代码存写入至所述OTP中时,先将所述补丁代码中的补丁函数写入到所述OTP区中,然后将所述补丁函数在RAM区中的地址赋值给所述补丁函数对应的地址EXT_Func[],并写入到OTP区中。进一步的,所述OTP区容量为N个KB,则所述OTP区最多能够存储N份补丁代码。进一步的,所述补丁代码包括:标记头Flag、校验码ChechSum,函数扩展标记EXT_Func[]:以及代码区,所述标记头Flag用于标识是否为一份补丁代码,所述校验码ChechSum用于对所述函数扩展标记和代码区进行异或运算以得出校验码,从而保证所述补丁代码完整性,所述函数扩展展标记EXT_Func[]:用于表示记录各个补丁函数对应的RAM地址,所述代码区用于存放补丁代码。进一步的,所述S10的步骤包括以下子步骤:S101、开始加载OTP区补丁代码;S102、设置计数器i=0;S103、i是否小于所述N,若小于则进入S104步骤,若大于或等于,则转入S111步骤;S104、若i小于所述N,则读出OTP区中i*1KB对齐地址4Byte数据为临时标记头TempFlag;S105、判断所述临时标记TempFlag是否等于标记头Flag;若等于则进入S106步骤,否则转入S110步骤;S106、若所述临时标记TempFlag等于所述标记头Flag,则从所述OTP中1*1KB地址处连续读出一份补丁代码,视为当前补丁代码;S107、通过所述校验码ChechSum校验该段当前补丁代码是否正确,若正确则进入S108步骤,否则转入S110步骤;S108、若正确,则将所述当前补丁代码中数组EXT_Func[]复制到RAM中;S109、OTP区中所述当前补丁代码区赋值到RAM中对应位置;S110、执行i+1后转入S103步骤;S111、加载OTP区补丁代码完成。进一步的,在S12步骤中,所述ROM区中相应的BOOT代码函数根据对应的扩展代码函数的函数指针是否为0确定是否需要被替换。本专利技术通过在主控芯片中加入OTP的方式,解决BOOT代码不能够支持从新型NANDFLASH中加载运行代码的问题。同时使用在OTP中写入多份补丁的方法,能够克服OTP只允许被编程一次,但补丁代码可能会升级的问题。采用本专利技术的基于OTP的主控芯片的BOOT代码扩展方法,能够降低成本、减小芯片的面积。附图说明图1及图2是现有技术中主控芯片和NANDFLASH的结构图。图3是本专利技术基于OTP的主控芯片的BOOT代码扩展方法一实施例的流程图。图4是本专利技术基于OTP的主控芯片的BOOT代码扩展方法一实施例中主控芯片的结构图。图5是OTP区中存储补丁代码的存储结构示意图。图6是本专利技术基于OTP的主控芯片的BOOT代码扩展方法加载OTP补丁代码的流程图。图7是本专利技术基于OTP的主控芯片的BOOT代码扩展方法一实施例的代码图。具体实施方式下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。请参见图1至图7,本专利技术的基于OTP的主控芯片的BOOT代码扩展方法应用于具有OTP区、ROM区以及RAM区的主控芯片中。所述主控芯片的ROM区用于存储BOOT代码、所述OTP区用于存储BOOT代码的补丁代码。本实施例的基于OTP的主控芯片的BOOT代码扩展方法包括以下步骤:S10、在所述主控芯片上电时,所述BOOT代码将所述OTP区中存储的补丁代码加载至RAM区;S12、所述BOOT代码将NANDFLASH中存储的运行代码加载至所述RAM区,其中,在加载所述运行代码时,当所述ROM区中相应的BOOT代码函数需要被替换时,根据对应的扩展代码函数的函数指针地址跳转到RAM中执行补丁代码,执行完毕之后跳回ROM区中继续执行BOOT代码。本实施例中,在将所述补丁代码存写入至所述OTP中时,先将所述补丁代码中的补丁函数写入到所述OTP区中,然后将所述补丁函数在RAM区中的地址赋值给所述补丁函数对应的地址EXT_Func[],并写入到OTP区中。该方案为BOOT代码将补丁代码加载至RAM区中对应位置提供了基础。上述OTP区容量为N个KB,则所述OTP区最多能够存储N份补丁代码。即,所述OTP被分为N个子区域,每一个子区域容量均为1个KB,当所述补丁代码为1个KB或者小于1个KB时,可以存储N份补丁代码,当所述补丁代码为2个KB时,则占用OTP区的2KB,当所述补丁代码为非整数KB时,则占用靠近该非整数的两个整数中较大的一个整数的子区域的容量,例如当为1.5个KB时,靠近该1.5的整数为1和2,则占用2个子区域的容量,即2本文档来自技高网...

【技术保护点】
1.一种基于OTP的主控芯片的BOOT代码扩展方法,所述主控芯片具有用于存储BOOT代码的ROM区、用于存储BOOT代码的补丁代码的OTP区以及RAM区,所述BOOT代码扩展方法包括以下步骤:S10、在所述主控芯片上电时,所述BOOT代码将所述OTP区中存储的补丁代码加载至RAM区;S12、所述BOOT代码将NAND FLASH中存储的运行代码加载至所述RAM区,其中,在加载所述运行代码时,当所述ROM区中相应的BOOT代码函数需要被替换时,根据对应的扩展代码函数的函数指针地址跳转到RAM中执行补丁代码,执行完毕之后跳回ROM区中继续执行BOOT代码。

【技术特征摘要】
1.一种基于OTP的主控芯片的BOOT代码扩展方法,所述主控芯片具有用于存储BOOT代码的ROM区、用于存储BOOT代码的补丁代码的OTP区以及RAM区,所述BOOT代码扩展方法包括以下步骤:S10、在所述主控芯片上电时,所述BOOT代码将所述OTP区中存储的补丁代码加载至RAM区;S12、所述BOOT代码将NANDFLASH中存储的运行代码加载至所述RAM区,其中,在加载所述运行代码时,当所述ROM区中相应的BOOT代码函数需要被替换时,根据对应的扩展代码函数的函数指针地址跳转到RAM中执行补丁代码,执行完毕之后跳回ROM区中继续执行BOOT代码。2.如权利要求1所述的基于OTP的主控芯片的BOOT代码扩展方法,其特征在于,将所述补丁代码存写入至所述OTP中时,先将所述补丁代码中的补丁函数写入到所述OTP区中,然后将所述补丁函数在RAM区中的地址赋值给所述补丁函数对应的地址EXT_Func[],并写入到OTP区中。3.如权利要求1或2所述的基于OTP的主控芯片的BOOT代码扩展方法,其特征在于:所述OTP区容量为N个KB,所述OTP区最多能够存储N份补丁代码。4.如权利要求3所述的基于OTP的主控芯片的BOOT代码扩展方法,其特征在于,所述补丁代码包括:标记头Flag、校验码ChechSum,函数扩展标记EXT_Func[]:以及代码区,所述标记头Flag用于标识是否为一份补丁代码,所述校验码ChechSum用于对所述函数扩展标记和代码区进行异或运算以得出校验...

【专利技术属性】
技术研发人员:李虎梁永权
申请(专利权)人:深圳市德名利电子有限公司
类型:发明
国别省市:广东,44

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1