BCC(Block Check Character/信息组校验码)即异或校验法
1、使用范围:适用于大多数要求不高的数据通讯。
2、应用场景:IC卡接口通讯、很多单片机系统的串口通讯都使用。
3、实现步骤:很多基于串口的通讯都用这种既简单又相当准确的方法。它就是把所有数据都和一个指定的初始值(通常是0)异或一次,最后的结果就是校验值,通常把它附在通讯数据的最后一起发送出去。接收方收到数据后自己也计算一次异或和校验值,如果和收到的校验值一致就说明收到的数据是完整的。
4、实验代码:
#include<stdio.h>
static unsigned char Fun_Bcc_Create(unsigned char *p1, unsigned short int len);
static unsigned char Fun_Bcc_Check(unsigned char *p1, unsigned short int len);
static unsigned char Data_11B[11] = {0x10, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x10};
/**
*********************************************************************************
* @file main.c
* @auther li
* @version 1.1.1
* @data 2018-12-26 13:12:37
* @brief 主函数
* @param
* @retval none
* @attention
*********************************************************************************
*/
int main(int argc, char **argv)
{
printf("This is a BCC Data Check test!!!\r\n");
Data_11B[10] = Fun_Bcc_Create(Data_11B, 10);
if(Fun_Bcc_Check(Data_11B, 10) == Data_11B[10])
{
printf("Check is ok!!!\r\n");
}
else
{
printf("Check is err!!!\r\n");
}
while(1);
}
/**
*********************************************************************************
* @file main.c
* @auther li
* @version 1.1.1
* @data 2018-12-26 13:12:37
* @brief 函数功能: 生成 BCC
* @param p1:待生成校验数据的首地址
* len:待生成校验数据长度
* @retval 校验后的数据
* @attention
*********************************************************************************
*/
static unsigned char Fun_Bcc_Create (unsigned char *p1, unsigned short int len)
{
unsigned char bcc = 0;
for(; len > 0; len--)
{
bcc ^= *p1++;
}
return bcc;
}
/**
*********************************************************************************
* @file main.c
* @auther li
* @version 1.1.1
* @data 2018-12-26 13:12:37
* @brief 函数功能: BCC 校验
* @param p1:待校验的数据首地址
len:待校验数据长度
* @retval 校验后的数据
* @attention
*********************************************************************************
*/
static unsigned char Fun_Bcc_Check(unsigned char *p1, unsigned short int len)
{
unsigned char bcc = 0;
for(; len > 0; len--)
{
bcc ^= *p1++;
}
return bcc;
}
/** 实验结果
**************************
* This is a BCC Data Check test!!!
* Check is ok!!!
***************************
*/