Calculate CRC32 as in STM32 hardware (EWARM v.5.50 and later)
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. |
|
__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)的更多相关文章
- STM32 Hardware Development
http://www.st.com/web/en/resource/technical/document/application_note/CD00164185.pdf AN2586 http://w ...
- 安全刻不容缓「GitHub 热点速览 v.21.50」
作者:HelloGitHub-小鱼干 本周最热的事件莫过于 Log4j 漏洞,攻击者仅需向目标输入一段代码,不需要用户执行任何多余操作即可触发该漏洞,使攻击者可以远程控制用户受害者服务器,90% 以上 ...
- IAR EWARM Checksum Technical Note
IELFTOOL Checksum - Basic actions EW targets: ARM, RH850, RX, SH, STM8 EW component: General issues ...
- STM32 CRC32与对应的软件CRC32(转)
源:STM32 CRC32与对应的软件CRC32 简单实现STM32 CRC32使用 使用前记得使能STM32 CRC时钟 //STM32硬件CRC32 byte数据计算,将数据移到最高位,低位补上F ...
- 安装IAR ewarm
一 安装准备 (ST方案) 1 嵌入式集成开发环境IAR ewarm 5.41 2 J-Link4.20 3 emberznet-4.3.0协议栈安装包 option1:tools - stm32软 ...
- 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 ...
- STM32之VCP1/VCAP2引脚的处理
需要根据仔细根据手册来决定这两个引脚是直接接地还是电容下拉到地 转载:STM32的Vcap的问题及解决---原来经验也害人http://bbs.eeworld.com.cn/thread-499497 ...
- 【转载】STM32 ST-LINK Utility介绍、下载、安装、使用方法
转载地址:https://blog.csdn.net/ybhuangfugui/article/details/52597133 总结的很好!!! Ⅰ.写在前面本文讲述的内容是STM32 ST-LIN ...
- 嵌入式单片机STM32应用技术(课本)
目录SAIU R20 1 6 第1页第1 章. 初识STM32..................................................................... ...
随机推荐
- python中的__new__、__init__和__del__
__new__.__init__.__del__三个方法用于实例的创建和销毁,在使用python的类中,我们最常用的是__init__方法,通常称为构造方法,__new__方法几乎不会使用,这篇文章是 ...
- 第10月第20天 afnetwork like MKNetworkEngine http post
1. + (AFHTTPRequestOperation *)requestSellerWithCompletion:(requestFinishedCompletionBlock)successBl ...
- 6 个 Linux 运维典型问题,大牛的分析解决思路在这里 【转】
作为一名合格的 Linux 运维工程师,一定要有一套清晰.明确的解决故障思路,当问题出现时,才能迅速定位.解决问题,这里给出一个处理问题的一般思路: 重视报错提示信息:每个错误的出现,都是给出错误提示 ...
- WebBrowserのIEバージョンを最新にする。
WindowsフォームでWebBrowserコントロールを配置すると.IEのバージョンが 7 と古い.レジストリをいじると.IE11の Edgeモードに変更できる(参考記事).デザイン画面でWebBr ...
- artDialog4.1.7 摘自网络
jquery.artDialog.source.js学习 1 关键的对象关系 art = jQuery = $ function artDialog() {...} artDialog.fn = ar ...
- 使用SpringCloud搭建高可用服务注册中心
我们需要的,不仅仅是一个服务注册中心而已,而是一个高可用服务注册中心. 上篇博客中我们介绍了如何使用Spring Cloud搭建一个服务注册中心,但是搭建好的服务注册中心是一个单节点的服务注册中心,这 ...
- Robotium_断言方法assert、is、search
下面的这些方法都主要用来判断测试结果是否与预期结果相符,一般把is和search方法放在assert里面判断.assert最常用的还是assertThat方法,是Junit的判断,这里就不多说了.断言 ...
- LeetCode(10):正则表达式匹配
Hard! 题目描述: 给定一个字符串 (s) 和一个字符模式 (p).实现支持 '.' 和 '*' 的正则表达式匹配. '.' 匹配任意单个字符. '*' 匹配零个或多个前面的元素. 匹配应该覆盖整 ...
- Laravel中服务提供者和门面模式
在laravel中,我们可能需要用到自己添加的类时,可以建立一个文件夹专门存放类文件,也可以使用laravel的服务提供者的方式来使用. 这两者其实区别不大,主要是前者使用的话,会跟业务代码产生依赖, ...
- windows 2008 启用.NET Framework 3.5
Win2008下已经集成了.NET 3.5.1 framework,需要在管理界面打开! 方法和步骤是: 服务器管理器 -> 功能 -> 添加功能 然后在“选择功能”界面勾选“.NET F ...