微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > CC2640 SensorTag Movement 传感器bug

CC2640 SensorTag Movement 传感器bug

时间:10-02 整理:3721RD 点击:

发现过程:

使用SnesorTag app 安卓版连接SensorTag,Motion Data 一栏,打开Wake on shake , Sensor period 设置大于1000ms  比如1001,这时Wake on shake功能失效。

原因:

SensorTag_Mov.c   在SensorTagMov_processSensorEvent(void)函数中,为了使得无论sensor period 配置多少 ,总的shake wake时间相同,控制sensor value发送次数的nActivity被赋值为MOVEMENT_INACT_CYCLES

#define MOVEMENT_INACT_CYCLES   ( MOVEMENT_INACT_TIMEOUT * (1000/sensorPeriod) )

#define MOVEMENT_INACT_TIMEOUT    10     // 10 seconds

因为上述宏是整数,所以当sensorPeriod 大于1000时,1000/sensorPeriod = 0,MOVEMENT_INACT_CYCLES也等于0, nActivity被赋值为0,所以在以下代码中 Movement_setParameter(SENSOR_DATA, SENSOR_DATA_LEN, sensorData)永远不会被调用。

if (nActivity>0)
{
    if (appState != APP_STATE_ACTIVE)
    {
        // Transition to active state
        appState = APP_STATE_ACTIVE;
        nMotions = 0;
        if (sensorMpu9250Reset())
       {
             sensorMpu9250Enable(axes);
        }
    }
    if (mpuConfig & MOV_WOM_ENABLE)
    {
           nActivity--;
    }

     // Send data
     Movement_setParameter(SENSOR_DATA, SENSOR_DATA_LEN, sensorData);
}

解决方法:

#define MOVEMENT_INACT_CYCLES   ( MOVEMENT_INACT_TIMEOUT * (1000/sensorPeriod) )

修改为

#define MOVEMENT_INACT_CYCLES    ( (MOVEMENT_INACT_TIMEOUT * ((1000 << 7)/sensorPeriod)) >>7)

好的,我们也验证一下。

好像BUG在ANDROID的代码里会多一些。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top