This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

keyfob demo cc2540发射功率设置与范围问题

Other Parts Discussed in Thread: 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

    请问一下,有哪些有助开发的软件或者硬件或者文档资料