如题,谢谢。
当使用bluetopia+cc2564作为central设备,在连接peripheral设备时,功耗很高,只有连接建立后,功耗才能降下来。如果长时间连不上,例如peripheral设备不在覆盖范围时,central设备的功耗一直在三十几mA的水平上徘回,很耗电。
当使用spp连接其它经典蓝牙设备时,连接期间功耗也很高。
Barbara Wu:
有关发射功率 可以尝试调用如下函数
int BTPSAPI VS_Set_Max_Output_Power(unsigned int BluetoothStackID, Byte_t MaxPower)
有关降功耗,不一定要降低发射功率,可以查一下是否休眠模式已经打开了?在BLE工作时,广播时间的长短,结束后是隔一段时间再广播还是按了某个键之后在广播?BLE操作处理的不同也会功耗不同。SPP是标准蓝牙的协议,功耗较BLE高
my wu:
回复 Barbara Wu:
多谢,加入了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)
编译通过。
my wu:
回复 Barbara Wu:
请问休眠模式怎么打开?是否有相应例子?多谢。
我用cc2564作为central设备,用于连接第三方心率腕表,每秒钟都会接收到心率腕表的心率数据,之后通过经典蓝牙的spp发到pc上。
请问这种工作方式怎样改善功耗呢?
Barbara Wu:
回复 my wu:
有一些函数是和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的使用时间越少相对而言肯定更省功耗
my wu:
回复 Barbara Wu:
多谢,我在初始化协议栈后,开始调度之前,调用了函数VS_Set_Max_Output_Power,传入的功率值是最小值0,感觉效果不明显。另外,该函数好像还有点问题,如下所示:
SmallestDifference = ((MaxPower – 4) >= 0) ? (MaxPower – 4):(-(MaxPower – 4));
因为MaxPower 是无符号类型,因此“(MaxPower – 4) >= 0”应该是一直为真的,也就是说问号表达式的后一部分不会得到执行。我试着将其改为int型,感觉没有明显变化。
另外,在执行connectledevice函数时,功耗依然非常高,高达三十几mA,不知何故。连接成功后,功耗迅速下降到5mA左右。
my wu:
回复 Joe@Wi-linktech:
非常专业的解答,高手,赞。
Joe@Wi-linktech:
回复 my wu:
谢谢.我们是TI的无线连接第三方合作伙伴,您也可以直接联系contact@wi-linktech.com,或者www.wi-linktech.com