使用LSM6DS3TR-C的FIFO,先获取了FIFO的WaterM标志,该标志置位之后再去获取当前存在FIFO缓存的数据长度,再去读取FIFO中对应长度的数据,会出现读取数据出错的现象; 配置为: accel full scale: 8g gyro full scale: 2000dps accel odr: 104Hz gyro odr: 104Hz fifo: gyro、accel、ds3 and ds4 no decimation fifo odr: 104Hz fifo threshold level: 24 * 80 fifo mode: Continuous mode (110) 以下测试数据均在设备不移动的前提下; 正常数据如下: normal 错误数据如下: abnormal 相关代码如下: core |
LSM6DSR是左手坐标系吗?
比LIS3DH更稳定的超低功耗加速度计有哪些可选择?
lsm6ds3tr-c传感器集合模式无法使用
LSM6DS3TR-C使用时工作电流比datasheet上大很多可能是什么原因?
lsm6dsl的sensor hub驱动LIS2MDL问题
关于LSM6DSR的开发,和LSM6DSO区别有多大?
LSM6DSR vs LSM6DSV16X
LSM6DS3TR & LSM6DS3TR-C两个型号能否完全兼容?
求一款3轴MEMS加速度计,超低功耗,可唤醒发中断信号的芯片
consumer, industrial, automotive,这3者之间什么区别?
我在用LDS3的时候,就犯过一个错误,因为I2C驱动写的不好,导致读取标志位时,多读取了两个字节的加速度值寄存器,比如X寄存器。发生的问题就是加速度的值会有一定几率是不对的。修改I2C驱动后,解决该问题。
这就是一次性从sensor中把所有数据读出来的结果,对读出的数据做处理判断过滤是可以,但治标不治本,还是希望能找到问题的根因;thx
用示波器看一下读取I2C的过程,一定要注意不要把数据寄存器读取。一旦发生数据寄存器读取后,在下次数据转换完成前,这里面的数据是错误的。
这个波形不是很好抓,因为fifo读取的数据比较大,而且这个问题并不是必现,错误的数据偶尔会出现,随机性比较高,波形不好抓到刚好出错的时候;这边条件限制,手头也没有逻辑分析仪;
你说的一定要注意不要把数据寄存器读取指的是什么,不好意思,这里没理解;
读fifo数据前,我会先去去waterM这个标志,这个标志被置位的话,证明imu的fifo数据准备好了(或者换句话说满了),然后我再去读当前能读取的数据有多少个字节,然后再按这个字节数长度去读FIFO的;
有的,我设置的threshold是24*80=1920byte,每次读取前先判断了watermark标志位,该标志置位之后就获取data的长度,每次打印出来都是1920个byte,24byte对齐的;
按目前的分析来看,我觉得你说的这个可能性比较大了,但是我们用的i2c驱动是linux的驱动,理论上应该是不会有问题,这个i2c驱动code的review你有什么建议吗?