Even Check 奇偶校验

Even Check 奇偶校验

在芯片的使用中,有的芯片存在数据的最后一位奇偶校验如图1所示。这个东西到底是怎么一回事?

图1:Parity bit check

奇偶校验添加到数据byte中用于错误检测,他用于检测数据的完整性,奇偶校验位的值会被分配成0或者1,具体要看你用的是奇校验,还是偶校验。

奇校验:消息中1的位数总是奇数

偶校验:消息中1的位数总是偶数

表1: 数据流表

奇Odd

1

1

0

0

1

1

1

0

偶Even

1

1

0

0

1

1

1

1

其中奇数校验中一共5个1,所以最后一位是0。

其中偶数校验中前面一共5个1,所以最后一位补1完成偶数校验。

那么在C语言中如何完成偶数校验呢?参考代码如下:

、、、

// 功能:奇偶校验

// 参数1:指针大小 Size

// 参数2:数组指针

// 返回值 0X01 or 0X00 用返回值或上指针最后一位

uint8_t Point_Even_check(uint8_t Size,uint8_t *Data)

{

  uint8_t i,j,temp,Count=0,ODD=0;

  //遍例指针Size

  for(i=0;i<Size;i++)

  {

    temp=*(Data+i);

    //判断指针最大值

    for(j=0;j<8;j++)

    {

      //计算1出现的次数

      if((temp&0x01)==0x01)

      {

        Count+=1;

      }

      //让Temp右移

      temp>>=1;

    }

  }

  //如果Count是偶数  Even Check 或上0X01

  if(((Count%2)==1)||(Count==1))

  {

    Even=0X01;

    return Even;

  }

  //如果Count是奇数 Even Check 返回默认值

  else

  {

    return Even;

  }

    

}

、、、

如果要把数据通过SPI发送,SPI的驱动程序如下:

、、、

// XXXX 读寄存器

void XXXX_Read(uint8_t addr,uint8_t *Data,uint8_t *Rdata)

{

  //奇偶校验缓存

  uint8_t EvenTemp;

   //将指针第一位设置为寄存器地址

  *Data=addr;

  //获取奇偶校验结果

  EvenTemp=Point_Even_check(4,Data);

  //处理奇偶校验结果

  *(Data+3)|=EvenTemp;

  //写入并读取寄存器

  Lpspi_Read(4,Data,Rdata);

  Lpspi_Stop();

}

、、、

写入的数组的参数如下:

Data[4]={0X03,0x11,0x22,0x16}

Data数组换算成二进制的结果

0011 | 0001 | 0001 | 0010 | 0010 | 0001 | 0110

使用Even Check函数对数据进行补偶操作,测试的波形如下图2所示

图2:补偶参数

好了今天就先聊到这里了~在对自己做个简单的自我介绍

无论如何,我都热爱电路,热爱电路架构的探索与设计!加油UU们!    

笔者简介:许同,8.5年工作经验,电路系统架构专家,在电路领域有14年的积累,精通应用电路系统架构设计,有10项以上电路架构专利,掌握多项电路设计技能,电路Spice仿真,C语言,Python,Verilog等。    

私信我加电路群

文章来源:公众号xuyuntong

参考文档

What is a Parity Bit?

C Prime Plus the sixth edition

  • 14
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值