http://supp.iar.com/Support/?note=64424&from=note+11927

Background
The STM32 devices from ST Micro have a built-in hardware CRC32 calculator. (So using CRC32 in an application does not use up code space for the algorithm.)

Problem
The CRC32 algorithm used in STM32 devices could not be reproduced by the ielftool utility before EWARM version 5.50.

Solution for EWARM version 6.40 and later
Options for 6.40 and later

Options are added to Project > Options > Linker > Checksum to enable ielftool to make CRC32 calculation in the same way as the hardware in the STM32 devices.

The options should be set as follows:

    Size:  bytes
Alignment:
Algorithm: CRC32(0x4C11DB7)
Complement: As is
Bit order: MSB first
[ ]Reverse byte order within word [unchecked]
Initial Value: 0xFFFFFFFF
[ ]Use as input [unchecked]
Checksum unit size: -bit
Example for STM32F10x

This example shows source code, the linker configuration file and the corresponding settings in the linker options dialog.

#include "stm32f10x_crc.h"

extern uint32_t __checksum;

uint32_t calcCrc32( uint8_t* data, uint32_t len )
{
uint32_t* pBuffer = (uint32_t*) data;
uint32_t BufferLength = len / ;
uint32_t index = ; RCC_AHBPeriphClockCmd( RCC_AHBPeriph_CRC, ENABLE ); CRC_ResetDR( ); for ( index = ; index < BufferLength; index++ )
{
CRC->DR = pBuffer[ index ];
} return CRC->DR;
} void main( void )
{
... uint32_t valCrc32 =
calcCrc32((uint8_t*)0x08000000, 0x040000 - ); if ( valCrc32 == __checksum )
{
// TBD
}
else
{
// TBD
} ...
}

Linker configuration file (snippet)

define symbol __ICFEDIT_region_ROM_start__   = 0x08000000;
define symbol __ICFEDIT_region_ROM_end__ = 0x0803FFFB; place at address mem:0x0803FFFC { readonly section .checksum };
Solution for EWARM version 5.50

In version 5.50, ielftool can be configured to calculate CRC32 in the same manner as the calculation of CRC32 using the STM32 hardware. This ability is not documented and it can only be invoked as a command line option.

The details that concern the STM32 CRC32 algorithm are

0xFFFFFFFF as initial value.

Utilize the two new ielftool algorithm flags i and r.

The string to enter in Project > Options > Build Actions > Post-build command line is...

ielftool --fill 0xFF;__checksum_begin-__checksum_end
--checksum __checksum:,crc32:ir,0xFFFFFFFF;__checksum_begin-__checksum_end
--verbose $TARGET_PATH$ $TARGET_PATH$

...where these substrings are placeholders that needs to changed for the project in use:

__checksum

The name of the symbol where the checksum value should be stored.
Note that it must exist in the symbol table in the input ELF file.

__checksum_begin

The first address on which the checksum should be calculated.

__checksum_end

The last address on which the checksum should be calculated.

The preceding command line should be combined with all options reset (unchecked) in Project > Options > Linker > Checksum

ProjectOptionsLinkerChecksum(6.40) (32 KB)

ProjectOptionsLinkerChecksum(6.10-6.30) (31 KB)

Example (6.40)  ZIP, 654 KB)

Example (6.21) (ZIP, 645 KB)

Technical note 11927
Checksum calculation with IELFTOOL after linking with ILINK

Calculate CRC32 as in STM32 hardware (EWARM v.5.50 and later)的更多相关文章

  1. STM32 Hardware Development

    http://www.st.com/web/en/resource/technical/document/application_note/CD00164185.pdf AN2586 http://w ...

  2. 安全刻不容缓「GitHub 热点速览 v.21.50」

    作者:HelloGitHub-小鱼干 本周最热的事件莫过于 Log4j 漏洞,攻击者仅需向目标输入一段代码,不需要用户执行任何多余操作即可触发该漏洞,使攻击者可以远程控制用户受害者服务器,90% 以上 ...

  3. IAR EWARM Checksum Technical Note

    IELFTOOL Checksum - Basic actions EW targets: ARM, RH850, RX, SH, STM8 EW component: General issues ...

  4. STM32 CRC32与对应的软件CRC32(转)

    源:STM32 CRC32与对应的软件CRC32 简单实现STM32 CRC32使用 使用前记得使能STM32 CRC时钟 //STM32硬件CRC32 byte数据计算,将数据移到最高位,低位补上F ...

  5. 安装IAR ewarm

    一  安装准备 (ST方案) 1 嵌入式集成开发环境IAR ewarm 5.41 2 J-Link4.20 3 emberznet-4.3.0协议栈安装包 option1:tools - stm32软 ...

  6. algorithm@ Shortest Path in Directed Acyclic Graph (O(|V|+|E|) time)

    Given a Weighted Directed Acyclic Graph and a source vertex in the graph, find the shortest paths fr ...

  7. STM32之VCP1/VCAP2引脚的处理

    需要根据仔细根据手册来决定这两个引脚是直接接地还是电容下拉到地 转载:STM32的Vcap的问题及解决---原来经验也害人http://bbs.eeworld.com.cn/thread-499497 ...

  8. 【转载】STM32 ST-LINK Utility介绍、下载、安装、使用方法

    转载地址:https://blog.csdn.net/ybhuangfugui/article/details/52597133 总结的很好!!! Ⅰ.写在前面本文讲述的内容是STM32 ST-LIN ...

  9. 嵌入式单片机STM32应用技术(课本)

    目录SAIU R20 1 6 第1页第1 章. 初识STM32..................................................................... ...

随机推荐

  1. grep 正则表达

    常见的 grep 正则表达参数 -c # 显示匹配到得行的数目,不显示内容 -h # 不显示文件名 -i # 忽略大小写 -l # 只列出匹配行所在文件的文件名 -n # 在每一行中加上相对行号 -s ...

  2. 第10月第1天 iOS crash

    1. find /Applications/Xcode6.1.app -name symbolicatecrash -type f tempdeMac-mini:crash temp$ dwarfdu ...

  3. Zookeeper笔记之四字命令

    Zookeeper支持一些命令用来获取服务的状态和相关信息,因为这些命令都是四个字母的,所以一般称为四字命令. 四字命令可以使用telnet或者nc向服务器提交,使用下面这个脚本可以当做是一个简易的客 ...

  4. android getWidth()和getMeasuredWidth()方法的区别

    getWidth() Return the width of the your view. Returns The width of your view, in pixels. 源代码: public ...

  5. 采用jacob实现word转pdf

    网络上已经有很多这方面的内容,在用之前也是参考了好多别人的文章,下面记录下我自己的整合过程.整个过程都比较简单: 开发环境:win8 64位系统,在2008下面部署也是一样的. 文档要求jdk的版本要 ...

  6. Vue's Demo

    *.vue=<template> </template>+<style></style>+<script></script> s ...

  7. python之pip安装mysql-python失败

    前言 由于公司使用的python版本是python2,并且连接mysql的包是mysql-python,但是mysql-python 使用pip安装报错,需要C++环境等依赖,于是使用wheel直接安 ...

  8. mysql 获取当月日期天数

    本月总共天数:SELECT  TIMESTAMPDIFF(day,CURDATE(),(DATE_add(CURDATE(),INTERVAL 1 month)))

  9. Eclipse 中 不能创建 Dynamic web project

    工作要涉及web开发,之前下载的java SE (我的是luna) 版本默认无法新建web项目,也就是找不到Dynamic Web ,在网上看了些解决办法,最终却是解决了问题,说到底就是安装一些用于E ...

  10. 几个比较实用的CSS

    1.filter:chroma(color:#FFFFFF);    让指定的背景色透明,例: <table cellspacing = "0" cellpadding = ...