微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > 请教如何使用bluetopia协议栈修改cc2564的发射功率?

请教如何使用bluetopia协议栈修改cc2564的发射功率?

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

如题,谢谢。

当使用bluetopia+cc2564作为central设备,在连接peripheral设备时,功耗很高,只有连接建立后,功耗才能降下来。如果长时间连不上,例如peripheral设备不在覆盖范围时,central设备的功耗一直在三十几mA的水平上徘回,很耗电。

当使用spp连接其它经典蓝牙设备时,连接期间功耗也很高。

有关发射功率 可以尝试调用如下函数

int BTPSAPI VS_Set_Max_Output_Power(unsigned int BluetoothStackID, Byte_t MaxPower)

 

有关降功耗,不一定要降低发射功率,可以查一下是否休眠模式已经打开了?在BLE工作时,广播时间的长短,结束后是隔一段时间再广播还是按了某个键之后在广播?BLE操作处理的不同也会功耗不同。SPP是标准蓝牙的协议,功耗较BLE高

多谢,加入了VS_Set_Max_Output_Power函数,发现编译错误。问题出在如下语句上:

/* Assign the Power Vector into the command. */
if((Index == 0) && (FormatIndex == 0))
ASSIGN_HOST_BYTE_TO_LITTLE_ENDIAN_UNALIGNED_BYTE(&CommandBuffer[2 + FormatIndex], (Byte_t)(MaxPower * 2));
else
ASSIGN_HOST_BYTE_TO_LITTLE_ENDIAN_UNALIGNED_BYTE(&CommandBuffer[2 + FormatIndex], (Byte_t)(PowerVector * 2));

查看ASSIGN_HOST_BYTE_TO_LITTLE_ENDIAN_UNALIGNED_BYTE的定义为:

#define ASSIGN_HOST_BYTE_TO_LITTLE_ENDIAN_UNALIGNED_BYTE(_x, _y) \
{ \
((Byte_t *)(_x))[0] = ((Byte_t)(_y)); \
}

问题就在这里,将上述宏定义改为:

#define ASSIGN_HOST_BYTE_TO_LITTLE_ENDIAN_UNALIGNED_BYTE(_x, _y) \
do { \
((Byte_t *)(_x))[0] = ((Byte_t)(_y)); \
} while (0)

编译通过。

请问休眠模式怎么打开?是否有相应例子?多谢。

我用cc2564作为central设备,用于连接第三方心率腕表,每秒钟都会接收到心率腕表的心率数据,之后通过经典蓝牙的spp发到pc上。

请问这种工作方式怎样改善功耗呢?

有一些函数是和Sleep相关的,例如

int BTPSAPI VS_Enable_Sleep_Mode(unsigned int BluetoothStackID, Boolean_t Enable)

int BTPSAPI VS_Update_HCILL_Parameters(unsigned int BluetoothStackID, Word_t InactivityTimeout, Word_t RetransmitTimeout, Byte_t CTSPulseWidth)

需要参考的话,可以看一下例程HOGPKeyboardDemo,这个例程里面有涉及到sleep mode。

 

有关应用场景,首先central设备的功耗肯定比纯BLE的peripheral设备高,SPP的使用时间越少相对而言肯定更省功耗

多谢,我在初始化协议栈后,开始调度之前,调用了函数VS_Set_Max_Output_Power,传入的功率值是最小值0,感觉效果不明显。另外,该函数好像还有点问题,如下所示:

SmallestDifference      = ((MaxPower - 4) >= 0) ? (MaxPower - 4):(-(MaxPower - 4));

因为MaxPower 是无符号类型,因此“(MaxPower - 4) >= 0”应该是一直为真的,也就是说问号表达式的后一部分不会得到执行。我试着将其改为int型,感觉没有明显变化。

另外,在执行connectledevice函数时,功耗依然非常高,高达三十几mA,不知何故。连接成功后,功耗迅速下降到5mA左右。

这个地方应该是在把数字变成负数

不妨试试12和0看看差别

这种情况,如需降低功耗,要注意以下几点:

1,  需要把sleep mode enable。

需要把      HCI_DRIVER_SET_EXTENDED_COMM_INFORMATION_DELAY(&HCI_DriverInformation, 1, 115200, cpUART, 150);

改为      HCI_DRIVER_SET_EXTENDED_COMM_INFORMATION_DELAY(&HCI_DriverInformation, 1, 115200, cpHCILL, 150);

修改之后,ACL保持连接之后,进入sniff+sleep,电流能够降低到0.04mA。

2,需要enable sniff mode,这个在工程里面本来就已经打开了。

3,需要修改scan(BLE), inquiry(BREDR), page scan mode, inquiry scan mode下面的interval。这样可以相应降低蓝牙设备在inquiry, inquiry scan和 page scan几种模式下的功耗。您提出的问题看起来就是这个情况。具体的API在您的另一个帖子里回复了。

非常专业的解答,高手,赞。

谢谢.我们是TI的无线连接第三方合作伙伴,您也可以直接联系contact@wi-linktech.com,或者www.wi-linktech.com

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

网站地图

Top