IAR自动生成带CRC-32/MPEG-2校验的bin文件

IAR自动生成带CRC-32/MPEG-2校验的bin文件

本文主要介绍如何在IAR中生成带校验码的bin文件,并存储在指定的地址(bin文件末尾),以便于在Boot Loader程序和APP程序中读写烧写文件进行软件升级前通过校验码的对比检查代码的完整性。

在IAR Embedded Workbench中生成对应代码区域的校验码并存储在指定的地址

下面的选项使用CRC-32/MPEG-2为例生成对应代码区域的校验码: 在IAR Embedded Workbench工程选项(Options)里面Linker选项里面生成Checksum

在这里插入图片描述

  • 勾选“Fill unused code memory”:

    • Fill pattern里面填充相应的值
    • Start address和End address输入对应代码区域的地址(注意:不能包括存放Checksum的地址区域。比如,Checksum存放与0x0803FFFC ~ 0x0803FFFF, End address需要输入0x0803FFFB)
  • 勾选“Generate Checksum”:

    • Checksum Size: 选择 “4 bytes”,
    • Alignment: 输入 “4”,
    • Algorithm: 选择 “CRC32”
    • Complement: 选择 “As is”,
    • Initial value: 输入“0xFFFFFFFF”,不要勾选“Use as input”
    • Bit order: 选择 “MSB first”
    • 不要勾选 “Reverse byte order within word”
    • Checksum unit size: 选择 “8-bit”

在ICF文件中输入相应命令将Checksum放置指定的地址(这里是将checksum放置到Flash的最后):

place at end of ROM_region { section .checksum };

ICF文件位置

配置到这就OK了,build后就可以看到生成的bin文件末尾有4字节的校验码。

在线计算:http://www.ip33.com/crc.html

CRC-32/MPEG-2模型计算公式:

//参数可以自己修改哈
uint32_t crc32_mpeg_2(uint8_t data[], uint32_t crc, uint16_t length)
{
    uint8_t 	i;
	uint32_t	count = 0;
    //uint32_t crc = 0xffffffff;  // Initial value
    while(length--)
    {
        crc ^= (uint32_t)(data[count++]) << 24;// crc ^=(uint32_t)(*data)<<24; data++;
        for (i = 0; i < 8; ++i)
        {
            if ( crc & 0x80000000 )
                crc = (crc << 1) ^ 0x04C11DB7;
            else
                crc <<= 1;
        }
    }
    return crc;
}

参考链接:https://zhuanlan.zhihu.com/p/622468694

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值