奇偶校验算法(Parity Check Algorithm)是一种简单的错误检测方法,用于验证数据传输中是否发生了位错误。通过在数据中添加一个附加的奇偶位(即校验位),来实现错误的检测和纠正。
在奇偶校验算法中,假设每个字节由8个比特(位)组成。奇偶校验位的值取决于数据字节中的1的个数。如果数据字节中1的个数是偶数个,奇偶校验位被设置为0;如果1的个数是奇数个,奇偶校验位被设置为1。这样,在接收端,通过统计接收到的数据字节中1的个数,就可以检测出位错误。

/**
* @brief: even check for uint32_t
*
* @param:
* @return: 0= pass; 1= failed;
* @note:
*/
int even_check(uint32_t dat)
{
uint8_t i;
uint8_t cnt = 0;
for (i = 0; i < 32; i++)
{
if ((dat & 0x01) == 0x01)
{
cnt++;
}
dat = dat >> 1;
}
return (cnt & 0x01);
}
void even_ck_gen(uint32_t *buf)
{
uint8_t i;
uint8_t cnt = 0;
uint32_t dat;
*buf &= ~(0x80000000);
dat = *buf;
printf("dat = 0x%08X\r\n", dat);
for (i = 0; i < 31; i++)
{
if ((dat & 0x01) == 0x01)
{
cnt++;
printf("cnt = %d, dat= %08X\r\n", cnt, dat);
}
dat = dat >> 1;
}
if ((cnt & 0x01) == 0x01)
{
*buf |= 0x80000000;
}
}在没有ECC这样外置校验位的情况下,通过bit32来代表奇偶校验位,虽然舍弃了一位,但可以实现数据的自校验,带来一定的可靠性。在数据量不需要32bit长度时,可以采用此方法。
我要赚赏金
