一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

基于OTP的只读存储器中启动代码扩展方法及芯片与流程

2023-01-02 13:37:28 来源:中国专利 TAG:

基于otp的只读存储器中启动代码扩展方法及芯片
技术领域
1.本发明涉及存储领域,特别涉及一种基于otp的只读存储器中启动代码扩展方法及芯片。


背景技术:

2.常见的嵌入式芯片内部会集成只读存储器(rom,read-only memory)。在芯片量产时,写入启动代码(boot code)到rom中。芯片出厂后,boot code不能再被修改。芯片上电时,boot code最先被执行,只能按照写入时的逻辑执行。因此,如果boot code存在功能缺陷,则将成为芯片的固有缺陷。
3.当前存在两种解决方案。一是硬件修复方案,即重新投产芯片。将修复后的boot code写入到rom中,再次量产芯片。这种修复方案可以彻底解决问题。但是,缺点也很明显。生产周期和新芯片的验证周期会延长,费用会加大,并不是最佳解决方案。二是软件修复方案。只需要在rom中boot code设计阶段,考虑到可能的问题,并调用补丁函数解决问题。这种方案在boot code设计阶段考虑,未雨绸缪。但是在芯片量产阶段,需要依赖于片外存储设备。
4.综上可见,当前存在的两种解决方案均存在缺陷。


技术实现要素:

5.本发明实施例中提供一种基于otp的只读存储器中启动代码扩展方法及芯片,用以至少部分解决上述问题。
6.第一方面,本发明实施例提供一种基于otp的只读存储器中启动代码扩展方法,所述启动代码扩展方法包括:在otp空间存储补丁配置信息;所述otp为一次性可编程器件;在只读存储器的启动代码中集成补丁逻辑功能模块;在对所述启动代码的功能进行更新时,通过所述补丁逻辑功能模块执行所述补丁配置信息。
7.可选地,在通过所述补丁逻辑功能模块执行所述补丁配置信息之前,将所述补丁配置信息加载到随机存储器中。
8.可选地,所述otp空间为一次性可编程存储器efuse区域;所述补丁配置信息由一条或多条结构化的补丁数据构成。
9.可选地,每条结构化的补丁数据包括以下字段:有效数据指示字段、数据序号字段和数据字段;所述通过所述补丁逻辑功能模块执行所述补丁配置信息包括:对于每条结构化的补丁数据:在所述数据序号字段中的数据序号与所述补丁逻辑功能模块中的数据序号一致时,通过所述补丁逻辑功能模块根据所述有效数据指示字段的指示,执行该条结构化的补丁数据中的数据字段。
10.可选地,所述有效数据指示字段包括使能标识和键值对数量值n;所述数据字段包括n个地址-数据键值对;n不小于0;所述启动代码扩展方法还包括:在所述使能标识的值为结束标识时,用以指示该条结构化的补丁数据已经完成执行;在所述使能标识的值为魔术字时,用以指示所述补丁逻辑功能模块将所述数据字段中各键值对的配置数据写入该键值对的地址中;在所述使能标识的值为无效标识时,用以指示该条结构化的补丁数据无效;在所述键值对数量值为0时,用以指示该条结构化的补丁数据无效。
11.第二方面,本发明实施例提供一种芯片,所述芯片包括只读存储器、otp空间和中央处理器;所述otp空间用于存储补丁配置信息,所述otp为一次性可编程器件;所述只读存储器用于存储启动代码,所述启动代码中集成补丁逻辑功能模块;所述中央处理器用于在对所述启动代码的功能进行更新时,通过所述补丁逻辑功能模块执行所述补丁配置信息。
12.可选地,所述芯片还包括随机存储器;所述中央处理器还用于在通过所述补丁逻辑功能模块执行所述补丁配置信息之前,将所述补丁配置信息加载到所述随机存储器中。
13.可选地,所述otp空间为一次性可编程存储器efuse区域。
14.可选地,所述补丁配置信息由一条或多条结构化的补丁数据构成;每条结构化的补丁数据包括以下字段:有效数据指示字段、数据序号字段和数据字段;所述通过所述补丁逻辑功能模块执行所述补丁配置信息包括:对于每条结构化的补丁数据:在所述数据序号字段中的数据序号与所述补丁逻辑功能模块中的数据序号一致时,通过所述补丁逻辑功能模块根据所述有效数据指示字段的指示,执行该条结构化的补丁数据中的数据字段。
15.可选地,所述有效数据指示字段包括使能标识和键值对数量值n;所述数据字段包括n个地址-数据键值对;n不小于0;在所述使能标识的值为结束标识时,用以指示该条结构化的补丁数据经已经完成执行;在所述使能标识的值为魔术字时,用以指示所述补丁逻辑功能模块将所述数据字段中各键值对的配置数据写入该键值对的地址中;在所述使能标识的值为无效标识时,用以指示该条结构化的补丁数据无效;在所述键值对数量值为0时,用以指示该条结构化的补丁数据无效。
16.本发明各个实施例扩展了启动代码,在otp空间存储补丁配置信息;在只读存储器的启动代码中集成补丁逻辑功能模块,从而只基于片内otp空间中的补丁配置信息去修复启动代码中的问题。本发明实施例适用于boot code初始化片外存储设备之前,提前对boot code的执行阶段做了保护,从而进一步增强启动代码的可靠性,降低芯片重新掩膜量产的风险。
附图说明
17.图1是根据本发明实施例的芯片的结构框图;图2是根据本发明实施例的一条补丁数据的结构示意图;
图3是根据本发明实施例的基于otp的只读存储器中启动代码扩展方法流程图。
具体实施方式
18.下面结合附图和具体实施例对本发明作进一步详细描述,应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
19.本发明实施例提供的芯片的功能模块如图1所示,包括只读存储器rom、otp空间和中央处理器(cpu core);所述otp(一次性可编程器件)空间用于存储补丁配置信息(patch data);所述只读存储器用于存储启动代码(boot code),所述启动代码中集成补丁逻辑功能模块;所述中央处理器用于在对所述启动代码的功能进行更新时,通过所述补丁逻辑功能模块执行所述补丁配置信息。
20.其中补丁配置信息和补丁逻辑功能模块构成完整的补丁代码(patch code)。补丁逻辑功能模块可以是补丁函数(patch function)的形式实现。补丁逻辑功能模块在启动代码中调用。
21.当然,所述芯片还包括随机存储器;所述中央处理器还用于在通过所述补丁逻辑功能模块执行所述补丁配置信息之前,将所述补丁配置信息加载到所述随机存储器中。可选地,所述otp空间为一次性可编程存储器efuse区域。
22.通常情况,可以将补丁代码区和补丁配置信息放在eeprom/flash中。该方案boot code需要首先正确初始化eeprom/flash的访问接口,然后从eeprom/flash上复制补丁配置信息,并解析补丁配置信息。依据解析结果,决定是否继续从eeprom/flash上拷贝补丁代码并执行。在这种修复方案中,补丁代码位于片外非易失存储设备上,从而boot code正确访问片外非易失性存储设备是本方案正确执行补丁代码的前提条件。
23.当然,如果去掉片外eeprom,boot code的真实扩展代码存储在片外的nand flash上。当boot code执行时,决定是否从片外nand flash上拷贝补丁代码到内部ram并执行。在这种修复方案中,补丁代码位于片外nand flash中。同样,boot code正确访问nand flash是本方案正确执行补丁代码的前提条件。
24.本发明实施例对boot code进行补充增强,将修复boot code的bug的时间点提前,有效解决了避免了上述对eeprom/flash依赖所带来的问题,以及避免了上述对nand flash依赖所带来的问题。本发明实施例更适合的时间段为,boot code加载otp空间(例如,efuse区域)中的补丁配置信息到ram之后和初始化片外存储设备之前的这一段时间。
25.本发明实施例在otp空间存储补丁配置信息,在rom的boot code中集成patch function。这种方案既可以尽量少的占用otp空间,又最大程度地保证patch code的灵活性。
26.在一些实施例中,芯片上电后,位于rom中的boot code执行。boot code初始化efuse之后,将位于efuse中的patch data复制到内部ram中。boot code执行patch function时,会遍历所有的补丁数据,判断是否需要执行此条补丁数据(patch data entry)。如果需要执行patch data entry,则执行;如果不需要执行,则跳过。
27.详细地,本发明实施例主要分为两部分,第一部分,在efuse中写入补丁配置信息。第二部分,在boot代码中定义补丁函数(patch function),并在boot code中调用。
28.其中,所述补丁配置信息由一条或多条结构化的补丁数据构成;每条结构化的补
丁数据包括以下字段:有效数据指示字段(enable flag/number of patch pairs)、数据序号字段(sequence number)和数据字段;所述通过所述补丁逻辑功能模块执行所述补丁配置信息包括:对于每条结构化的补丁数据:在所述数据序号字段中的数据序号与所述补丁逻辑功能模块中的数据序号一致时,通过所述补丁逻辑功能模块根据所述有效数据指示字段的指示,执行该条结构化的补丁数据中数据字段。
29.可选地,所述有效数据指示字段包括使能标识(enable flag)和键值对数量值(number of patch pairs)n;所述数据字段包括n个地址-数据键值对((addr1,value1), (addr2,value2), (addr3,value3), (addrn,valuen));n不小于0;在所述使能标识的值为结束标识(初始值为0)时,用以指示该条结构化的补丁数据经已经完成执行;在所述使能标识的值为魔术字(magic word)时,用以指示所述补丁逻辑功能模块将所述数据字段中各键值对的配置数据写入该键值对的地址中;在所述使能标识的值为无效标识时,用以指示该条结构化的补丁数据无效;在所述键值对数量值为0时,用以指示该条结构化的补丁数据无效。
30.详细地,在芯片量产阶段,初始化所有的patch data entry到efuse中。patch data由多个patch data entry组成。patch data entry包括如下字段:(enable flag/number of patch pairs, sequence number, (addr1,value1), (addr2,value2), (addr3,value3), (addrn,valuen))。结构体定义如图2所示。
31.enable flag的初始值为0,表示没有使能本条patch data entry。number of fairs的初始值为0,表示没有写入有效的patch data entry。这也是patch data结束的标志。
32.当enable flag的值为固定的魔术字(magic word)时, 表示当前的patch data entry有效。由于efuse中的数据只能单向变化,所以,设置enable flag为0xff,用来删除一个patch data entry。
33.当number of pairs的值n》0时,表示此条patch data entry包括n个键值对(addr,value)。patch function会将value写入到对应的addr中。
34.patch function实现在boot code中,实现流程如图3所示,一种基于otp的只读存储器中启动代码扩展方法包括:s101,在otp空间存储补丁配置信息;s102,在只读存储器的启动代码中集成补丁逻辑功能模块;s103,在对所述启动代码的功能进行更新时,通过所述补丁逻辑功能模块执行所述补丁配置信息。
35.可选地,在通过所述补丁逻辑功能模块执行所述补丁配置信息之前,将所述补丁配置信息加载到随机存储器中。
36.在一些实施例中,所述otp空间为一次性可编程存储器efuse区域;所述补丁配置信息由一条或多条结构化的补丁数据构成。
37.在一些实施例中,首先,在所述使能标识的值为结束标识时,用以指示该条结构化的补丁数据经已经完成执行;在所述使能标识的值为魔术字时,用以指示所述补丁逻辑功能模块将所述数据字段中各键值对的配置数据写入该键值对的地址中;在所述使能标识的值为无效标识时,用以指示该条结构化的补丁数据无效。
38.例如,判断patch data entry中的enable flag是否是0。如果是0,则表示结束标志。如果是magic word,则表示当前patch data entry有效。如果是其他值,则表示当前patch data entry 无效。
39.如果patch function输入的sequence number与patch data entry中的sequence number中的值不同,则不执行本条patch data entry。如果相同,则执行patch data entry中的配置信息。换言之,对于每条结构化的补丁数据:在所述数据序号字段中的数据序号与所述补丁逻辑功能模块中的数据序号一致时,通过所述补丁逻辑功能模块根据所述有效数据指示字段的指示,执行该条结构化的补丁数据中的数据字段。
40.如果当前patch data entry有效,则读入number of pairs的值。在所述键值对数量为0时,用以指示该条结构化的补丁数据无效。当number of pairs的值大于0时,则表示有n对(addr,value)。patch function依次将value写入到对应的addr中。
41.本发明各个实施例基于片内otp空间,设计一种方案,对boot代码启动早期阶段进行功能扩展。本发明各个实施例详细定义了存储在efuse上的补丁数据格式和定义在boot代码中的补丁函数定义。在芯片量产阶段,如果需要扩展boot code功能,则向efuse中写入patch data。芯片出厂后,boot code执行期间,首先加载efuse上的patch data到内部ram中。其次,patch function会分析patch data entry,并执行。
42.本发明各个实施例没有将完整的补丁代码保存在efuse中,从而有效降低占用efuse空间的占用比例。而片内efuse空间增大,则芯片面积变大。当需要更新otp中原有的补丁代码逻辑时,必须丢弃原有所有代码,并且在新的otp空间重新注入新的代码。这样会对efuse空间造成极大的浪费。本发明实施例只将补丁数据存储在efuse中,补丁功能逻辑代码作为boot代码的一部分功能实现。这种设计既能减小对efuse空间的占用,又能保证补丁代码功能更新的灵活性。
43.本发明各个实施例定义了存储在efuse中的patch code entry的结构体。每一个patch code entry中指明一组地址和数据。这个地址是cpu可以访问任何地址。比如,包括boot代码中的内部变量地址,全局变量地址,也可以是芯片的寄存器地址等。当需要向一批连续地址写入一串数据时,只需要占用一个patch code entry。这种结构体格式可以灵活变更patch code功能。当需要更新补丁代码功能时,只需要删除其中的一条数据信息,增加一条新的数据信息即可。
44.本发明各个实施例扩展了启动代码,在otp空间存储补丁配置信息;在只读存储器的启动代码中集成补丁逻辑功能模块,只基于片内otp空间中的补丁配置信息去修复启动代码中的问题。本发明实施例适用于boot code初始化片外存储设备之前,提前对boot code的执行阶段做了保护,从而进一步增强启动代码的可靠性,降低芯片重新掩膜量产的风险。
45.上面结合附图对本发明的实施例进行了描述,但是本发明并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本发明的启示下,在不脱离本发明宗旨和权利要求所保护的范围情况下,还可做出很多形式,这些均属于本发明的保护之内。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献