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

在STM32系列中使用CRC外设

[复制链接]
STMCU小助手 发布时间:2022-11-12 15:39
引言
4 F3 d  |$ K8 l$ r$ `  N1 v循环冗余校验(CRC)技术用于检测数字数据中的错误,但在检测到错误时不进行校正。该技术旨在检查数据传输或数据存储的完整性。在确保数据可靠性方面,CRC技术功能强大且易于实施。该技术的诊断覆盖范围可满足基本安全标准要求。这就是认证符合IEC 60335-1和 IEC 607030-1 标准(称为“B 级”要求)的ST固件时,在Flash内容完整性自检检查中使用CRC功能的原因。更多信息,请参阅应用笔记AN3307和适用于不同系列产品的相关固件包。当CRC校验和信息必须由链接器直接放入用户代码中时(主要以CRC描述符数据表的格式),建议在编译器手册中检查所有必要的CRC设置。! w2 _! {- E' t: j$ {
CRC以多项式算法为基础。计算GF(2)中一个多项式除以另一个多项式的余数。余数被称为校验和,而被除数是数据,除数是生成多项式。
% J- i( a* Y. A1 O, j, ~注: GF(2)(两元素伽罗瓦域)中的多项式是单变量x的多项式,其系数为0或1。
. z/ h. a8 {8 _+ r1 P! m本应用笔记描述了嵌入在所有STM32系列(F0、F1、F2、F3、F4、L1)中的循环冗余校验外设的功能,以及配置该外设所需的步骤。3 p; z3 ~& I/ n: ~
本应用笔记的结构如下:
; ]2 U6 r) V* f- w6 Y• 第 1节介绍了STM32 CRC实现算法及其硬件实现优势。& R# g5 d  c& U& k3 t: b
• 第 2节描述了DMA作为CRC数据传输控制器的用法。
' N( D" y! z- Y9 W+ L+ A! \• 第 3节描述了通过STM32器件移植CRC。
6 f$ d4 B& [. e7 {) K, x此外还提供了两个示例:: V2 A+ C! s( m% M9 b
• CRC_usage示例:如何将CPU用作数据传输控制器来配置CRC。
! m: Q, N9 U# ~) V0 p$ {• CRC_DMA示例:如何将DMA用作CRC数据传输控制器。
5 k8 k: m2 _' F! I  A  t: h两个例子均支持执行时间测量。
6 H( G) V1 U4 [4 L# I: F NNWJ}%_[U[~K21)ZGY@LSYD.png   s7 u3 d) [2 k& y
' b# K6 W: e& |9 u

! R) H! p/ P0 z- k4 @, W1 CRC外设概览
. o  z( x3 o9 Q嵌入在所有STM32微控制器件中的CRC外设用于提供任意支持数据类型的CRC校验和代码。8 k5 |+ N+ [" G7 f/ p
1.1 CRC算法/ l  K! T" x4 e
如图 1中所示,CRC算法有一个数据输入,并根据输入参数生成固定的校验和代码长度。
- e4 W6 e' T: R. \3 j  K. ?% g+ _$ |& C9 @" _
WCMZK2ZC1CG}]$~D@LTL5~0.png & i  T* i* d* t0 d- x

7 t/ W8 d% A! B, Q! A* C3 J已知的CRC算法之一是使用按位消息XORing技术进行多项式除法。这是微控制器中使用的最适合硬件或底层实现的技术。, t- ~3 R$ W& }
该算法的输入参数为:* |8 e9 j9 f( R$ h+ [
• 被除数:也称为输入数据, 缩写为 “Input_Data”
4 d6 t! M+ Q% ?% Q$ H; M8 Y3 L( C• 除数:也称为生成多项式,缩写为“POLY”4 Q  S- O# P8 n5 i  I
• 初始CRC值:缩写为Initial_Crc”
& \( z, M/ k/ ^. B: u0 r0 b! W" u下文的图 2显示了CRC算法流程图。2 w( E8 Q* p% l3 y3 c

9 i3 b3 }* X+ q) @2 o( Y9 S B83HES]2FCF747K@B[[@_KL.png 0 f/ {6 C* z. R. o, \3 ?4 ]$ n

' }+ n/ \, u8 D- y- e5 j启动时,算法将CRC设置为带有Input_Data的Initial_Crc XOR。
# w' ~/ V& t/ _9 m3 E! ], ]; P一旦CRC MSB等于1,该算法将CRC向左移一位,并与POLY进行XOR。否则,只会将CRC向左移动一位。
, K2 M: @  u3 E; I4 A5 q图 3显示了以下条件的逐步算法执行:
- E+ J) I7 L9 X8 P/ o6 D– Input_Data = 0xC1/ K0 w; k* n0 }$ U. k: p
– POLY = 0xCB
5 S1 s, {! B$ |$ R' O$ a– Initial_Crc = 0xFF3 |/ [2 ?; \8 `/ H8 _7 [
+ V+ M/ G8 z/ S) q" L
JJ`{8~LX$WX4_SN1S8_()0T.png 7 c+ F! C4 H: F  f- u& h# r; J
8 k; W% D  X7 P6 a. `+ l
1.2 CRC外设配置
8 @! n; \1 K1 L# }2 C# Q所有STM32器件均采用CRC外设,如第 1.1节中所述。CRC计算单元具有单个32位读/写数据寄存器 (CRC_DR)。它用于输入新数据(写访问)并保存以前的CRC计算结果(读访问)。: f" d* Y+ Y( r! j8 F: U
对数据寄存器的每个写操作都会对之前的CRC值(存储在CRC_DR中)和新值再做一次CRC计算。6 ?# j0 a$ s$ O
% e+ b# H; G& }3 F% K& E1 z
6Z)E9E8EN3J9H@MY9_X~{9L.png   c  m6 x* ?& F& k$ N: j

3 C4 }4 x6 ~7 m0 H要计算任何支持数据的CRC,必须遵循以下步骤:
9 R3 |1 E* y/ y( g1. 通过RCC外设启用CRC外设时钟。' t& f9 K# W! e
2. 通过配置初始CRC值寄存器(CRC_INIT),将CRC数据寄存器设置为初始CRC值 。(a)0 G) I3 u# H  [3 O0 m, A/ u  ^& U
3. 分别通过CRC控制寄存器(CRC_CR)中的REV_IN[1:0]和REV_OUT位设置I/O反转位顺序。(a): u0 V3 o' r0 H/ x  b
4. 分别通过CRC控制寄存器(CRC_CR)和CRC多项式寄存器(CRC_POL)中的POLYSIZE[1:0]位设置多项式大小和系数。(b)
3 G/ e% `) v2 e. L5. 通过CRC控制寄存器(CRC_CR)中的Reset位重置CRC外设。- ], ]9 M# R% e
6. 将数据设置到CRC数据寄存器。: M6 b. }9 _) j- J9 x' [4 |) M
7. 读取CRC数据寄存器的内容。/ q0 Z+ [; \6 l6 q7 B: l
8. 禁用CRC外设时钟。9 ~, n- J% z: G& f4 B
在固件包中,CRC_usage示例运行CRC校验和代码,计算256个支持数据类型的数组数据(DataBuffer)。有关完整说明,请参阅CRC_usage文件夹中的文件Readme.txt 。
7 `6 u% ^& B. [# w* }
4 u( S+ Z9 D6 G/ y6 t  S
' e! y+ a  X, A; k/ \; O8 k2 E完整版请查看:附件1 w, W1 r+ \) j& d6 X8 g) a) l
6 ^2 S7 \6 t8 C
" i) I* n" n4 a) A( K

  M' w1 F! ?  |/ I8 m: u

zh.DM00068118.pdf

下载

377.72 KB, 下载次数: 1

赞 收藏 评论0 发布时间:2022-11-12 15:39

举报

0个回答

所属标签

相似技术帖

官网相关资源

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