Kinetis 硬件CRC使用
1赞
发表于 10/22/2016 5:06:13 PM
阅读(3224)
http://blog.chinaaet.com/wuyage/p/5100049902 我在这一篇了介绍了CRC的具体计算过程,那么如何使用Kinetis MCU的硬件CRC模块呢?
这里以超核的CRC例程为例来说明,板子用的FRDM-K64F
int main(void)
{
uint32_t result;
uint8_t buffer[10] = {0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x30};
CRC_QuickInit(kCRC16_CCITT);
result = CRC_Generate(buffer, 10);
printf("crc16 hardware:0x%04x\r\n", result);
...
}调用两个函数就可以参数CRC了。

再用软件计算一下,

两个结果是一样的。
在下面这个结构里定义个不同的CRC校验协议
/* common CRC protrool define */
static CRC_InitTypeDef CRCProtocolAttrTable[] =
{
{16, 0x0000U, 0x8005, kCRCTransposeBits, kCRCTransposeBoth, false},
{16, 0x0000U, 0x8005, kCRCTransposeBits, kCRCTransposeBoth, true},
{16, 0xFFFFU, 0x8005, kCRCTransposeBits, kCRCTransposeBoth, true},
{16, 0xFFFFU, 0x8005, kCRCTransposeBits, kCRCTransposeBoth, false},
{16, 0x0000U, 0x1021, kCRCTransposeBits, kCRCTransposeBoth, false}, //CCITT
{16, 0xFFFFU, 0x1021, kCRCNoTranspose, kCRCNoTranspose, false}, //CCITT False
{16, 0xFFFFU, 0x1021, kCRCTransposeBits, kCRCTransposeBoth, true}, //X25
{16, 0x0000U, 0x1021, kCRCNoTranspose, kCRCNoTranspose, false}, //XMODEM
{16, 0x0000U, 0x3D65, kCRCTransposeBits, kCRCTransposeBoth, true}, //DNP
{32, 0xFFFFFFFFU, 0x04C11DB7, kCRCTransposeBits, kCRCTransposeBoth, true}, //CRC32
{32, 0xFFFFFFFFU, 0x04C11DB7, kCRCNoTranspose, kCRCNoTranspose, false}, //CRC32-MPEG2
};该数据结构的定义如下:
typedef struct
{
uint8_t crcWidth; /*!< Selects 16 or 32-bit CRC protocol */
uint32_t seed; /*!< Value of the seed (initial) CRC value */
uint32_t polynomial; /*!< Value of the polynomial for the CRC calculation */
CRC_Transpose_Type writeTranspose; /*!< Defines transpose configuration of the data written to the CRC data register */
CRC_Transpose_Type readTranspose; /*!< Defines transpose configuration of the value read from the CRC data register */
bool complementRead; /*!< Enables complement read of CRC data register */
} CRC_InitTypeDef;这个结构体和CRC计算软件里的那几个参数是一一对应的。
16, 0x0000U, 0x1021, kCRCTransposeBits, kCRCTransposeBoth, false
16 对应width
0x0000U对应Init
0x1021对应Poly
kCRCTransposeBits对应RefIn是True
kCRCTransposeBoth 对应Refout是True
false对应XorOut 是0x0000
