关于SHT11的CRC使用心得

2020-01-25 15:32发布

根据SHT11的数据手册,在读取采集数据的时候SHT11提供了一个字节的CRC8校验。而在我的数据采集系统中由于种种原因,数据偶尔有出错的现象,故而考虑将SHT11的CRC利用起来。从网上找到了一些提供CRC8的工具和算法,把从SHT11读取的CRC字节与工具计算的出的结果比对,完全不一样。自己按照网上的算法写了个工具,结果还是不一样(自己的工具和网上的工具得出的结果一样)。后来在SHT的官网下载对于SHT11关于CRC的说明文档CRC_Calculation_SHTxx_v1.03.pdf,发现网上的算法多项式为X8+X5+X4+1而SHT11采用的多项式为X8+X5+X4,而且根据这个说明其CRC结果还要做一个镜像(高地位颠倒),即b7=b0,b6=b1……b4=b3;
当我高高兴兴的吧校验算法移植到我的数据采集系统上去以后,开始采集数据,然后奇异的事情发生了,采集器只有湿度数据传上来,温度数据一直没上来,调试发现温度的CRC8校验不过。而我的测试程序不论温度还是湿度都是可以校验通过的,冥思苦想了一个上午,得出初步的结论是,使用12bit精度的湿度采集和14bit精度的温度采集时,CRC8是可以通过的,这需要设置SHT控制寄存器的b0=0,即SHT11控制寄存器的默认值,而使用8bit精度的湿度采集或者12bit精度的温度采集时(设置),测试程序中CRC8的结果都是错误的。然后就是无尽的痛苦……无论是把读出的结果高低半字节交换还是做镜像,都和正确结果一点关系都没有,正当绝望的时候突然发现,所有错误结果和正确结果的异或值都为0xAB。写了个程序验证之,不停的采集和验证,40分钟都没有问题。结果的到初步的确定,即采用控制寄存器的b0=0时按照正常的CRC8算法验证,控制寄存器的b0=1时,除了按照正常的CRC8算法计算外还要将其结果异或0XAB。
有没有做过SHT11的CRC校验的,能够帮我确认一下是否真的是这样.
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。