zoukankan      html  css  js  c++  java
  • 利用Python计算单片机bin文件的CRC32值

    有时候我们需要计算bin文件的CRC值,比如OTA的固件(我们升级程序前,需要校验OTA固件的CRC值,判断固件数据是否正确)。这里给出一个简单的python脚本,用于计算bin文件的CRC32值,需要说明的是:这里的bin文件默认有4个字节的区域为0(偏移地址0x0000001c),用于存放计算后的CRC32值。

    cac_crc32_pyscript:

     1 # -*- coding:utf-8 -*-
     2 import binascii
     3 import os
     4 import sys
     5 
     6 def crc2hex(crc):
     7     res=''
     8     for i in range(4):
     9         t=crc & 0xFF
    10         crc >>= 8
    11         res='%02X%s' % (t, res)
    12     return res
    13 
    14 inputfile = "E:/Telink BLE/.../826x_zi_app.bin"#实际存放的bin文件路径
    15 isfile = os.path.isfile(inputfile);
    16 print(inputfile);
    17 
    18 fp = open(inputfile, "r+b")  #直接打开一个文件,如果文件不存在则创建文件
    19 filesize = os.path.getsize(inputfile)
    20 print("ZI app firmware size:", filesize, "bytes.")
    21 
    22 #计算bin文件的CRC,首先清空CRC32区域的4个byte
    23 fp.seek(0x1c, 0)#从bin文件开始,偏移地址为0x1c的地方存放bin的CRC32
    24 clear4bytes = '00000000'
    25 c4 =binascii.unhexlify(clear4bytes)
    26 fp.write(c4)  #将CRC32存放的区域4bytes清零
    27 fp.seek(0, 0)#从0开始读取整个bin
    28 file_content = fp.read()#读整个文件内容到 file_content
    29 crc = binascii.crc32(file_content)
    30 print('CRC32:', hex(crc))
    31 
    32 fp.seek(0x1c, 0)#从bin文件开始,偏移地址为0x1c的地方存放bin的CRC32 
    33 #存放计算CRC32四个字节
    34 crcstr_2 = crc2hex(crc)    
    35 r=binascii.unhexlify(crcstr_2)  
    36 fp.write(r)
    37 fp.close()
    38 
    39 sys.exit(0)##正常退出

    计算bin文件crc32主要用到python模块binascii,详细接口说明可以参考文档:https://docs.python.org/2/library/binascii.html

    windows运行cmd,输入python “cac_crc32_pyscript.py”,按回车键运行结果如下:

    网上有许多在线计算文件CRC、MD5、SHA1等值的小工具,这里推荐一个比较好用的网站:http://www.atool.org/file_hash.php可以直接把固件拖放到该网站,和python脚本计算的结果比较:

    可以看出两个方式的结果计算一致,心里有底。

  • 相关阅读:
    IBM openblockchain学习(五)--consensus源码分析
    Linux内核抢占机制
    IBM openblockchain学习(四)--crypto源码分析
    IBM openblockchain学习(三)--Ledger源码分析
    IBM openblockchain学习(二)--chaincode源码分析
    瞎谈“认知计算”
    IBM openblockchain学习(一)--obc-peer环境搭建
    10G数据不用框架快速去重
    Spark学习笔记(一)--Spark架构
    HDU2255 【模板】KM算法
  • 原文地址:https://www.cnblogs.com/twxbtx/p/7150056.html
Copyright © 2011-2022 走看看