你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

在STM32系列中使用CRC外设

[复制链接]
STMCU小助手 发布时间:2022-12-3 18:00
引言
! m$ @1 B; K8 ?2 s& u, T$ H- {循环冗余校验(CRC)技术用于检测数字数据中的错误,但在检测到错误时不进行校正。该技术旨在检查数据传输或数据存储的完整性。在确保数据可靠性方面,CRC技术功能强大且易于实施。该技术的诊断覆盖范围可满足基本安全标准要求。这就是认证符合IEC 60335-1和 IEC 607030-1 标准(称为“B 级”要求)的ST固件时,在Flash内容完整性自检检查中使用CRC功能的原因。更多信息,请参阅应用笔记AN3307和适用于不同系列产品的相关固件包。当CRC校验和信息必须由链接器直接放入用户代码中时(主要以CRC描述符数据表的格式),建议在编译器手册中检查所有必要的CRC设置。CRC以多项式算法为基础。计算GF(2)中一个多项式除以另一个多项式的余数。余数被称为校验和,而被除数是数据,除数是生成多项式。0 x) f" g5 V1 h  [. b; Y
注: GF(2)(两元素伽罗瓦域)中的多项式是单变量x的多项式,其系数为0或1。
, w. ]8 S# W3 q本应用笔记描述了嵌入在所有STM32系列(F0、F1、F2、F3、F4、L1)中的循环冗余校验外设的功能,以及配置该外设所需的步骤。" H& n  o8 U! Q! Y+ L# R9 O

7 f/ @0 f) {2 a
本应用笔记的结构如下:
' W2 I2 k6 M7 `: ?• 第 1节介绍了STM32 CRC实现算法及其硬件实现优势。
7 t9 e/ ~" T2 a1 u; X• 第 2节描述了DMA作为CRC数据传输控制器的用法。; D; O: w, ~) E
• 第 3节描述了通过STM32器件移植CRC。
$ O# s: P$ |! s0 T5 ^, |  a- h6 j% G* z+ k  }% J
此外还提供了两个示例:
( p$ w& k# ?( g" K• CRC_usage示例:如何将CPU用作数据传输控制器来配置CRC。6 w9 k4 t( [( m' Y" v
• CRC_DMA示例:如何将DMA用作CRC数据传输控制器。
- ]0 p' ^( l) _4 }, E* T( A两个例子均支持执行时间测量。  a' }; M5 S8 F1 Y: A8 U
, m# z- J! U* j5 T. Y0 K9 ?
TXVNYNC`[3I3(CPU}EUGGDD.png
& T& f& G, e% Y
0 S5 b% x0 Y% \/ X
1 CRC外设概览
, ^0 l/ }; ^+ {" T  j4 q! V* h嵌入在所有STM32微控制器件中的CRC外设用于提供任意支持数据类型的CRC校验和代码。
7 j. l/ g6 L7 a$ c" t3 P: {1.1 CRC算法
8 E& a7 A7 ?3 y& W- D如图 1中所示,CRC算法有一个数据输入,并根据输入参数生成固定的校验和代码长度。: ~6 {' z, z- Y/ {, `* P' Q
8 r% W1 }/ G  ^  A2 E
  ^) ?* \: I% l# b7 T; g
GGFEAC2613E24Y9X]@S$$YN.png
8 I  a' X6 [% U4 C8 |% J' F& X1 `% K) `7 t3 ~  N3 |

6 B  o1 r7 u7 R6 p: G3 C$ S+ R已知的CRC算法之一是使用按位消息XORing技术进行多项式除法。这是微控制器中使用的最适合硬件或底层实现的技术。
$ g* L. E4 T8 a  M$ E" q该算法的输入参数为:
* ?! b5 l( }  h/ R• 被除数:也称为输入数据, 缩写为 “Input_Data”
/ V4 n2 s8 e: B/ b• 除数:也称为生成多项式,缩写为“POLY”! W0 B8 I# B% {! {# v% ~
• 初始CRC值:缩写为Initial_Crc”
( C8 ~7 S/ }. D+ G4 E3 I下文的图 2显示了CRC算法流程图。
7 e! X2 R0 L* F6 m* v* `+ X' j" d( O9 b! q
9 n0 {" L1 L! K- y2 L
QSYX[[F`JSSFRX[~)SIOJ_8.png 4 C& \& s6 V4 H: B- R* l
* Z1 j7 [6 H7 W. R
启动时,算法将CRC设置为带有Input_Data的Initial_Crc XOR。
3 s' b  T, g& ^, l4 B7 A, `" I一旦CRC MSB等于1,该算法将CRC向左移一位,并与POLY进行XOR。否则,只会将CRC向左移动一位。
/ Y. q: v/ ^% s4 q0 F& \0 l图 3显示了以下条件的逐步算法执行:
0 k! L" c) P3 H% j1 e3 ~3 P– Input_Data = 0xC1* d+ M: t/ q+ }* R8 t7 Q7 X
– POLY = 0xCB+ U# c3 v& U) A+ p, C
– Initial_Crc = 0xFF% M' Y0 q# `- c$ m

" M4 f2 ^" z- q) O- U2 x

  w$ ~" C/ ?5 j 9HX8_226]}~3]I)U8@NUG53.png % e2 q- U0 E, h! I* t" {

. {4 R# ]. P* U1.2 CRC外设配置
. D6 h5 J0 W3 l" G; c& X- [所有STM32器件均采用CRC外设,如第 1.1节中所述。CRC计算单元具有单个32位读/写数据寄存器 (CRC_DR)。它用于输入新数据(写访问)并保存以前的CRC计算结果(读访问)。+ F' C( u. K5 D: C
对数据寄存器的每个写操作都会对之前的CRC值(存储在CRC_DR中)和新值再做一次CRC计算。
% x$ j3 p' w; `- }* y$ r. U+ i0 g8 O/ w5 z- U7 K! Q5 N- t4 _

4 q: V! a* j  M% [0 j2 g B}(7@DEN9PL5LLKRG6D$(OH.png
- s$ }3 l! ^% x' Q/ b" [8 i
( S$ K, Z9 t, p0 Q9 |要计算任何支持数据的CRC,必须遵循以下步骤:
5 i( L9 x7 p5 x$ H6 ?1. 通过RCC外设启用CRC外设时钟。
* z# n3 w( W, u- p4 ?% z# c2. 通过配置初始CRC值寄存器(CRC_INIT),将CRC数据寄存器设置为初始CRC值 。(a)5 ~! n1 m( G; m4 o6 T, M7 C
3. 分别通过CRC控制寄存器(CRC_CR)中的REV_IN[1:0]和REV_OUT位设置I/O反转位顺序。(a)$ R6 \1 D' F% J2 s% a9 E+ t/ R
4. 分别通过CRC控制寄存器(CRC_CR)和CRC多项式寄存器(CRC_POL)中的POLYSIZE[1:0]位设置多项式大小和系数。(b)
" ], m/ M5 G0 H& O5. 通过CRC控制寄存器(CRC_CR)中的Reset位重置CRC外设。& ~& g' |0 w& s" x; v
6. 将数据设置到CRC数据寄存器。& z( h0 g$ T8 r; g) M* ~* U
7. 读取CRC数据寄存器的内容。
+ w0 I: D6 f* l3 Q/ T. D( G1 a8. 禁用CRC外设时钟。" e0 r- d0 q- S6 a9 [5 k7 }
在固件包中,CRC_usage示例运行CRC校验和代码,计算256个支持数据类型的数组数据6 L' w; b2 k0 X9 @
(DataBuffer)。有关完整说明,请参阅CRC_usage文件夹中的文件Readme.txt 。
/ C+ t7 C. g8 ^
& `4 D8 q8 @2 }8 C: G9 V5 n% S+ ~' A- L, }0 m2 D5 `) v4 J$ ~
完整版请查看:附件2 J6 J6 s0 ]  U' F

在STM32系列中使用CRC外设.pdf

下载

377.72 KB, 下载次数: 24

收藏 评论0 发布时间:2022-12-3 18:00

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版