微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > CC2541读取主机RSSI的问题

CC2541读取主机RSSI的问题

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

TI的大牛们:

    我想在CC2541(外设)读取主机的RSSI值,目前做法如下,通过RSSI_READ_EVT读取,然后在HCI_GAP_EVENT_EVENT中利用回调查看RSSI的值。

    现遇到一个问题,就是开始读取后,RSSI的值不会根据距离的变化而变化,始终为开始采集时的值,即使变化也是很微小的变化。如果断开连接,再次重连,则RSSI值会恢复正常,但是和之前一样,距离变化其值不改变。大概的表现如下:

    1. 外设放在与DONGLE很近的位置A,连接,外设读取RSSI值为-47,当外设远离DONGLE到达一个比较远的位置B时,这个过程RSSI读取值始终为-47不变,即使变化也很小,正负2左右。

    2.外设放在位置B与DONGLE连接,外设读取RSSI值为-83,当外设移至位置A时,RSSI值也不变化。

    我看HCI_ReadRssiCmd函数说明,This BT API is used to read the RSSI of the last packet received on a connection given by the connection handle. 他会读取上一个包里的RSSI的值,那么RSSI值应该是会实时变化的。

    问题出在哪里我目前无法找到,希望得到你的帮助。

Hi TracyMcgrady

      我也遇到过这个问题。

这个问题的现象是:在传输数据时会更新RSSI值,而没有传输数据时(保持连接)则无法更新RSSI——一直保持在连接更新时的数值。

你可以这么做来解决你的问题:定义一组特征值,每隔一定时间间隔,主机就对其进行读写,这样就可以更新RSSI值。

你确定设置读取速率了吗?

在peripheral中,代码是:

/******************************************************************************************************/

if ( events & RSSI_READ_EVT )
{
// Only get RSSI when in a connection
if ( gapRole_state == GAPROLE_CONNECTED )
{
// Ask for RSSI
VOID HCI_ReadRssiCmd( gapRole_ConnectionHandle );

// Setup next event
if ( gapRole_RSSIReadRate )
{
VOID osal_start_timerEx( gapRole_TaskID, RSSI_READ_EVT, gapRole_RSSIReadRate );
}
}
return ( events ^ RSSI_READ_EVT );
}

/******************************************************************************************************/

VOID osal_start_timerEx( gapRole_TaskID, RSSI_READ_EVT, gapRole_RSSIReadRate );的执行条件是gapRole_RSSIReadRate不为0;

而gapRole_RSSIReadRate的设置是通过GAPRole_SetParameter(GAPROLE_RSSI_READ_RATE, sizeof(uint16), &desired_rssi_read_rate);来设置;

而上面这句要放在连接建立之后。

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

网站地图

Top