精华内容
下载资源
问答
  • 文件校验
    千次阅读
    2021-08-18 00:21:44

    关注+星标公众,不错过精彩内容

    编排 | strongerHuang

    微信公众号 | 嵌入式专栏

    手机升级系统,下载完系统都会存在一个校验过程:

    其实,在MCU升级过程中,也是需要校验hex文件,如果要想升级更可靠,还可以在hex或bin升级文件后再增加校验信息。

    我们之前公司做的一个远程升级的产品,就是在升级文件之后增加了CRC16校验信息,在接收完整个升级文件之后,进行校验,这样做的目的就是使升级更可靠。

    今天来讲讲hex文件的校验和验证校验的内容。

    关于Hex

    hex 格式文件由 Intel 制定的一种十六进制标准文件格式,是由编译器转换而成的一种用于下载到处理器里面的ASCII文本文件。

    1.解释

    维基百科解释

    https://en.wikipedia.org/wiki/Intel_HEX

    Intel HEX is a file format that conveys binary information in ASCII text form. It is commonly used for programming microcontrollers, EPROMs, and other types of programmable logic devices. In a typical application, a compiler or assembler converts a program's source code (such as in C or assembly language) to machine code and outputs it into a HEX file. The HEX file is then imported by a programmer to "burn" the machine code into a ROM, or is transferred to the target system for loading and execution.

    Keil官网解释

    https://www.keil.com/support/docs/1584/

    The Intel HEX file is an ASCII text file with lines of text that follow the Intel HEX file format. Each line in an Intel HEX file contains one HEX record. These records are made up of hexadecimal numbers that represent machine language code and/or constant data. Intel HEX files are often used to transfer the program and data that would be stored in a ROM or EPROM. Most EPROM programmers or emulators can use Intel HEX files.

    2.格式

    hex行格式:

    :BBAAAATT 【D···D】CC

    其中:

    代表行开始,固定为冒号:

    BB代表Bytes,数据长度

    AAAA代表Address,地址

    TT代表Type,数据类型(标识)

    D···D代表Date,数据

    CC代表CheckSum,校验和

    说明:

    BB数据长度,也就是D···D这个字段的数据长度;

    AAAA地址,起始地址、偏移地址,根据数据类型(TT)有关;

    TT数据类型(标识):

    • 00:数据标识

    • 01:文件结束标识

    • 02:扩展段地址

    • 04:线性地址

    • 05:线性开始地址

    (地址代表高16位地址,也就是要向左移16bit)

    CC校验和计算公式:

    CheckSum = 0x100 - (Sum & 0xFF)
    

    实例描述Hex

    下面通过一个例子来说明hex。

    说明一下:不同数据类型的数据略有差异,先再看下00(数据类型)的格式:

    一个常见hex文件:

    :020000040800F2
    :1000000000040020B1010008FD020008BD02000844
    :10001000F902000801020008350400080000000091
    :1000200000000000000000000000000021030008A4
    ···省略数行
    :100470000000024084040008000000200004000086
    :040480004804000824
    :040000050800019955
    :00000001FF
    

    1.04类型:线性地址行

    :020000040800F2
    

    02:数据长度,这里是(0800)地址的2字节长度;

    0000:偏移地址,这里数据其实无效;

    04:线性地址数据类型;

    0800:线性起始地址,左移16位,即:0x0800 0000;

    F2:校验和

    F2 =  0x100 - (0x02 + 0x04 + 0x08);

    比如,修改起始地址为0600:

    2.00类型:数据行

    :1000000000040020B1010008FD020008BD02000844
    

    10:数据长度,这里是16字节(程序)数据的长度;

    0000:偏移地址,数据第一行偏移0000地址,第二行就是偏移0010,第二行就是偏移0020,依次偏移到FFF0;

    如果偏移到FFF0,则会重新下一个起始地址,一段程序你就明白了:

    :10FFD000D0C5CFA20D0A00003052010810B50A4862
    :10FFE00002F0FEFC09A002F0FBFC14A002F0F8FCF9
    :10FFF0001EA221A123A002F0F3FC2CA002F0F0FC31
    :020000040801F1
    :10000000394802F0EDFC10BD3C5301080D0A2A20CE
    :1000100020202020202020202020202020202020E0
    :100020002020202020202020202020414756D6C7F5
    

    00:线性地址数据类型;

    00040020B1010008FD020008BD020008:程序数据,就是bin文件里面的纯程序数据;

    44:校验和

    44 =  0x100 - (0x10 + 0x04 + 0x20 + 0xB1 + 0x01 + 0x08 + 0xFD + 0x02 + 0x08 + 0xBD + 0x02 + 0x08 + 0x44) & 0xFF;

    3.01类型:文件结束行

    :00000001FF
    

    00:数据长度;

    0000:偏移地址,这里数据其实无效;

    01:代表文件结束

    FF:校验和

    这里代表hex文件结束了,有些公司为了使hex传输(下载)更可靠,或通过工具(或命令在)结束行后面追加校验信息,一般远程升级会考虑更多校验信息(后期抽时间讲述一下远程升级)。

    更多细节内容,可以参看链接:

    https://www.keil.com/support/docs/1584/

    https://www.kanda.com/blog/microcontrollers/intel-hex-files-explained/

    (公号不支持外链接,请复制链接到浏览器打开)

    看到这里,我相信很多人都能写一个脚本工具,让hex转为bin文件(后面抽空给大家讲述一下hex和bin转换的工具)。

    Hex校验测试代码

    Hex实际占用存储区大小计算办法:

    Hex实际大小=文件结束标志前面一条记录的存储起始地址+这条记录的有效数据长度。

    下面算法实现hex行的校验,校验成功返回1,失败返回0:

    bit AnalyseHEX(char hex[],int len)
    {
      unsigned char i=1;
      unsigned char data;
      int cc=0;
      char temp[2];
      do
      {
          temp[0] = hex[i++];
          temp[1] = hex[i++];
          sscanf(temp,"%x",&data);
          cc += data;
      } while (i<(len-2));
      cc%=256;
      cc=0x100-cc;
      temp[0] = hex[i++];
      temp[1] = hex[i++];
      sscanf(temp,"%x",&data);
      return (cc==data)?1:0;
    }
    

    当然,实现的算法可以各式各样,按照原理实现即可。

    更多关于升级文件的内容,可以参看文章:轻松理解bin、hex、axf和elf文件格式

    免责声明:本文素材来源网络,版权归原作者所有。如涉及作品版权问题,请与我联系删除。

    ------------ END ------------

    后台回复『文件格式』『科普知识』阅读更多相关文章。

    欢迎关注我的公众号回复“加群”按规则加入技术交流群,回复“1024”查看更多内容。

    欢迎关注我的视频号:

    点击“阅读原文”查看更多分享,欢迎点分享、收藏、点赞、在看。

    更多相关内容
  • 目前校验文件使用最多的是MD值和SHA值,不外乎有些使用CRC,前段时间微软发布了VisualStudio正式版,win镜像,微软官方给出的校验方式都是校验文件的...下面详细介绍C#之文件校验工具的开发及问题,需要的朋友可以参考下
  • 主要介绍了Java防止文件被篡改之文件校验功能,本文给大家分享了文件校验和原理及具体实现思路,需要的朋友可以参考下
  • matlab环境下的文件校验工具, 语法:File_verification_cmd(); 适用:放入工作路径,输入File_verification_cmd();,按照提示输入和选择文件即可。 原理:调用Windows的certutil -hashfile命令进行校验 功能: ...
  • 也可以文件比较: (打开文件前请在列表中选择算法类型)HashTab 是款Windows 外壳扩展程序,它在 Windows 资源管理 器的文件属性窗口中添加了一个叫做“文件校验”的标签。该标签可以帮 助你方便地计算文件的 ...
  • 文件校验工具.zip

    2018-06-28 13:42:42
    文件校验工具.zip文件校验工具.zip文件校验工具.zip文件校验工具.zip文件校验工具.zip
  • python3.6.2写的文件校验工具,支持md5,sha1,sha256,sha512;大文件会出现未响应的情况,只需稍微等待一会;windows10下测试可用;tkinter写的界面,不支持文件拖放.
  • QtHashSum:用C ++ Qt编写的文件校验和完整性验证程序和重复文件查找器
  • 文件校验工具

    2018-10-07 19:31:39
    用于文件校验,比对各种加密方式后的结果,非常好用!
  • 文件校验工具.exe

    2020-03-21 21:02:02
    到Maven仓库中找到疑似下载失败的jar包使用文件校验工具文件校验打开工具将要验证的jar包拖拽进工具界面比较SHA1值一致:确定jar包下载成功,内部正确没问题不一致:确定jar包内部损坏。
  • 文件校验工具 CRC32 MD5 HASH校验码自动计算工具 可自动生成导入文件的以上校验码
  • 文件校验工具 MD5 校验王中文版文件校验工具 MD5 校验王中文版 MD5 校验王可以对任意文件进行版本,文件时间,MD5值,SHA1值,CRC32值的校验。 计算选项: 版本:当选择校验文件为exe或者dll文件时,在运算结果中...
  • Java实现MD5大文件校验码详细解析: 包括具体方法解释、注释 通俗易懂、易于理解
  • 网页文件校验器 v1.0

    2019-11-06 06:36:31
    网页文件校验器,用于检查网站代码是否被修改或挂马,站长的安全小助手,本版为单机版,需要将网站代码下载到本地进行校验,校验文件时可灵活选择需要校验的文件类型。
  • 文件校验码计算.exe

    2019-10-30 15:09:11
    文件校验码计算,文件md5,sha1,crc32计算 文件校验码计算,文件md5,sha1,crc32计算
  • 文件校验码示例

    2016-12-12 21:58:00
    21 CFR Part11中关于数据完整性校验中用到的数据文件校验码示例。
  • 随着数字资源不断发展,面对大容量的数字资源校验时,现有的文件校验方法相比于传统文件校验在执行效率、服务器资源利用率方面已有极大的提高,但仍存在不灵活、服务器资源浪费、文件校验存在限制等特性.本文提出一...
  • md5文件校验器,窗口操作,简单便捷,速度快,下载大文件时很有用
  • 文件校验和计算工具

    2013-07-24 11:25:07
    通过MD5,计算文件校验和.程序使用JAVA语言编写,用户可方便地改为C#或其他语言。
  • 压缩包中包含crc32文件校验的源码与demo程序.
  • PEChecksum计算PE文件校验和的工具 ,当修改了bootmgr.exe,就需要这工具重新校验
  • 计算文件校验码: [root@linuxcool ~]# sum insert.sql 00827 12 与该功能相关的Linux命令:pssh命令 – 批量管理执行readlink命令 – 找出符号链接所指向的位置nl命令-添加行号bzmore命令 – 查看bzip2压缩过的...
  • vc实现MD5文件校验

    2014-12-25 16:41:14
    拖放目标文件到对话框内,即可得到文件的md5值,单击生成校验按钮,就可为此文件生成一个.cyy后最的文件校验文件,下次拖拖放就该文件就可知道文件是否被修改过.(防止存储的文件被绑马而自己不知道)
  • crc16 MD5 个人项目中用的 现在分享给大家。顺便刷点分
  • 文件校验工具
  • FileCheck 文件检验工具,支持文件或者文件夹批量校验,包括:版本、时间、MD5、SHA1、CRC32。
  • 写一个简单的脚本,对特定系统文件定期做一个完整性校验,使用Linux下的md5sum工具对特定目录的文件进行MD5校验
  • 为您提供文件校验工具 EF CheckSum Manager下载,EF CheckSum Manager是一款实用的文件校验工具,支持批量批量校验,并且校验速度非常快,能够通过SFV、MD5和SHAx来校验一个文件的完整性,由此确认所下载的文件是否...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 503,791
精华内容 201,516
关键字:

文件校验