请教如何使用bluetopia协议栈修改cc2564的发射功率?
如题,谢谢。
当使用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