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

在STM32系列中使用CRC外设

[复制链接]
STMCU小助手 发布时间:2022-7-19 16:00
引言6 ^/ x+ X* }- z9 o" E& H" i
循环冗余校验(CRC)技术用于检测数字数据中的错误,但在检测到错误时不进行校正。该技术旨在检查数据传输或数据存储的完整性。在确保数据可靠性方面,CRC技术功能强大且易于实施。该技术的诊断覆盖范围可满足基本安全标准要求。这就是认证符合IEC 60335-1 和 IEC 607030-1 标准(称为“B 级”要求)的ST固件时,在Flash内容完整性自检检查中使用CRC功能的原因。更多信息,请参阅应用笔记AN3307和适用于不同系列产品的相关固件包。当CRC校验和信息必须由链接器直接放入用户代码中时(主要以CRC描述符数据表的格式),建议在编译器手册中检查所有必要的CRC设置。
" Y% L- J% N7 D, x; R! j) e; BCRC以多项式算法为基础。计算GF(2)中一个多项式除以另一个多项式的余数。余数被称为校验和,而被除数是数据,除数是生成多项式。
5 K3 w; T7 L: u  y) I; `  @
' J8 s9 M# S% K, _; [0 i7 I3 j. b
注: GF(2)(两元素伽罗瓦域)中的多项式是单变量x的多项式,其系数为0或1。+ u* T0 _- M( L: U* D( k  i
& D/ m7 ?! |+ Z0 I! R
本应用笔记描述了嵌入在所有STM32系列(F0、F1、F2、F3、F4、L1)中的循环冗余校验外设的功能,以及配置该外设所需的步骤。' T! \, g. s0 H% I3 {# U
本应用笔记的结构如下:
) P7 p! ~+ H6 d• 第 1节介绍了STM32 CRC实现算法及其硬件实现优势。
2 g: e/ ]4 j3 d5 i/ M9 G* k$ I• 第 2节描述了DMA作为CRC数据传输控制器的用法。
! w! W/ r& N: L: s  j8 p6 D6 T9 d# T• 第 3节描述了通过STM32器件移植CRC。
( y$ ^; h: R( n7 h: p/ j此外还提供了两个示例:2 j% b( ^* n/ k( l2 D
• CRC_usage示例:如何将CPU用作数据传输控制器来配置CRC。 " `9 I0 k. S: c+ \2 H
• CRC_DMA示例:如何将DMA用作CRC数据传输控制器。
" F4 ]$ s4 j* D( y4 @0 d" a两个例子均支持执行时间测量。! ?5 H' D( {' Y' z  f
8 Z! T. Q+ |; y! K* g. \

; s3 o6 Q7 K- k1 B9 V4 w  @6 k, U8 P6 l
, n$ ]6 {- [5 m/ ^+ H
1 CRC外设概览
9 Z' s5 [# N4 A+ F- x) u2 x  q嵌入在所有STM32微控制器件中的CRC外设用于提供任意支持数据类型的CRC校验和代码。  Q2 i' n9 [9 r' q+ K! T
1.1 CRC算法
" O+ D0 s  ?. W如图 1中所示,CRC算法有一个数据输入,并根据输入参数生成固定的校验和代码长度。7 S! Y6 w+ N0 E9 X

$ M9 O* B2 D0 B5 {0 A  k& O

6 s( g- U" o$ f( Q; B+ K. {8 g# w5 b Z3MU661K8AG9KA7[GY4E6.png
8 }! N( G6 C% e$ H8 k3 M% x4 d2 Z$ O% H. H; t, O8 [, K

) r5 e# j/ r& Q1 x. ~6 Y& h9 V, v  u9 ~6 a
已知的CRC算法之一是使用按位消息XORing技术进行多项式除法。这是微控制器中使用的最适合硬件或底层实现的技术。
( B. Y4 T9 E1 g+ a; h' ~该算法的输入参数为:' y3 v! g' r0 ], I2 `' ]# C0 T9 V
•被除数:也称为输入数据, 缩写为 “Input_Data”, Z+ U  F" l9 Q( m
•除数:也称为生成多项式,缩写为“POLY”
7 ?% ?. d! T; B4 f6 k$ d•初始CRC值:缩写为Initial_Crc”' v/ {  ], T6 E. A8 _% X
下文的图 2显示了CRC算法流程图。
7 z7 `8 z$ R6 U7 a1 x0 Z& e$ G( v2 t

* l3 T( Q' I' @/ L %(6]GFM_(JMPFYBF]Q)2PKW.png ( n* \% S" r8 e/ P
7 E9 x8 N: D+ J2 O' ?- ?

. H6 A$ e1 k) d4 u1 E# ~& ^) G- N- E7 D( v$ R3 R% J* a! U8 R
启动时,算法将CRC设置为带有Input_Data的Initial_Crc XOR。
5 G8 r, W' _' d# S1 w% J% T; i一旦CRC MSB等于1,该算法将CRC向左移一位,并与POLY进行XOR。否则,只会将CRC向左移动一位。1 ]0 C9 T4 l; R/ H
图 3显示了以下条件的逐步算法执行:% F. q/ |! X: a# V$ g' x  K2 W6 @- [
– Input_Data = 0xC1
7 r) h+ G3 m8 L" T- T– POLY = 0xCB5 o: v3 q( @1 a& ]5 v, X" Z! E8 w
– Initial_Crc = 0xFF" b9 K. I$ v  g3 j# l+ t
% M4 G  ^; h1 z0 ?
! J+ N% `' V( s) e6 l* r
FFJAY0)36[RMR1O@$Y3(R@V.png
% j- M0 s/ }, u8 }! ~# \. i0 O6 p# q! S8 _6 g

0 n* z/ V$ ^: j' c
$ C2 \, b' e8 n4 B1.2 CRC外设配置! _' k: f0 g$ Q# T) S
所有STM32器件均采用CRC外设,如第 1.1节中所述。CRC计算单元具有单个32位读/写数据寄存器 (CRC_DR)。它用于输入新数据(写访问)并保存以前的CRC计算结果(读访问)。
7 j6 f5 S+ s& Y5 w' f& h/ }对数据寄存器的每个写操作都会对之前的CRC值(存储在CRC_DR中)和新值再做一次CRC计算。
( L7 K2 @' z% O, S7 I
; n/ c  {! ]- G) R* V
9 }  v0 W+ L3 f: R  }8 Z7 \0 K
6H8X8YQ%L1I{HCP2}GH8NXT.png
# u* J: d& |+ B" I% W" d0 f
4 Y% p5 Z' l; p) K9 {

5 C2 t9 E3 j5 q7 T3 Y# j* `5 _% r% X3 w3 y
要计算任何支持数据的CRC,必须遵循以下步骤:) }1 |2 U) q: I  m. C0 r3 ]" P
1. 通过RCC外设启用CRC外设时钟。
& o5 ~* M6 q" ~2. 通过配置初始CRC值寄存器(CRC_INIT),将CRC数据寄存器设置为初始CRC值 。(a). i: ^6 u2 Z' Q4 P2 E9 }
3. 分别通过CRC控制寄存器(CRC_CR)中的REV_IN[1:0]和REV_OUT位设置I/O反转位顺序。(a)
+ N. `0 t8 J/ q3 }) k5 H4. 分别通过CRC控制寄存器(CRC_CR)和CRC多项式寄存器(CRC_POL)中的POLYSIZE[1:0]位设置多项式大小和系数。(b)
0 M+ C. A; N8 L) o4 ~% j5. 通过CRC控制寄存器(CRC_CR)中的Reset位重置CRC外设。- A) D6 J, t% S+ ^, F5 }
6. 将数据设置到CRC数据寄存器。
- [4 i% s) M) I! x" M9 y7. 读取CRC数据寄存器的内容。: S% k: i# B8 g* Z
8. 禁用CRC外设时钟。
5 r" z  O. ]; f在固件包中,CRC_usage示例运行CRC校验和代码,计算256个支持数据类型的数组数据
) H3 p( o' t1 Q5 y& t% {2 g(DataBuffer)。有关完整说明,请参阅CRC_usage文件夹中的文件Readme.txt 。0 {: e/ B% i0 o6 W: r& R) A! v6 }
# t: g8 r- J4 G  J

" e3 T/ Y( m: w1 m) R8 K, R  p3 R$ S
完整版请查看:附件
6 W, I: m% B' B" U7 w) {( P& k! ^# z+ b( Z9 y6 l" ?

2 O2 a1 e  }2 P- ~
6 _% w5 ~/ n+ `( i
1S$6)%M5%%RMH833_UCNY_3.png

DM00068118ZHV1.pdf

下载

315.77 KB, 下载次数: 0

赞 收藏 评论0 发布时间:2022-7-19 16:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版