二氧化碳传感器SCD30采集的真实物理量

前两天编写了N76E003+SCD30采集CO2浓度的代码,SCD30的I2C命令部分参考了样例代码,随后重新浏览SCD30参考手册时对采集信号转换为真实物理量这一小节不是很理解,遂查阅资料,弄明白后,记录下来。
手册上的原话如下图所示,关键信息就是“float numbers in big-endian format”,意思是从SCD30传感器读出的数据是大端格式的float数据。

在这里插入图片描述 查了下float的大端格式,大端指高位在低地址,低位在高地址,上述手册内容对读出的buffer[0]-buffer[3]的内容进行了高低位的规定,很容易把I2C读出的数据拼成32位数据:0x43DB8C2E。 float的32位表示格式为:(符号位1位)+(指数位8位)+(尾数23 位) 符号位:0表示正,1表示负; 指数位:-127–128,但实际上是把原指数+127变为0~255; 尾数:科学计数法表示的二进制小数点后的数,不够23位的在后补0; 基于以上原则, 0x43DB8C2E对应的二进制符号位为0,指数位为10000111B=135,实际指数为135-127=8,尾数为10110111000110000101110B,除去最低位的0,实际二进制小数点后的数应该为1011011100011000010111B,所以完整二进制小数为:1.1011011100011000010111*2^8=110110111.00011000010111B=439.09