I2C压力传感器读取数据跳变256计数问题排查求助
I2C压力传感器数据跳变256的问题分析与修复
你的问题根源在于16位原始数据的字节拼接顺序完全颠倒,导致原本应该平滑变化的低8位被错误地放到了高8位的位置,最终表现为rawValue每次跳变256。
具体原因
传感器通过I2C返回16位数据时,遵循标准的高字节(MSB)先输出、低字节(LSB)后输出的顺序:
- 你先读取的
rawHighByte是传感器输出的高字节 - 后读取的
rawLowByte是传感器输出的低字节
但你的代码中,却将低字节左移8位作为高字节,高字节作为低字节拼接:
uint16_t rawValue = ((uint16_t)rawLowByte << 8) | rawHighByte;
这就导致:
- 传感器实际低8位的逐次变化(比如从0x51→0x52),会被转换成rawValue的高8位变化(0x5100→0x5200),数值直接差256
- 原本高8位的变化反而被压缩到低8位,不会产生明显跳变,但你的场景中是低8位在平滑递增,所以就出现了rawValue跳变的现象
修复方案
将rawValue的拼接逻辑修正为高字节左移8位,再与低字节做或运算:
uint16_t rawValue = ((uint16_t)rawHighByte << 8) | rawLowByte;
修正后,传感器返回的高字节会占据16位数值的高8位,低字节占据低8位,原始数据就能跟随传感器的计数逐次平滑递增,转换后的value值也会正常变化。
建议你再对照传感器的 datasheet 确认字节输出顺序,确保和代码逻辑匹配。
内容的提问来源于stack exchange,提问作者Rob
相关产品推荐
相关产品推荐

