CN113590227B - 一种嵌入式系统下的二进制烧写格式的加载方法及系统 - Google Patents
一种嵌入式系统下的二进制烧写格式的加载方法及系统 Download PDFInfo
- Publication number
- CN113590227B CN113590227B CN202110882000.9A CN202110882000A CN113590227B CN 113590227 B CN113590227 B CN 113590227B CN 202110882000 A CN202110882000 A CN 202110882000A CN 113590227 B CN113590227 B CN 113590227B
- Authority
- CN
- China
- Prior art keywords
- data
- checksum
- line
- file
- data block
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000011068 loading method Methods 0.000 title claims abstract description 84
- 238000000034 method Methods 0.000 title claims description 38
- 101000663183 Homo sapiens Scavenger receptor class F member 1 Proteins 0.000 claims description 37
- 102100037081 Scavenger receptor class F member 1 Human genes 0.000 claims description 37
- 238000012795 verification Methods 0.000 claims description 12
- 238000004364 calculation method Methods 0.000 claims description 9
- 230000008569 process Effects 0.000 claims description 8
- 238000004458 analytical method Methods 0.000 claims description 7
- 238000012545 processing Methods 0.000 claims description 5
- 238000013479 data entry Methods 0.000 claims description 3
- 230000006870 function Effects 0.000 description 11
- 238000013524 data verification Methods 0.000 description 5
- 238000013461 design Methods 0.000 description 5
- 230000009286 beneficial effect Effects 0.000 description 4
- 101100150295 Mus musculus Scarf1 gene Proteins 0.000 description 3
- 101100433169 Rattus norvegicus Zdhhc2 gene Proteins 0.000 description 3
- 238000006243 chemical reaction Methods 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 230000006835 compression Effects 0.000 description 2
- 238000007906 compression Methods 0.000 description 2
- 238000005259 measurement Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 210000001072 colon Anatomy 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1004—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's to protect a block of data words, e.g. CRC or checksum
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/61—Installation
- G06F8/63—Image based installation; Cloning; Build to order
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
- G06F8/654—Updates using techniques specially adapted for alterable solid state memories, e.g. for EEPROM or flash memories
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Quality & Reliability (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
本发明涉及一种嵌入式系统下的二进制烧写格式的加载方法,所述方法包括以下步骤:实时从存储介质中读取烧写文件中的文件头基础信息,所述文件头基础信息包括文件头长度、数据长度、数据块个数、数据块地址、数据块长度、文件头校验和和数据校验和;根据获取的文件头,计算文件头校验和,判断文件头中存储的校验和与计算校验和是否一致,若一致,则解析文件头中的数据块信息,判断是否存在未写入内存的数据块。本发明既可以使用较小的存储空间,提升加载速度,同时可以在加载时对自身进行校验,防止加载错误。
Description
技术领域
本发明涉及嵌入式系统技术领域,尤其涉及一种嵌入式系统下的二进制烧写格式的加载方法及系统。
背景技术
一部分嵌入式系统中,会将系统运行程序和数据,提前烧写到非易失性存储设备中(如Flash等)。在每次系统上电后,通过bootloader对这些程序和数据进行引导和加载。常用的烧录文件格式有:BIN,SREC,HEX等,下面对他们的一些进行简单的介绍。
BIN:即二进制文件,是系统可以直接运行的机器码,不包含任何对数据的描述,系统加载时加载到指定地址即可进行运行,不需要解析。
HEX:由ASCII文本行组成,这些行由换行符或回车符或两者分隔。一行文本为一条记录,记录从左到右,具有以下结构:
示例::020000021200EA
Start code | Byte count | Address | Record type | Data | Checksum |
: | 02 | 0000 | 02 | 1200 | EA |
Start code:由ASCII的冒号表示。Byte count:由2个十六进制字符表示,表示这个record的data区有多少个字节。最大值是255(0xFF).16(0x10)和32(0x20)比较常用。Address:由4个十六进制字符表示,表示数据的内存偏移量,为16bit地址。Record Type:由2个十六进制字符表示,共有六种类型。Data:用于记录数据的n个字节,每个字节数据以十六进制字符表示,具体内容取决于实际应用数据。Checksum:由2个十六进制字符表示,用于数据实际加载时对存储的数据进行校验。SREC:它是由Motorola制定的,一般也叫MotorolaS-Record。
这种格式通常就是我们平时见的SRECORD,SREC,S19,S28,S37。SREC文件有多种后缀,例:
如:.s19,.s28,.s37,.s,.s1,.s2,.s3,.sx,.srec,.mot
一个SREC格式文件由一系列ASCII文本行组成,这些行由换行符或回车符或两者分隔。一行文本为一条记录,记录从左到右,具有以下结构:
示例:S30D0000002000A800B0180808B89A
Recode Type | Byte Count | Address | Data | Checksum |
S3 | 0D | 00000020 | 00A800B0180808B8 | 9A |
其中:
Record type:大写“S”和一个数字,用于区分该条记录的类型。Byte count:表示该条记录中,除去类型和自身的其余部分(地址+数据+校验和)的字节数,以十六进制字符表示。该字段的最小值为0x03(对应十进制为3),最大值为0xFF(对应十进制为255)。Address:数据地址,对于不同的记录类型,分别有16bit(S1),24bit(S2),32bit(S3)地址。地址字节按大端格式排列。Data:用于记录数据的n个字节,每个字节数据以十六进制字符表示。对于S1/S2/S3记录,每条记录通常最多32个字节。Checksum:由2个十六进制字符表示,地址和数据字段的每个值之和的最低有效字节的补码。用于数据实际加载时对存储的数据进行校验。
由此可知,当实际应用中更关注启动的稳定性或存在地址跳跃,只能使用SREC或HEX格式,这两种格式存储空间占用大,加载速度慢;当实际应用中更关注启动的速度时,只能使用BIN格式,但无法对存储介质出错的情况下进行错误处理。
发明内容
本发明的目的在于提供一种嵌入式系统下的二进制烧写格式的加载方法及系统,配合与格式相对应的加载逻辑,可以达到非常接近BIN格式的空间占用和加载速度,同时支持地址跳跃,数据校验的功能,既可以使用较小的存储空间,提升加载速度,同时可以在加载时对自身进行校验,防止加载错误,可以解决背景技术中存在的问题。
第一方面,本发明实施例公开了一种嵌入式系统下的二进制烧写格式的加载方法,所述方法包括以下步骤:
实时从存储介质中读取烧写文件中的文件头基础信息,所述文件头基础信息包括文件头长度、数据长度、数据块个数、数据块地址、数据块长度、文件头校验和和数据校验和;
根据获取的文件头,计算文件头校验和,判断文件头中存储的校验和与计算校验和是否一致,若一致,则解析文件头中的数据块信息,判断是否存在未写入内存的数据块;
若存在未写入内存的数据块,则当前数据块存储的地址设置为DDR目标地址,并判断当前数据块剩余未写入的数据长度是否大于预设的单次读取长度;若大于预设的单次读取长度,则从存储介质中获取预设的数值,更新数据校验和,拷贝到DDR目标地址。
在上述任一方案中优选的是,所述的嵌入式系统下的二进制烧写格式的加载方法,还包括:
在判断文件头中存储的校验和与计算校验和是否一致时,若不一致,则加载失败,报错退出。
在上述任一方案中优选的是,所述的嵌入式系统下的二进制烧写格式的加载方法,还包括:
在判断是否存在未写入内存的数据块时,若不存在未写入内存的数据块,则判断文件头中存储的数据校验和与实际数据计算校验和是否相同,若相同,则加载成功,开始运行程序,若不相同,则加载失败,报错退出。
在上述任一方案中优选的是,所述的嵌入式系统下的二进制烧写格式的加载方法,还包括:
在判断当前数据块剩余未写入的数据是否大于预设的单次读取长度时,若当前数据块剩余未写入的数据≤预设的单次读取长度时,则读取不足预设的单次读取长度的剩余数据,更新数据校验和。
在上述任一方案中优选的是,所述的嵌入式系统下的二进制烧写格式的加载方法,还包括烧写文件的生成方法,所述生成方法包括以下步骤:
以文本方式从输入文件中读取一行数据进入;
若是输入文件中的第一行,则判断读取行类型是否为SREC文件起始类型,若是,则确认为SREC文件,若不是,则确认不是SREC文件,提示错误信息并结束;
若非输入文件中的第一行,则判断读取行类型是否为数据行,若是,则本行为数据行,解析本行数据,更新数据校验和,数据转换为二进制形式拷贝到预先申请的数据空间中;
判断上一行地址加上一行数据长度是否等于本行地址,若是,则本行数据与上一行数据处于同一个数据块,数据块长度累加当前行数据长度;若不是或上一行为第一行数据,则本行数据相对于上一行数据产生了地址跳跃,开始一个新的数据块。
在上述任一方案中优选的是,所述生成方法还包括:在判断输入文件是否打开成功时,若打开不成功,则提示错误信息并结束。
在上述任一方案中优选的是,所述生成方法还包括:在以文本方式从输入文件中读取一行时,若读取不到数据,则读取文件结束,提示错误信息并结束。
在上述任一方案中优选的是,所述生成方法还包括:
在判断读取行类型是否为数据行时,若不是,则判断本行数据是否为结束行,若本行数据为结束行,则判断本行是否为文件最后一行,若本行为文件最后一行,则输入文件解析正常完成;
根据过程中的数据块信息和数据校验和填充文件头数据,计算文件头校验和并填充到文件头校验码位置,将文件头和各数据块数据,以二进制形式写入输出文件,输出文件数据重新校验,校验成功则结束,校验失败提示错误信息并结束。
在上述任一方案中优选的是,所述生成方法还包括:
在判断本行数据是否为结束行时,若本行数据不是结束行,则判断本行是否为数据行类型,若是,则以文本方式从输入文件中读取一行,若不是,则提示错误信息并结束。
本发明与现有技术相比,具有如下有益效果:SECBIN烧写方案替代了原有产品中SREC烧写方案,转换为SECBIN后程序文件缩小,程序文件在Flash中所占用的空间相应缩小,对于一些功能较多(程序文件较大)的产品型号,避免了更换更大存储空间,成本更高的Flash芯片,节省了更换Flash芯片成本和修改原有设计的成本。
本发明配合与格式相对应的加载逻辑,可以达到非常接近BIN格式的空间占用和加载速度,同时支持地址跳跃,数据校验的功能,既可以使用较小的存储空间,提升加载速度,同时可以在加载时对自身进行校验,防止加载错误。
第二方面,一种嵌入式系统下的二进制烧写格式的加载系统,包括:
获取模块,用于实时从存储介质中读取烧写文件中的文件头基础信息,所述文件头基础信息包括文件头长度、数据长度、数据块个数、数据块地址、数据块长度、文件头校验和和数据校验和;
处理模块,用于根据获取的文件头,计算文件头校验和,判断文件头中存储的校验和与计算校验和是否一致,若一致,则解析文件头中的数据块信息,判断是否存在未写入内存的数据块;若存在未写入内存的数据块,则当前数据块存储的地址设置为DDR目标地址,并判断当前数据块剩余未写入的数据长度是否大于预设的单次读取长度;若大于预设的单次读取长度,则从存储介质中获取预设的数值,更新数据校验和,拷贝到DDR目标地址。
本发明与现有技术相比,具有如下有益效果:SECBIN烧写方案替代了原有产品中SREC烧写方案,转换为SECBIN后程序文件缩小,程序文件在Flash中所占用的空间相应缩小,对于一些功能较多(程序文件较大)的产品型号,避免了更换更大存储空间,成本更高的Flash芯片,节省了更换Flash芯片成本和修改原有设计的成本。
本发明配合与格式相对应的加载逻辑,可以达到非常接近BIN格式的空间占用和加载速度,同时支持地址跳跃,数据校验的功能,既可以使用较小的存储空间,提升加载速度,同时可以在加载时对自身进行校验,防止加载错误。
附图说明
附图用于对本发明的进一步理解,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。
图1是按照本发明嵌入式系统下的二进制烧写格式的加载方法的SECBIN文件结构示意图。
图2是按照本发明嵌入式系统下的二进制烧写格式的加载方法的SREC文件转换SECBIN烧写文件流程示意图。
图3是按照本发明嵌入式系统下的二进制烧写格式的加载方法的SECBIN文件格式程序加载流程示意图。
图4是按照本发明嵌入式系统下的二进制烧写格式的加载系统示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。在本发明的描述中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。
缩略语和关键术语定义:
烧录文件:编译器或汇编器将程序的源代码(例如C或汇编语言)转换为机器代码,并将其输出到一个文件中。然后,这个文件由程序员导入,以将机器代码“烧录”到非易失性存储中,或直接传输到目标系统以进行加载和执行。
SREC:全名为Motorola S-Record,是一种广泛应用的ASCII格式的数据文件,通过可视化地划分记录来增强易读性,还提供了记录之间的填充,可以用来提高机器解析效率。
ELF:一种用于二进制文件、可执行文件、目标代码、共享库和核心转储格式文件
bootloader:在操作系统内核运行之前运行。可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。
Flash:内存(Memory)的一种,是一种可反复擦写,非易失性存储器。
Checksum:总和检验码,在数据处理和数据通信领域中,用于校验目的的一组数据项的和。
SECBIN:全名Secure BIN,本发明定义的一种的用于烧写的特殊二进制格式。
为了更好地理解上述技术方案,下面将结合说明书附图及具体实施方式对本发明技术方案进行详细说明。
本发明提供了从标准SREC文件转换为SECBIN的详细流程,通过SREC文件的格式特征,可以计算得到理论最大压缩率:
SREC=SREC文件一行所占字节数=50;
SECBIN=SECBIN对应SREC文件一行所占字节数=16;
理论最大压缩率=SECBIN/SREC=16/50=32%,也就是说,最多可以节约68%的程序存储空间。
实施例:
第一方面,如图1至图3所示,本发明实施例公开了一种嵌入式系统下的二进制烧写格式的加载方法,所述方法包括以下步骤:
实时从存储介质中读取烧写文件中的文件头基础信息,所述文件头基础信息包括文件头长度、数据长度、数据块个数、数据块地址、数据块长度、文件头校验和和数据校验和;
根据获取的文件头,计算文件头校验和,判断文件头中存储的校验和与计算校验和是否一致,若一致,则解析文件头中的数据块信息,判断是否存在未写入内存的数据块;
若存在未写入内存的数据块,则当前数据块存储的地址设置为DDR目标地址,并判断当前数据块剩余未写入的数据是否大于256字节;若是,则从存储介质中获取256字节数据,更新数据校验和,拷贝到DDR目标地址,目标地址增加256,然后再继续判断当前数据块剩余未写入的数据是否大于256字节。
如图1至图3所示,所述的嵌入式系统下的二进制烧写格式的加载方法,还包括:
在判断文件头中存储的校验和与计算校验和是否一致时,若不一致,则加载失败,报错退出。
如图1至图3所示,所述的嵌入式系统下的二进制烧写格式的加载方法,还包括:
在判断是否存在未写入内存的数据块时,若不存在未写入内存的数据块,则判断文件头中存储的数据校验和与实际数据计算校验和是否相同,若相同,则加载成功,开始运行程序,若不相同,则加载失败,报错退出。
如图1至图3所示,所述的嵌入式系统下的二进制烧写格式的加载方法,还包括:
在判断当前数据块剩余未写入的数据是否大于256字节时,若当前数据块剩余未写入的数据≤256字节时,则读取不足256字节的剩余数据,更新数据校验和。
如图1至图3所示,所述的嵌入式系统下的二进制烧写格式的加载方法,还包括烧写文件的生成方法,所述生成方法包括以下步骤:
打开输入文件,创建输出文件,判断输入文件是否打开成功;
若打开成功,则以文本方式从输入文件中读取一行,读取到数据进入;
若是第一行,则判断读取行类型是否为SREC文件起始类型,若是,则确认为SREC文件,若不是,则确认不是SREC文件,提示错误信息并结束;
若非第一行,则判断读取行类型是否为数据行,若是,则本行为数据行,解析本行数据,更新数据校验和,数据转换为二进制形式拷贝到预先申请的数据空间中;
判断上一行地址加上一行数据长度是否等于本行地址,若是,则本行数据与上一行数据处于同一个数据块,数据块长度累加当前行数据长度;若不是或上一行为第一行数据,则本行数据相对于上一行数据产生了地址跳跃,开始一个新的数据块。
如图1至图3所示,所述生成方法还包括:在判断输入文件是否打开成功时,若打开不成功,则提示错误信息并结束。
如图1至图3所示,所述生成方法还包括:在以文本方式从输入文件中读取一行时,若读取不到数据,则读取文件结束,提示错误信息并结束。
如图1至图3所示,所述生成方法还包括:
在判断读取行类型是否为数据行时,若不是,则判断本行数据是否为结束行,若本行数据为结束行,则判断本行是否为文件最后一行,若本行为文件最后一行,则输入文件解析正常完成;
根据过程中的数据块信息和数据校验和填充文件头数据,计算文件头校验和并填充到文件头校验码位置,将文件头和各数据块数据,以二进制形式写入输出文件,输出文件数据重新校验,校验成功则结束,校验失败提示错误信息并结束。
如图1至图3所示,所述生成方法还包括:
在判断本行数据是否为结束行时,若本行数据不是结束行,则判断本行是否为数据行类型,若是,则以文本方式从输入文件中读取一行,若不是,则提示错误信息并结束。
烧写文件的数据格式图1所示,文件结构主要分为SEC文件头和二进制数据这两个部分,文件头分为两部分,基础信息部分和数据块信息部分。
基础信息部分:文件头校验和:文件头的校验和(除去文件夹头校验和本身);数据校验和:二进制数据的校验和;文件头长度:SEC格式文件头的总长度,默认为最小值256字节,可最多扩展到1024字节;数据长度:二进制数据长度;数据块个数:数据分块数量(每次加载数据的目的地址跳跃会使分块数量加1);文件头基础信息保留部分:保留空间,便于后续功能扩展。
在嵌入式环境下,存储介质在长时间使用或恶劣电气条件下使用后,可能会出现一些错误,例如:位翻转等,因此往往需要对数据进行校验。SECBIN文件结构的校验和结构设计,对文件中的数据及文件头本身均提供了有效性验证,极大程度的保证了数据的稳定性,避免因存储介质部分失效导致的加载程序异常。SECBIN格式使用的校验和算法可以选择多种方式,校验数据最多占用16个字节,本发明实现方式为CRC64算法进行校验。
数据块信息部分:
每8字节划分为一个数据块信息单元,每个数据块信息单元中前4字节代表该数据块加载的目标地址,后4字节代表该数据块需要向目标地址加载的数据长度。
二进制数据:按照文件头中的数据块信息部分,连续存放各个数据块的二进制数据。
如图2所示,SREC文件转换为SECBIN格式,包括以下步骤:
S0、打开输入文件,创建输出文件,进入S1;
S1、判断输入文件是否打开成功,如果是进入S2,如果不是进入S17;
S2、以文本方式从输入文件中读取一行,读取到数据进入S3,读取到文件结束符进入S17;
S3、如果是第一行,进入S4,如果非第一行,进入S5;
S4、判断读取行类型是否为“S0”,如果是,则说明确认为SREC文件,进入S2;如果不为S0,则说明不是SREC文件进入S17;
S5、判断读取行类型是否为数据行(“S1”、“S2”、“S3”)如果是,进入S6;如果不是进入S10;
S6、本行为数据行,解析本行数据,更新数据校验和,数据转换为二进制形式拷贝到预先申请的数据空间中,进入S7;
S7、判断上一行地址加上一行数据长度是否等于本行地址。如果是,进入S8;如果不是或上一行为第一行数据,进入S9;
S8、本行数据与上一行数据处于同一个数据块,数据块长度累加当前行数据长度,回到S2;
S9、本行数据相对于上一行数据产生了地址跳跃,开始一个新的数据块,回到S2;
S10、判断本行数据是否为结束行(“S7”、“S8”、“S9”),如果是,进入S11;如果不是,进入S12;
S11、判断本行是否为文件最后一行,如果是,进入S13;如果不是,进入S17;
S12、判断本行是否为“S5”类型,如果是,回到S2;如果不是,进入S17;
S13、输入文件解析正常完成,根据过程中的数据块信息和数据校验和填充文件头数据,进入S14;
S14、计算文件头校验和并填充到文件头校验码位置,进入S15;
S15、将文件头和各数据块数据,以二进制形式写入输出文件,进入S16;
S16、输出文件数据重新校验,校验成功则结束;校验失败进入S17;
S17、提示错误信息并结束。
在本发明实施例所述的嵌入式系统下的二进制烧写格式的加载方法中,烧写文件加载需要提前生成SECBIN文件,并烧写到存储介质中(烧写到存储介质的过程与本发明无关),在本发明的实际应用中,采用了bootloader从Flash中加载程序到DDR并启动运行的方式,其他存储介质及其他启动方式亦可(SECBIN加载方式如图3所示)。
如图3所示,在本发明实施例所述的嵌入式系统下的二进制烧写格式的加载方法中,SECBIN文件格式程序加载流程包括以下步骤:
S0、从存储介质中读取文件头基础信息,进入S1;
S1、根据文件头基础信息中的文件头长度继续获取剩余的文件头,进入S2;
S2、计算文件头校验和,进入S3;
S3、判断文件头中存储的校验和与计算校验和是否一致,如果是,进入S4;如果否,进入S14;
S4、解析文件头中的数据块信息,进入S5;
S5、判断是否未写入内存的数据块,如果是,进入S6;如果否,进入S12;
S6、当前数据块存储的地址设置为DDR目标地址,进入S7;
S7、判断当前数据块剩余未写入的数据是否大于256字节,如果是,进入S8;如果否,进入S10;
S8、从存储介质中获取256字节数据,更新数据校验和,进入S9;
S9、拷贝到DDR目标地址,目标地址增加256,回到S7;
S10、读取不足256字节的剩余数据,更新数据校验和,进入S11;
S11、拷贝到DDR目标地址,进入S5;
S12、判断文件头中存储的数据校验和与实际数据计算校验和是否相同,如果是,进入S13;如果否,进入S14;
S13、加载成功,开始运行程序。
S14、加载失败,报错退出。
如下表为烧写文件转换前后Flash空间占用比较(实测):
由于程序文件变小,其程序文件Flash烧写速度也相应提升。由于程序文件变小,而且相对于SREC格式解析,SECBIN文件的解析更加高效,程序加载速度也得到了相应的提升,实测提升效果显著,如下表所示。
下表为转换前后加载时间比较(实测):
同时,由于其中针对文件头和文件数据进行了CRC64的校验,其文件完整性和正确性亦有保证,保留了SREC文件可校验,加载地址可跳跃的功能。
本发明与现有技术相比,具有如下有益效果:SECBIN烧写方案替代了原有产品中SREC烧写方案,转换为SECBIN后程序文件缩小,程序文件在Flash中所占用的空间相应缩小,对于一些功能较多(程序文件较大)的产品型号,避免了更换更大存储空间,成本更高的Flash芯片,节省了更换Flash芯片成本和修改原有设计的成本。
本发明配合与格式相对应的加载逻辑,可以达到非常接近BIN格式的空间占用和加载速度,同时支持地址跳跃,数据校验的功能,既可以使用较小的存储空间,提升加载速度,同时可以在加载时对自身进行校验,防止加载错误。
第二方面,如图4所示,一种嵌入式系统下的二进制烧写格式的加载系统,包括:
获取模块,用于实时从存储介质中读取烧写文件中的文件头基础信息,所述文件头基础信息包括文件头长度、数据长度、数据块个数、数据块地址、数据块长度、文件头校验和和数据校验和;
处理模块,用于根据获取的文件头,计算文件头校验和,判断文件头中存储的校验和与计算校验和是否一致,若一致,则解析文件头中的数据块信息,判断是否存在未写入内存的数据块;若存在未写入内存的数据块,则当前数据块存储的地址设置为DDR目标地址,并判断当前数据块剩余未写入的数据是否大于256字节;若是,则从存储介质中获取256字节数据,更新数据校验和,拷贝到DDR目标地址,目标地址增加256,然后再继续判断当前数据块剩余未写入的数据是否大于256字节。
本发明与现有技术相比,具有如下有益效果:SECBIN烧写方案替代了原有产品中SREC烧写方案,转换为SECBIN后程序文件缩小,程序文件在Flash中所占用的空间相应缩小,对于一些功能较多(程序文件较大)的产品型号,避免了更换更大存储空间,成本更高的Flash芯片,节省了更换Flash芯片成本和修改原有设计的成本。
本发明配合与格式相对应的加载逻辑,可以达到非常接近BIN格式的空间占用和加载速度,同时支持地址跳跃,数据校验的功能,既可以使用较小的存储空间,提升加载速度,同时可以在加载时对自身进行校验,防止加载错误。
以上仅为本发明的优选实施例而已,并不用于限制本发明,尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (6)
1.一种嵌入式系统下的二进制烧写格式的加载方法,其特征在于:所述方法包括以下步骤:
实时从存储介质中读取烧写文件中的文件头基础信息,所述文件头基础信息包括文件头长度、数据长度、数据块个数、数据块地址、数据块长度、文件头校验和和数据校验和;
根据获取的文件头,计算文件头校验和,判断文件头中存储的校验和与计算校验和是否一致,若一致,则解析文件头中的数据块信息,判断是否存在未写入内存的数据块;
若存在未写入内存的数据块,则当前数据块存储的地址设置为DDR目标地址,并判断当前数据块剩余未写入的数据长度是否大于预设的单次读取长度;若大于预设的单次读取长度,则从存储介质中获取预设的数值,更新数据校验和,拷贝到DDR目标地址;还包括:在判断文件头中存储的校验和与计算校验和是否一致时,若不一致,则加载失败,报错退出;还包括:在判断是否存在未写入内存的数据块时,若不存在未写入内存的数据块,则判断文件头中存储的数据校验和与实际数据计算校验和是否相同,若相同,则加载成功,开始运行程序,若不相同,则加载失败,报错退出;还包括:在判断当前数据块剩余未写入的数据是否大于预设的单次读取长度时,若当前数据块剩余未写入的数据≤预设的单次读取长度时,则读取不足预设的单次读取长度的剩余数据,更新数据校验和;还包括烧写文件的生成方法,所述生成方法包括以下步骤:以文本方式从输入文件中读取一行数据进入;若是输入文件中的第一行,则判断读取行类型是否为SREC文件起始类型,若是,则确认为SREC文件,若不是,则确认不是SREC文件,提示错误信息并结束;
若非输入文件中的第一行,则判断读取行类型是否为数据行,若是,则本行为数据行,解析本行数据,更新数据校验和,数据转换为二进制形式拷贝到预先申请的数据空间中;
判断上一行地址加上一行数据长度是否等于本行地址,若是,则本行数据与上一行数据处于同一个数据块,数据块长度累加当前行数据长度;若不是或上一行为第一行数据,则本行数据相对于上一行数据产生了地址跳跃,开始一个新的数据块。
2.根据权利要求1所述的嵌入式系统下的二进制烧写格式的加载方法,其特征在于:所述文件头长度为SEC格式文件头的总长度,其取值范围为256字节~1024字节。
3.根据权利要求2所述的嵌入式系统下的二进制烧写格式的加载方法,其特征在于:所述数据块信息包括:每8字节划分为一个数据块信息单元,每个数据块信息单元中前4字节代表该数据块加载的目标地址,后4字节代表该数据块需要向目标地址加载的数据长度。
4.根据权利要求3所述的嵌入式系统下的二进制烧写格式的加载方法,其特征在于:所述生成方法还包括:
在判断读取行类型是否为数据行时,若不是,则判断本行数据是否为结束行,若本行数据为结束行,则判断本行是否为文件最后一行,若本行为文件最后一行,则输入文件解析正常完成。
5.根据权利要求4所述的嵌入式系统下的二进制烧写格式的加载方法,其特征在于:所述生成方法还包括:
根据过程中的数据块信息和数据校验和填充文件头数据,计算文件头校验和并填充到文件头校验码位置,将文件头和各数据块数据,以二进制形式写入输出文件,输出文件数据重新校验,校验成功则结束,校验失败提示错误信息并结束。
6.一种嵌入式系统下的二进制烧写格式的加载系统,其特征在于:包括:
获取模块,用于实时从存储介质中读取烧写文件中的文件头基础信息,所述文件头基础信息包括文件头长度、数据长度、数据块个数、数据块地址、数据块长度、文件头校验和和数据校验和;
处理模块,用于根据获取的文件头,计算文件头校验和,判断文件头中存储的校验和与计算校验和是否一致,若一致,则解析文件头中的数据块信息,判断是否存在未写入内存的数据块;若存在未写入内存的数据块,则当前数据块存储的地址设置为DDR目标地址,并判断当前数据块剩余未写入的数据长度是否大于预设的单次读取长度;若大于预设的单次读取长度,则从存储介质中获取预设的数值,更新数据校验和,拷贝到DDR目标地址;还包括:在判断文件头中存储的校验和与计算校验和是否一致时,若不一致,则加载失败,报错退出;还包括:在判断是否存在未写入内存的数据块时,若不存在未写入内存的数据块,则判断文件头中存储的数据校验和与实际数据计算校验和是否相同,若相同,则加载成功,开始运行程序,若不相同,则加载失败,报错退出;还包括:在判断当前数据块剩余未写入的数据是否大于预设的单次读取长度时,若当前数据块剩余未写入的数据≤预设的单次读取长度时,则读取不足预设的单次读取长度的剩余数据,更新数据校验和;还包括烧写文件的生成方法,所述生成方法包括以下步骤:以文本方式从输入文件中读取一行数据进入;
若是输入文件中的第一行,则判断读取行类型是否为SREC文件起始类型,若是,则确认为SREC文件,若不是,则确认不是SREC文件,提示错误信息并结束;
若非输入文件中的第一行,则判断读取行类型是否为数据行,若是,则本行为数据行,解析本行数据,更新数据校验和,数据转换为二进制形式拷贝到预先申请的数据空间中;
判断上一行地址加上一行数据长度是否等于本行地址,若是,则本行数据与上一行数据处于同一个数据块,数据块长度累加当前行数据长度;若不是或上一行为第一行数据,则本行数据相对于上一行数据产生了地址跳跃,开始一个新的数据块。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110882000.9A CN113590227B (zh) | 2021-08-02 | 2021-08-02 | 一种嵌入式系统下的二进制烧写格式的加载方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110882000.9A CN113590227B (zh) | 2021-08-02 | 2021-08-02 | 一种嵌入式系统下的二进制烧写格式的加载方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113590227A CN113590227A (zh) | 2021-11-02 |
CN113590227B true CN113590227B (zh) | 2023-11-28 |
Family
ID=78253979
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110882000.9A Active CN113590227B (zh) | 2021-08-02 | 2021-08-02 | 一种嵌入式系统下的二进制烧写格式的加载方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113590227B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113986859B (zh) * | 2021-11-04 | 2024-02-23 | 西安热工研究院有限公司 | 一种通过反向网闸同步非e文件的方法 |
CN114924803A (zh) * | 2022-06-16 | 2022-08-19 | Oppo广东移动通信有限公司 | 加载启动方法、芯片、电子装置和存储介质 |
CN117289876B (zh) * | 2023-11-22 | 2024-02-23 | 苏州元脑智能科技有限公司 | 一种数据写入方法、系统、装置、介质及四级单元闪存 |
CN117472291B (zh) * | 2023-12-27 | 2024-03-22 | 苏州元脑智能科技有限公司 | 数据块的校验方法和装置、存储介质及电子设备 |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20010001869A (ko) * | 1999-06-09 | 2001-01-05 | 윤종용 | 펌웨어 보드의 프로그램을 변경하기 위한 장치 및 방법 |
CN102662789A (zh) * | 2012-03-27 | 2012-09-12 | 株洲南车时代电气股份有限公司 | 一种elf文件添加crc校验的方法 |
CN104951315A (zh) * | 2014-03-25 | 2015-09-30 | 上海三旗通信科技股份有限公司 | 一种手机软件快速更新下载的方法 |
CN106126367A (zh) * | 2016-06-28 | 2016-11-16 | 湖北锐世数字医学影像科技有限公司 | 一种文件的自校验方法及系统 |
CN106301845A (zh) * | 2015-05-30 | 2017-01-04 | 四川泰瑞创通讯技术股份有限公司 | 交换机日志记录模块 |
CN108304722A (zh) * | 2017-12-21 | 2018-07-20 | 广州小鹏汽车科技有限公司 | 一种软件安装包及其生成方法、升级方法和系统 |
CN109426511A (zh) * | 2017-08-18 | 2019-03-05 | 西安诺瓦电子科技有限公司 | 软核更新方法和系统 |
CN109725943A (zh) * | 2018-12-27 | 2019-05-07 | 龙芯中科技术有限公司 | 一种程序跳转方法、装置、电子设备及存储介质 |
CN111158697A (zh) * | 2019-12-25 | 2020-05-15 | 惠州华阳通用电子有限公司 | 一种烧录镜像制作方法 |
CN112463724A (zh) * | 2020-11-05 | 2021-03-09 | 苏州浪潮智能科技有限公司 | 一种轻量级文件系统的数据处理方法和系统 |
-
2021
- 2021-08-02 CN CN202110882000.9A patent/CN113590227B/zh active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20010001869A (ko) * | 1999-06-09 | 2001-01-05 | 윤종용 | 펌웨어 보드의 프로그램을 변경하기 위한 장치 및 방법 |
CN102662789A (zh) * | 2012-03-27 | 2012-09-12 | 株洲南车时代电气股份有限公司 | 一种elf文件添加crc校验的方法 |
CN104951315A (zh) * | 2014-03-25 | 2015-09-30 | 上海三旗通信科技股份有限公司 | 一种手机软件快速更新下载的方法 |
CN106301845A (zh) * | 2015-05-30 | 2017-01-04 | 四川泰瑞创通讯技术股份有限公司 | 交换机日志记录模块 |
CN106126367A (zh) * | 2016-06-28 | 2016-11-16 | 湖北锐世数字医学影像科技有限公司 | 一种文件的自校验方法及系统 |
CN109426511A (zh) * | 2017-08-18 | 2019-03-05 | 西安诺瓦电子科技有限公司 | 软核更新方法和系统 |
CN108304722A (zh) * | 2017-12-21 | 2018-07-20 | 广州小鹏汽车科技有限公司 | 一种软件安装包及其生成方法、升级方法和系统 |
CN109725943A (zh) * | 2018-12-27 | 2019-05-07 | 龙芯中科技术有限公司 | 一种程序跳转方法、装置、电子设备及存储介质 |
CN111158697A (zh) * | 2019-12-25 | 2020-05-15 | 惠州华阳通用电子有限公司 | 一种烧录镜像制作方法 |
CN112463724A (zh) * | 2020-11-05 | 2021-03-09 | 苏州浪潮智能科技有限公司 | 一种轻量级文件系统的数据处理方法和系统 |
Non-Patent Citations (1)
Title |
---|
"DSP56362的双引导装载方法研究与实现";朱洪涛 等;《 国外电子元器件》(第3期);4-8 * |
Also Published As
Publication number | Publication date |
---|---|
CN113590227A (zh) | 2021-11-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113590227B (zh) | 一种嵌入式系统下的二进制烧写格式的加载方法及系统 | |
JP4878715B2 (ja) | オペレーティングシステムに適合しないアプリケーションにパッチを当てる方法、コンピュータシステム及びコンピュータ可読記録媒体 | |
US7055035B2 (en) | Method for generating a read only memory image | |
EP0633526B1 (en) | Language processing system and method therefor | |
JP2005032259A (ja) | 共有ライブラリーシステム及び前記システム構築方法 | |
US20080005728A1 (en) | Methods, systems, and computer program products for enabling cross language access to an addressable entity in an execution environment | |
US20080005727A1 (en) | Methods, systems, and computer program products for enabling cross language access to an addressable entity | |
CN109739824B (zh) | 日志获取方法及设备 | |
CN105224309A (zh) | 一种调取函数的方法和装置 | |
CN111796907A (zh) | 基于检核脚本的数据检核方法、装置、电子设备以及介质 | |
CN110750405B (zh) | 一种基于硬件板卡识别的软件兼容性方法 | |
JPH10507016A (ja) | ソフトウェア・コンパイル・ユニットを条件付きでコンパイルするシステム、方法およびコンパイラ・プリプロセッサ | |
CN114153460A (zh) | 一种校验方法、装置、电子设备及存储介质 | |
CN1302378C (zh) | 链接转换的小型应用程序文件的方法和设备 | |
CN111241064B (zh) | 一种数据库配置文件的处理方法、装置及存储介质 | |
US20040181777A1 (en) | Method and device for programming electronic devices using a uniform parameter format | |
CN116841906A (zh) | 智能合约的检测方法、装置及电子设备 | |
CN116431603A (zh) | Plc程序的存储和加载方法、装置和电子设备 | |
CN115098076A (zh) | 一种用于Android系统的代码生成方法 | |
CN114153461A (zh) | 一种脚本处理方法、装置、电子设备及存储介质 | |
CN115167862A (zh) | 补丁方法及相关设备 | |
CN113886145A (zh) | 基于片内flash且无需重新烧写的程序自备份方法 | |
US20080216099A1 (en) | System for Generating Optimized Computer Data Field Conversion Routines | |
CN113760249A (zh) | 程序文件的处理方法、装置及设备 | |
CN114579135B (zh) | 一种安装包生成方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |