582|0

2642

帖子

6

TA的资源

五彩晶圆(初级)

楼主
 

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
此帖出自stm32/stm8论坛
点赞 关注
个人签名

希望做一些大家觉得好用的东西!

 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表