CRC(Cyclic Redundancy Check),即循环冗余校验码。CRC是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。
常用CRC有以下多种:
点击查看大图
网络上关于CRC基础原理的内容比较多,可以搜索关键词“循环冗余校验”进行查询。
瑞萨RA MCU中有硬件CRC计算单元,采用固定的多项式发生器来计算8位或者32位数据的CRC校验值,对数据传输或数据存储的一致性、完整性进行验证。这篇文章重点介绍RA MCU中的CRC模块和使用方法。
RA MCU中的CRC 计算单元规格如下:
点击查看大图
注1. 该函数不能划分CRC计算中使用的数据。以8位或32位为单位写入数据。
CRC 计算单元框图如下:
那么接下来就是如何使用了,打开工程中的configuration.xlm文件,在Stacks窗口中,可以通过“New Stack → Monitoring → CRC (r_crc)”添加该模块。该模块的属性窗口如下:
点击查看大图
在应用程序中使用CRC模块的基本例程如下:
void crc_example () { uint32_t length; uint32_t uint8_calculated_value; length = sizeof(g_data_8bit) / sizeof(g_data_8bit[0]); crc_input_t example_input = { .p_input_buffer = g_data_8bit, .num_bytes = length, .crc_seed = 0, }; /* Open CRC module with 8 bit polynomial */ R_CRC_Open(&crc_ctrl, &g_crc_test_cfg); /* 8-bit CRC calculation */ R_CRC_Calculate(&crc_ctrl, &example_input, &uint8_calculated_value); }
● CRC监听功能注
另外CRC单元还具有监听功能 ,可以监视指定 I/O 寄存器地址的读取和写入,并自动对寄存器地址读取和写入的数据进行CRC计算。不是对数据块调用 R_CRC_Calculate,而是调用 R_CRC_SnoopEnable 来开始监视读/写,并使用 R_CRC_CalculatedValueGet 来获取当前CRC。
请注意,监听模式仅适用于SCI上的发送/接收操作。
注:并非所有RA MCU的CRC单元都有监听功能,RA2A1、RA2L1、RA2E1、RA2E2、RA4M1
、RA4W1、RA6M1、RA6M2、RA6M3、RA6T1、RA6T2的CRC单元有监听功能,而RA4M2、RA4M3、RA4T1、RA4E1、RA4E2、RA6M4、RA6M5、RA6T3、RA6E1、RA6E2的CRC单元没有监听功能,具体请参考各MCU的硬件手册。
以下参考代码展示了CRC监听操作:
void crc_snoop_example () { /* Open CRC module with 8 bit polynomial */ R_CRC_Open(&crc_ctrl, &g_crc_test_cfg); /* Open SCI Driver */ /* Configure Snoop address and enable snoop mode */ R_CRC_SnoopEnable(&crc_ctrl, 0); /* Perfrom SCI read/Write operation depending on the SCI snoop address configure */ /* Read CRC value */ R_CRC_CalculatedValueGet(&crc_ctrl, &g_crc_buff); }
在使用CRC32多项式函数时,CRC模块会产生与流行的在线CRC32计算器相同的结果,但请务必记住一些要点:
● 在线CRC32计算器允许输入任意数量的字节。而FSP CRC32 API函数使用32位。这意味着在线计算时必须“填充”为32位。
● 在线CRC32计算器通常会先对输出取反,然后再将其呈现为结果。如果需要,由应用程序决定是否包含此步骤。
● 在线CRC32计算器和R_CRC模块API(CRC32 多项式)都需要使用种子值 0xFFFFFFFF。
● 确保R_CRC CRC32的位方向设置为LSB,并且选择了CRC32而不是CRC32C。
● 一些在线CRC工具将最终结果与0xFFFFFFFF进行异或。
瑞萨RA MCU全系列产品都具有CRC外设(注意,是全系列都有), 对CRC的计算提供硬件支持,为应用程序节省了代码空间。
全部0条评论
快来发表一下你的评论吧 !