keyfob demo cc2540发射功率设置与范围问题
目前我们所做的方案,需要能手动设置不同的发射功率,请问cc2540的发射功率范围是多少DBM?还有我们在软件里面设置时,是对txPwrLevel值进行修改就可以呢还是调用其他函数?另外我在软件里看到接口函数HCI_EXT_SetTxPowerCmd,此函数是否就是设置发射功率的,如是,但参数里只定义了4个级别,不够我们调节所用,有无其他函数接口?
Hi Wang wx,
发射功率范围就是-23dBm 到 +4dBm. 默认设置的是0dBm, 这个在代码里面也有体现.
相信你说的是proximity profile里面的"txPwrLevel" 变量, 如果你用的是keyfob, 这个只是用来发nofity告诉比如IOS的APP目前Keyfob的发射功率是多大, 设置这个不会起改变RF发射功率的作用.
你说的没错, HCI_EXT_SetTxPowerCmd()就是用来设置发射功率的. 而且只有这个函数. 但是只有-23dbm, -6dbm, 0 dbm, +4dbm四个级别. 不知道你所要的范围是怎么样的? 不过, 比如说, -6dbm跟-10dbm几乎是没什么差别的.
Hi Yan,
谢谢解答,你的回答对我非常有用,另外 在keyfob里面有如下定义:
// GAP Role Callbacks
static gapRolesCBs_t keyFob_PeripheralCBs =
{
peripheralStateNotificationCB, // Profile State Change Callbacks
NULL // When a valid RSSI is read from controller
};
我想在此添加函数来获得RSSI值,该怎么做?是否在我的函数里直接调用HCI_ReadRssiCmd就可以?
Hi Wang wx,
这个NULL的位置是个回调函数.当你调用HCI_ReadRssiCmd()获取RSSI值的时候, 最终这个如果不是NULL的话就会被调用.
被调用的位置请看peripheral.c 中的 "gapRole_ProcessOSALMsg() ".
case HCI_GAP_EVENT_EVENT: // 判断是否是HCI event
if ( pMsg->status == HCI_COMMAND_COMPLETE_EVENT_CODE ) // 是否HCI command complete event, 当调用HCI_ReadRssiCmd()
// 读取RSSI命令, 会有HCI command complete event 从controller返回
if ( pPkt->cmdOpcode == HCI_READ_RSSI ) // 是否为读取RSSI命令的 command complete event 返回
if ( (gapRole_state == GAPROLE_CONNECTED) && (rssi != RSSI_NOT_AVAILABLE) ) // 如果处于连接状态, 而且返回的RSSI值有效
{
// Report RSSI to app
if ( pGapRoles_AppCGs && pGapRoles_AppCGs->pfnRssiRead ) // 这里就判断你所提结构体里面那个回调是否为NULL
{
pGapRoles_AppCGs->pfnRssiRead( rssi ); // 如果你定义了回调处理函数, 就在这里调用处理
}
}
Hi Yan,
你的解答让我受益匪浅,不过在看程序和CC2540数据手册的时候,仅看到-23dbm、-6dbm、0dbm、4dbm四个级别,
而且也没找到射频发射功率设置相关的寄存器,不知道是我没找到相关的数据手册还是TI对这部分屏蔽了,只是提供库函数调用来设置。
期待你的解惑
can,
过奖。
只有这几档可以调节。
Yan,
谢谢你的回答,另外,不知道可否通过寄存器直接设置?
can,
不可以。
254x的BLE模式下没有寄存器可以让你配置发射功率。
Yan,
好的,谢谢你的回答
Yan,
好的,谢谢你的回答
can,
不客气。
你好,我最近在做一个蓝牙定位的项目,用到cc2540
请问一下,有哪些有助开发的软件或者硬件或者文档资料