ESP8266 + Micropython:为什么我会定期用i2c读取来获得相同的值?

lar*_*sks 7 accelerometer esp8266 micropython mpu6050

我写使用一些简单的代码MicroPython上Digistump橡树,这基本上是一个ESP8266接口板运行.我试图了解通过i2c定期读取传感器时看到的行为.

下面的代码(读取ACCEL_XOUT_HACCEL_XOUT_L寄存器的值)工作得很好:

>>> from machine import Pin, I2C
>>> bus = I2C(scl=Pin(2), sda=Pin(0))
>>> while True: 
...     h, l = bus.readfrom_mem(0x68, 0x3b, 2)
...     print (-((((h<<8)+l)^0xFFFF) + 1) if (h & (1<<7)) else (h<<8)+l)
Run Code Online (Sandbox Code Playgroud)

(该print语句只是从两个补码执行转换.)

正如预期的那样,当我移动imu时,打印出的加速度计值大致实时变化.

但如果我在循环中引入延迟,例如...

>>> import time
>>> from machine import Pin, I2C
>>> bus = I2C(scl=Pin(2), sda=Pin(0))
>>> while True: 
...     h, l = bus.readfrom_mem(0x68, 0x3b, 2)
...     print (-((((h<<8)+l)^0xFFFF) + 1) if (h & (1<<7)) else (h<<8)+l)
...     time.sleep(1)
Run Code Online (Sandbox Code Playgroud)

......我看到一些非常奇怪的行为.在imu改变方向后,i2c读取操作返回的值对于许多迭代继续保持不变.我不知道这里发生了什么:i2c读取操作从imu上的寄存器读取,根据文档以采样率更新,在默认配置中将是1Khz.我没有在代码或数据路径中看到任何可能以某种方式锁存或缓存这些值的内容.

这是加速计寄存器的文档,如寄存器映射和描述文档中所示:

这些寄存器存储最新的加速度计测量值.加速度计测量按寄存器25中定义的采样率写入这些寄存器.

加速度计测量寄存器以及温度测量寄存器,陀螺仪测量寄存器和外部传感器数据寄存器由两组寄存器组成:内部寄存器组和面向用户的读取寄存器组.加速度传感器内部寄存器组内的数据始终以采样率更新.同时,只要串行接口空闲,面向用户的读取寄存器组就会复制内部寄存器组的数据值.

由于我在读取调用之间休眠,我很确定i2c串行接口在任何定义中都是空闲的,我看不出其他任何与此行为相关的东西.

你有什么建议可以在这里发生什么吗?