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

cc254x simpleBLECentral RSSI 获取更新问题

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

一个板子跑SimpleBLEPeripheral 做 从设备

另外一个板子使用CC2540 Development Kit套件,软件用simpleBLECentral 工程。如果使用BLE-CC254x-1.4的协议栈,central设备跟peripheral设备连上之后,按向下键,获取并在LCD上显示当前的RSSI。 这个RSSI并不能实时更新,无论central和peripheral的距离怎么改变。 除非是断开后重新连接,RSSI显示数值才会改变。

但是同样的操作,在BLE-CC254x-1.2.1的协议栈中,RSSI是能根据距离变化而改变的。

有谁知道其中原因吗,能在BLE-CC254x-1.4上优化好这个问题吗,请教如何解决?谢谢

boson,

这是已知的一个bug, 在下一版新的SDK中会修正。

谢谢!

这个是在BLE1.4的协议栈中的问题,没有源码可以修正。只好等下一个版本。但如果没有特别要求的话,可以用BLE 1.3.2版替代,1.3.2的处理是比较正确的。

  • Rssi的周期获取是在Profile Role 中的center.c中实现的,提供部分回调接口供simpleBLECentral注册使用。

static const gapCentralRoleCB_t simpleBLERoleCB =
{
simpleBLECentralRssiCB, // RSSI callback
simpleBLECentralEventCB // Event callback
};

  • 在APP层的simpleBLECentralRssiCB回调中只简单打印LCD。

LCD_WRITE_STRING_VALUE( "RSSI -dB:", (uint8) (-rssi), 10, HAL_LCD_LINE_1 );

  • 整个routing是开始时启动一个计时器,周期为1秒。然后在center.c中的gapCentralRole_ProcessOSALMsg( )函数中处理rssi消息,调用HCI层的API接口HCI_ReadRssiCmd( pRssi->connHandle )。这也是异步的,当获取到rssi值后,系统会调用初始化时注册的simpleBLECentralRssiCB。 

 

  • 但是最终问题就在这个过程中,int8 rssi这个参数传递的永远是第一次连接或者最后一次读写GATT value时的rssi值,并不会动态地提供瞬时rssi值。其实在Advertising和Connect Event过程中,底层数据包都携带rssi参数,但是1.4 SDK没有在Connect Event中把系统传过来的rssi值透传给注册的simpleBLECentralRssiCB函数的参数int8 rssi,从而导致LCD显示的值毫无变化,除非做一次读写操作。

如果回退到SDK1.3.2版本,仍然会有显示的minor bug. 在距离较远的时候,rssi信号不强,跳变比较厉害的时候,-rssi会显示129。因为一个uint8是255,如果传入的rssi为0,-0的时候会出问题。所以在使用是,可以把这个特殊数据过滤掉,则基本不影响使用。

 你好,这句话:“整个routing是开始时启动一个计时器,周期为1秒。”

是不是就是: GAPCentralRole_StartRssi( p->simpleBLEConnHandle, DEFAULT_RSSI_PERIOD );

这个里面的:“DEFAULT_RSSI_PERIOD ”,宏定义为1000。

那是否是我最小可以定义为1即1ms。在1.3.2协议栈下获取RSSI。

@Y

1)麻烦问下可以测量主机本身的rssi的值么?我是做主机的,如果可以通过哪个函数实现呢?

2)SimpleBLECentralRssiCB( uint16 connHandle, int8 rssi )

这个是么?

3)这个是在什么时候调用的呢?

4)是测量哪个rssi的值的呢?

http://blog.csdn.net/Stephen_Lu_Fahai/article/details/49893509

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

网站地图

Top