天道酬勤,学无止境

如何在python3中计算ANSI CRC16多项式(0x8005)?(how to calculate ANSI CRC16 polynomial (0x8005) in python3?)

问题

我尝试使用此代码计算 ANSI CRC16 多项式 (0x8005)

import crcmod
crc16 = crcmod.mkCrcFun(0x8005, 0xffff, True)

但我收到此错误消息

ValueError:多项式的次数必须是 8、16、24、32 或 64

回答1

0x8005开头有一个隐含的1

crcmod 希望您明确提供1

import crcmod
crc16 = crcmod.mkCrcFun(0x18005, 0xffff, True)

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • how to calculate ANSI CRC16 polynomial (0x8005) in python3?
    I tried to calculate ANSI CRC16 polynomial (0x8005) using this code import crcmod crc16 = crcmod.mkCrcFun(0x8005, 0xffff, True) but I got this error message ValueError: The degree of the polynomial must be 8, 16, 24, 32 or 64
  • 如何计算CRC32校验和?(How is a CRC32 checksum calculated?)
    问题 也许我只是看不到它,但是CRC32似乎不必要地复杂,或者在我能在网上找到的任何地方都没有足够的解释。 我知道这是消息值的非基于进位算术除法的余数,再除以(生成器)多项式,但是它的实际实现使我无所适从。 我已经阅读了《 CRC错误检测算法的无痛指南》,我必须说这并非没有痛苦。 它在理论上讲得相当不错,但是作者从来没有想到一个简单的“就是这样”。 他确实说过标准CRC32算法的参数是什么,但他却忽略了清楚地说明如何获得它的方法。 让我感到高兴的部分是,当他说“这就是它”并接着说:“哦,顺便说一句,它可以被颠倒或以不同的初始条件开始”,而没有给出最终方法的明确答案。考虑到他刚刚添加的所有更改,计算CRC32校验和的过程。 关于CRC32的计算方式是否有更简单的解释? 我试图用C编写表的形成方式的代码: for (i = 0; i < 256; i++) { temp = i; for (j = 0; j < 8; j++) { if (temp & 1) { temp >>= 1; temp ^= 0xEDB88320; } else {temp >>= 1;} } testcrc[i] = temp; } 但这似乎产生了与我在互联网上其他地方发现的价值观不一致的价值观。 我可以使用在网上找到的值,但是我想了解它们是如何创建的。 在清理这些难以置信的混乱号任何帮助将是非常赞赏。
  • CRC校验查表法原理及实现(CRC-16)
    绪论 在网上浏览了很多关于CRC校验的文章,基本上都是针对CRC校验原理的阐述以及关于CRC校验查表法的实际应用以及具体软件实现方法。 至于查的表是怎么来的,软件为什么要这样实现很多文章并没有说明。本篇文章就针对这两点问题进行总结和归纳,有错误的地方欢迎大家评论区指出,不胜感激。 注意:本篇文章不涉及CRC校验的基本原理,如果不了解CRC的基本原理,请移步至如下链接: CRC查找表法推导及代码实现比较 以下的CRC查表法的软件实现及推导过程均建立在modbusRTU协议使用的CRC-16标准。 查表法的表是怎么来的? CRC16算法的生成多项式 x 16 + x 15 + x 2 + 1 x^{16}+x^{15}+x^2+1 x16+x15+x2+1,十六进制表示为0x8005。 CRC16常见的表格中的数据是按照先传输LSB,消息右移进寄存器来计算的。因此需要判断寄存器的最低位LSB,同时要将0x8005按位颠倒后(0xA001)根据LSB的情况决定是否与寄存器异或即可。 CRC16的表格中对应的数依次为0~255计算出来的CRC值,因此,此处只选取其中一两个数作为实例计算CRC值。 具体步骤如下所示: 1)从0~255中选取需要计算的数,将其对应的十六进制数放入一个长度为16的寄存器的低八位,高八位填充0; 2)如果寄存器的末位LSB为1,将寄存器的数值右移1位
  • 如何配置CRC表的计算(How to configure calculation of CRC table)
    问题 那里有很多CRC计算示例。 带有位移的简单实现,并通过预先计算的表更有效。 但是多项式旁边还有很多CRC参数会影响计算。 您可以在此处评估这些参数:http://zorc.breitbandkatze.de/crc.html 这些参数是 CRC的初始值输入数据的反映反映输出数据 CRC的最终XOR值 对于某些“标准” CRC算法,这些参数已很好定义,例如CRC-16(CCITT)。 但是有些实现使用不同的参数。 我的实现必须与CCITT多项式(x 16 + x 12 + x 5 +1)的CRC16兼容。 但是必须反映数据字节和最终的CRC。 我已经在计算方法中实现了这些反射。 但这很耗时。 为了获得最佳性能,必须将其从计算中删除。 在初始化方法中如何计算CRC的反射参数? 编辑:我应该怎么做才能分别控制每个参数? 我想了解Init函数的实际工作方式以及所有参数的实现方式。 typedef unsigned char uint8_t; typedef unsigned short crc; crc crcTable[256]; #define WIDTH (8 * sizeof(crc)) #define TOPBIT (1 << (WIDTH - 1)) #define POLYNOMIAL 0x1021 template<typename t> t reflect(t v)
  • 计算CRC16校验和的函数(Function to Calculate a CRC16 Checksum)
    问题 我正在开发一个库,以通过RS232或RS485连接提供简单可靠的通信。 此代码的一部分涉及对数据使用CRC16校验和,以检测线路噪声引起的损坏。 我创建了一个函数来计算CRC16校验和,但似乎未输出正确的值。 我编写的相关代码如下(也可以在此处找到)。 #include <stdint.h> #define CRC16 0x8005 uint16_t gen_crc16(const uint8_t *data, uint16_t size) { uint16_t out = 0; int bits_read = 0, bit_flag; /* Sanity check: */ if(data == NULL) return 0; while(size > 0) { bit_flag = out >> 15; /* Get next bit: */ out <<= 1; out |= (*data >> (7 - bits_read)) & 1; /* Increment bit counter: */ bits_read++; if(bits_read > 7) { bits_read = 0; data++; size--; } /* Cycle check: */ if(bit_flag) out ^= CRC16; } return out; }
  • 如何在 PHP HEX 中计算 CRC16 CCITT?(How to calculate CRC16 CCITT in PHP HEX?)
    问题 我正在尝试使用 PHP CRC16 CCITT 函数来计算校验和。 设备向我发送了一个包含校验和的 PACKET: 10 00 00 00 00 00 00 00 12 51 09 08 00 18 00 04 02 14 00 0c 00 0c 02 1c 00 02 00 00 00 00 00 7 00 a 0 校验和在最后: a0 77 我试过使用 如何在php中计算crc16 为 CRC16 函数将 C 转换为 PHP 没有成功,CRC 16 计算返回: E6 F4而不是a0 77 查找时,我返回了正确的十六进制信息: 100000000000000012510908001800040214000c000c021c0002000000000000 在网站 http://www.lammertbies.nl/comm/info/crc-calculation.html 上,但我无法重现它。 (确保选择输入类型为HEX) 你能帮我弄清楚如何获得十六进制值字符串的 crc16 CCITT 100000000000000012510908001800040214000c000c021c0002000000000000 我正在寻找校验和a0 77 回答1 我能够使用如下实现生成相同的校验和: define('CRC16POLYN', 0x1021); function
  • CCITT CRC 16 位起始值 0xffff(CCITT CRC 16 Bit Start Value 0xffff)
    问题 我需要计算作为参数与长度一起传递的数据的 CCITT 16 位校验和值。 如果我用测试数据“123456789”填充我的数组 TempStr,使用长度不包括空终止字符的多项式 0x8408,我得到结果字符串 6E90(Hex)。 连同空终止字符,我得到 907A。 当我将多项式交换为 0x1201 时,我会得到带有和不带有终止符的结果 29E2(Hex) 和 EFE8(Hex)。 我的问题是:我是否需要计算带有或不带有空终止符的 CRC 以获得正确的值? 我在算法中使用多项式 0x1201 还是逆多项式 0x8408? 给定数据 0x29B1 的 CRC 是否正确? 我需要正确的值来确定函数是否正常工作。计算此特定 CRC 类型的算法是否正确? wData=(unsigned int)0xff & *pData++?? 如果有人可以向我解释出了什么问题以及如何解决我的问题,我将不胜感激。 谢谢 这是使用和显示 calculate_CRC16 函数的代码: CHAR_t TestStr[] = {"123456789"}; unsigned short CrcTest = calculate_CRC16(TestStr,sizeof(TestStr)-1); QString CrcDisplay = QString("CrcTest : %1").arg(CrcTest)
  • Java中多项式x^16 + x^12 + x^5 + 1计算CCITT标准CRC(Calculation of CCITT standard CRC with polynomial x^16 + x^12 + x^5 + 1 in Java)
    问题 我需要在 Java 中使用多项式 x^16 + x^12 + x^5 + 1 (0x1081) 计算 CCITT 标准 CRC 的帮助。 我在互联网上尝试了许多示例,但每个示例都返回示例中的值以外的其他值。 例如,对于这个数组 [0xFC] [05] [11],结果需要是 [27] [56]。 使用此代码: public static void main(String[] args) { byte[] array = new byte[3]; array[0] = (byte) 0xFC; array[1] = (byte) 0x05; array[2] = (byte) 0x11; // array[3] = (byte) 0x00; // array[4] = (byte) 0x00; System.out.println(Integer.toHexString(crc16(array))); } private static final int POLYNOMIAL = 0x1081; private static final int PRESET_VALUE = 0xFFFF; public static int crc16(byte[] data) { int current_crc_value = PRESET_VALUE; for (int i = 0; i <
  • 如何获得 CRC64 分布式计算(使用其线性属性)?(How to get CRC64 distributed calculation (use its linearity property)?)
    问题 我需要散列存储在分布式 FS 上的相当大的文件。 我能够以比整个文件更好的性能处理文件的一部分,所以我希望能够计算部分的散列,然后对它进行求和。 我正在考虑将CRC64作为散列算法,但我不知道如何使用其理论上的“线性函数”属性,因此我可以对文件的各个部分进行 CRC 求和。 有什么推荐吗? 我在这里错过了什么? 附加说明为什么我要查看CRC64 : 我可以控制文件块,但由于应用程序性质,它们需要具有不同的大小(最多 1 个字节,不可能有任何固定块)。 我知道CRC32实现( zlib ),其中包括对各部分的 CRC 求和的方法,但我想要更广泛的东西。 8 字节对我来说看起来不错。 我知道CRC非常快。 我想从中获利,因为文件可能非常大(最多几 Gb)。 回答1 决定这通常足够有用,可以编写和提供: /* crc64.c -- compute CRC-64 * Copyright (C) 2013 Mark Adler * Version 1.4 16 Dec 2013 Mark Adler */ /* This software is provided 'as-is', without any express or implied warranty. In no event will the author be held liable for any damages
  • Function to Calculate a CRC16 Checksum
    I'm working on a library to provide simple reliable communication over an RS232 or RS485 connection. Part of this code involves using a CRC16 checksum on the data to detect corruption from line noise. I've created a function to calculate a CRC16 checksum, but it doesn't seem to be outputting correct values. The relevant code I've written is below (it can also be found here). #include <stdint.h> #define CRC16 0x8005 uint16_t gen_crc16(const uint8_t *data, uint16_t size) { uint16_t out = 0; int bits_read = 0, bit_flag; /* Sanity check: */ if(data == NULL) return 0; while(size > 0) { bit_flag =
  • CRC(循环冗余校验)查表算法的代码实现
    CRC(循环冗余校验)查表算法的代码实现 前言准备工作查表算法的由来查表算法的基本原理模二减法(异或运算)的性质对直接计算法进行分析 基本原理的推广 查表算法的代码实现测试用例正式编码 代码的测试仓库地址 前言 CRC基本原理、数学描述和直接计算法的编程实现请参考笔者之前的劣文: https://blog.csdn.net/weixin_44256803/article/details/105805628 本文假设读者已有以上CRC基础 各种CRC类型汇总:https://reveng.sourceforge.io/crc-catalogue/ 准备工作 在正式进入查表算法的代码实现之前,需要先明白算法原理。 查表算法的由来 通过分析直接计算法的实现,很容易看出直接计算法中对于每一位数据都做了移位运算,遇到置1的位还会进行与多项式的模二减法(异或运算),这会大大降低算法的效率(时间复杂度过大): 能不能不要逐位计算,一次算好几位来提高速度呢? 查表算法的基本原理 模二减法(异或运算)的性质 在学习查表算法原理之前需要先了解模二减法(异或运算)的性质: 交换律:a ^ b = b ^ a 结合律:a ^ b ^ c = a ^ (b ^ c) 交换律很容易理解,结合律举例: 0110B ^ 0101B ^ 1001B = 1010B 0110B ^ (0101B ^ 1001B) =
  • C的确定性CRC(definitive CRC for C)
    问题 由于CRC的使用如此广泛,因此我很难在C中找到CRC实现感到惊讶。 是否有“所有人”使用的C的“确定的” CRC计算代码段/算法? 或者:有人可以担保并提出我一个好的CRC实施方案吗? 我特别在寻找CRC8和CRC16实现。 想到这一点,我的情况可能有点不合常规。 我正在为Linux编写C代码,并且该代码最终应移植到微控制器上。 似乎某些微控制器API确实与CRC实现一起提供。 无论如何,我都在寻找通用的软件实现(我读到CRC最初是由硬件实现的)。 回答1 不会。因为“ CRC”代表一组基于多项式的算法,所以没有“确定的CRC”。 通常会根据大小给出各种[模糊]通用名称(例如CRC-8,CRC-32)。 不幸的是,大多数尺寸都有几种不同的版本。 维基百科的“循环冗余校验”条目列出了一些常见的变体,但是必须使用给定域的正确校验和,否则会出现不兼容性。 (请参阅我对迈克答案的评论,以了解这有多令人困惑!) 无论如何,选择一个合适的实现并使用它-在网上可以找到很多示例。 如果碰巧有一个提供适当实现的库,则一定要使用它。 但是,没有为此的“标准” C库。 这里有一些资源: 在AutomationWiki上的“ CRC16”(CRC-16-CCITT)实现。 对Dobbs博士实施CCITT循环冗余检查。 Chris Borrelli撰写的IEEE 802
  • 基于STM32的MLX90614人体红外测温枪
    文章目录 一、所需材料二、mlx90614传感器介绍三、MLX90614工作原理四、IIC协议原理1.写时序2.读时序3.通信过程 五、程序编写1.起始信号与停止信号2.发送一个字节3.接收一个字节4.数据校验5.读取温度函数6.得到最终温度值 六、CRC­8校验原理1.模2除法2.具体步骤3.实例14.示例25.读取温度函数6.得到最终温度值   今天分享一个项目是做一个红外测温的。这个东西网上都有现成的资料和代码,做起来不难。关于红外测温用的芯片是mlx90614。很巧的是“芯知识学堂”已经将他们的红外测温枪方案全部开源了出来。如果大家想自己做一个红外测温枪可以去看看他们的资料,自己尝试做着玩一下。   那么在这里我就来写一写关于mlx90614红外测温的驱动代码和来说一说他的原理。主要是利用STM32F103C8T6单片机和mlx90614模块将测量的温度显示到0.96寸oled上面,如果你没有oled的话也可以用串口调试助手把温度信息打印出来。 一、所需材料 STM32F103C8T6最小系统板+mlx90614红外测温模块+0.96寸oled+一个jlink下载器。 二、mlx90614传感器介绍   MLX90614 系列模块是一组通用的红外测温模块。在出厂前该模块已进行校验及线性化,具有非接触、体积小、精度高,成本低等优点。被测目标温度和环境温度能通过单通道输出
  • C#中的CRC-4实现(CRC-4 implementation in C#)
    问题 我一直在网上搜索4位循环冗余校验(CRC-4-ITU)的C#实现,但是到目前为止,我一直没有成功。 有谁能给我CRC-4-ITU的参考实现? 如果存在标准多项式,最好使用标准多项式(我已经读过维基百科指向的规范为CRC4规范,而没有找到该多项式的定义)。 我也非常感谢某种测试套件或测试数据来验证CRC4实现。 谢谢! 回答1 维基百科上的“循环冗余校验”文章说,多项式为x ^ 4 + x +1。关于校验和的计算方式也有相当不错的描述。 这是CRC16的算法。 我知道这不是您要的,但是将其适应4位应该相对简单。 public ushort calculate(byte[] bytes) { int crc = 0xFFFF; // initial value // loop, calculating CRC for each byte of the string for (int byteIndex = 0; byteIndex < bytes.Length; byteIndex++) { ushort bit = 0x80; // initialize bit currently being tested for (int bitIndex = 0; bitIndex < 8; bitIndex++) { bool xorFlag = ((crc & 0x8000) ==
  • 最通俗的CRC校验原理剖析
    以下内容摘自笔者即将出版的最新著作《深入理解计算机网络》一书。本书将于12月底出版上市,敬请留意!! 本书原始目录参见此文:http://winda.blog.51cto.com/55153/1063878 5.3.2 循环冗余校验检错方案 上节介绍的奇偶校验码(PCC)只能校验一位错误,本节所要介绍的循环冗余校验码(CRC)的检错能力更强,可以检出多位错误。 1. CRC校验原理 CRC校验原理看起来比较复杂,好难懂,因为大多数书上基本上是以二进制的多项式形式来说明的。其实很简单的问题,其根本思想就是先在要发送的帧后面附加一个数(这个就是用来校验的校验码,但要注意,这里的数也是二进制序列的,下同),生成一个新帧发送给接收端。当然,这个附加的数不是随意的,它要使所生成的新帧能与发送端和接收端共同选定的某个特定数整除(注意,这里不是直接采用二进制除法,而是采用一种称之为“模2除法”)。到达接收端后,再把接收到的新帧除以(同样采用“模2除法”)这个选定的除数。因为在发送端发送数据帧之前就已通过附加一个数,做了“去余”处理(也就已经能整除了),所以结果应该是没有余数。如果有余数,则表明该帧在传输过程中出现了差错。 【说明】“模2除法”与“算术除法”类似,但它既不向上位借位,也不比较除数和被除数的相同位数值的大小,只要以相同位数进行相除即可。模2加法运算为:1+1=0,0+1=1,0+0
  • 循环冗余码校验
    循环冗余码校验(Cyclic Redundancy Check) 5.3.2 循环冗余校验检错方案 上节介绍的奇偶校验码(PCC)只能校验一位错误,本节所要介绍的循环冗余校验码(CRC)的检错能力更强,可以检出多位错误。 1. CRC校验原理 CRC校验原理看起来比较复杂,好难懂,因为大多数书上基本上是以二进制的多项式形式来说明的。其实很简单的问题,其根本思想就是先在要发送的帧后面附加一个数(这个就是用来校验的校验码,但要注意,这里的数也是二进制序列的,下同),生成一个新帧发送给接收端。当然,这个附加的数不是随意的,它要使所生成的新帧能与发送端和接收端共同选定的某个特定数整除(注意,这里不是直接采用二进制除法,而是采用一种称之为"模 2 除法 ")。到达接收端后,再把接收到的新帧除以(同样采用"模2除法")这个选定的除数。因为在发送端发送数据帧之前就已通过附加一个数,做了"去余"处理(也就已经能整除了),所以结果应该是没有余数。如果有余数,则表明该帧在传输过程中出现了差错。 【说明】"模2除法"与"算术除法"类似,但它既不向上位借位,也不比较除数和被除数的相同位数值的大小,只要以相同位数进行相除即可。模2加法运算为:1+1=0,0+1=1,0+0=0,无进位,也无借位;模2减法运算为:1-1=0,0-1=1,1-0=1,0-0=0,也无进位,无借位。相当于二进制中的逻辑异或运算
  • STM32F7 硬件CRC校验驱动,支持CRC7,CRC8,CRC16,CRC32
    本来想实现32bit写入,一次进行4字节校验,结果测试过程中发现兼容性不好,最后放弃了,统一使用字节模式写入。 已经实现了硬件的CRC7,CRC8,CRC16,CRC32运算,并且均进行了测试对比,计算结果完全正确,通过配置可以实现不同的CRC校验,我已经实现了如下的配置: // //常见的CRC校验配置 extern const STM32F7_CRC_Config cg_CRC_CONFIG_CRC32; //默认的CRC-32校验 extern const STM32F7_CRC_Config cg_CRC_CONFIG_CRC32_MPEG2; //CRC-32/MPEG-2校验 extern const STM32F7_CRC_Config cg_CRC_CONFIG_CRC16_XMODEM; //CRC-16/XMODEM校验 extern const STM32F7_CRC_Config cg_CRC_CONFIG_CRC16_MODBUS; //CRC-16/MODBUS校验 extern const STM32F7_CRC_Config cg_CRC_CONFIG_CRC16_USB; //CRC-16/USB校验 extern const STM32F7_CRC_Config cg_CRC_CONFIG_CRC16_IBM; //CRC-16/IBM校验
  • 简单易懂的CRC原理阐述
    转载: https://segmentfault.com/a/1190000018094567 网上大多的教材都是面向大佬的很多细节原理都没有讲清楚,对于我们这些新萌菜鸟们实在太不友好了。于是我写一篇相对轻松易懂的博客,希望能对学习CRC的朋友们有所帮助吧! 什么是CRC??? 你说小学3年级的小明同学不知好歹喜欢村长女儿王大麻子,于是羞涩的他想到写一封情书已表心意。正所谓闺女似情人,爱女心切的村长凡是信件统统要过他之手。如果这份情书被她爸稍加“几笔”岂不悲剧了? 奇偶验证 如何验证情书是否被动过手脚(验证数据是否损坏),介于王大麻子数学不行,数数还行。作为数学课代表的小明同学立刻想到一个好主意:将所有的文字转化二进制,只要数一数1的数量是奇数还是偶数不就可以了吗! 比如我要传递M这个字符那么他的ASCII的值为0100 1101(M),就是数据末尾加上一个1或0,使其整个数据的1的数量可以凑齐奇数或偶数。 如果规定信件所有1的个数为奇数的话,那么0100 1101(M)才4个1,我们就数据的末尾加上一个1凑齐奇数(5个1):0100 1101 1;如果数据中的1刚好奇数,我们就在末尾加上一个0就可(这个方法叫做奇校验),当然相反如果规定的信件所有1的个数为偶数(偶校验),刚好处理的方法也是相反。 虽然这个方法简单到连他没有上学的弟弟都做得起(很容易通过硬件方式实现验证)
  • 一文详解循环冗余校验校验算法(CRC校验)及C语言代码的实现 ---- 以CRC-16/MODBUS为例讲解
    一、概述 现在的产品开发过程中,无论是数据的储存还是传输,都需要确保数据的准确性,所以就需要在数据帧后面附加一串校验码,方便接收方使用校验码校验接收到的数据是否是正确的。 常用的校验方式有奇偶校验、异或校验、累加和校验(可以看我之前的一篇文章累加和校验算法(CheckSum算法))、循环冗余校验(CRC校验)等等。 奇偶校验、异或校验、累加和校验都比较简单,且易于实现,但是检错能力也一般,而本文的主角CRC校验,则大大提高了数据的检错能力。(对比文章看这篇《奇偶校验 累加和校验 CRC校验》) 讲CRC校验的文章很多,也有非常多的好文章,本文只是将这些文章总结,用自己的理解再阐述一遍,再次感谢各位大佬优质的文章。 CRC校验有很多的参数模型,尤其是有很多标准模型的存在,这些标准模型经过理论计算,大大提高校验检错的能力,所以推荐使用标准模型,由于有大量的教程和网上资源,参考后实现起来也比较简单,同时也利于不同部门间的沟通和定下标准。 本文就是采用CRC-16/MODBUS参数模型,该模型就被各行各业大量使用 二、CRC的基本原理 网上有看到一篇讲解CRC原理的文章非常不错的文章:循环冗余检验 (CRC) 算法原理。 文章讲解了CRC校验的基本原理,讲的很清楚,尤其是查表法的原理,需要静下来心来看几遍才能理解透彻。 如果还不懂,还可以看看这篇:最通俗的CRC校验原理剖析。
  • 痞子衡嵌入式:飞思卡尔Kinetis系列MCU启动那些事(9)- KBOOT特性(完整性检测)
      大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是飞思卡尔Kinetis系列MCU的KBOOT之完整性检测(Integrity Check)特性。  Application完整性检测是非常重要的,想象一下如果你的系统中Application被人为破坏了一部分并注入异常代码,而系统在启动过程中不能检测出Application的异常直接跳转执行,那么将会导致不可预测的结果,这种情况肯定是要避免的,KBOOT在设计时考虑到这种情况的存在,特意引入了Integrity Check这一特性来解决这个问题。今天痞子衡就为大家介绍KBOOT中的Integrity Check特性:一、使能完整性检测  KBOOT中使用了CRC32算法来检查Application的Integrity,痞子衡在前面文章 KBOOT配置(FOPT/BOOT Pin/BCA) 里介绍过KBOOT的BCA配置,其中跟CRC32相关的是offset为0x04 - 0x0f的12bytes:typedef struct BootloaderConfigurationData { uint32_t tag; //!< [00:03] Tag value used to validate the BCA data. Must be set to 'kcfg'. uint32_t crcStartAddress;