TI中文支持网
TI专业的中文技术问题搜集分享网站

POWER_SAVING打开时,CC2541无法广播

POWER_SAVING打开时,CC2541无法广播CC2541。sniffer抓取不到任何数据。

目前我的BLE板子没有设计触发按键,所以需要蓝牙一直工作在低功耗广播状态下。我打算采取的方案是1S广播一次,400MS的任务定时。在没有广播或任务时,需要蓝牙进入低功耗P2模式。

这个是adveritise 设置

static uint8 advertData[] =
{
// Flags; this sets the device to use limited discoverable
// mode (advertises for 30 seconds at a time) instead of general
// discoverable mode (advertises indefinitely)
0x02, // length of this data
GAP_ADTYPE_FLAGS,
DEFAULT_DISCOVERABLE_MODE | GAP_ADTYPE_FLAGS_BREDR_NOT_SUPPORTED,

// service UUID, to notify central devices what services are included
// in this peripheral
0x03, // length of this data
GAP_ADTYPE_16BIT_MORE, // some of the UUID's, but not all
LO_UINT16( SIMPLEPROFILE_SERV_UUID ),
HI_UINT16( SIMPLEPROFILE_SERV_UUID ),

};

Jason Li1:

广播间隔是1S(1600)时sniffer可以偶尔收到数据包,但是大部分都是FCS错误(见附图)。200MS时完全收不到数据包。

Jason Li1:

电路板上没有设计外部 32.768H晶振, 在另外的论坛上搜到的相关解释:

问:

I had a project that worked just fine with the default power management settings.

Once I turned on the POWER_SAVING flag, the device started getting stuck when sleeping from the main loop.

Specifically, This behavior is presented in void halSleep( uint32 osal_timeout ) in hal_sleep.c, in line 344:

// check if radio allows sleep, and if so, preps system for shutdownif ( LL_PowerOffReq(halPwrMgtMode) == LL_SLEEP_REQUEST_ALLOWED )

When stepping over the call to LL_PowerOffReq, the debugger stops responding and the device probably does too, for no good reason. When manually pressing the "break" button in the workbench, I reach llStopTimer2(), but never leaves there.

I can't step-in to the function because it has no source. When stepping through the assembly it's difficult to determine when exactly it gets stuck, since it does all sorts of banked-code trickery, various jumps etc, and the debugger responds VERY slowly to single-instruction stepping (don't understand why).

This happens right on the first sleep the device encounters. I'm working without any optimizations. Using CC-Debugger.

Any help will be appreciated.

答复:

Do you have an external 32.768Hz oscillator?

LLPowerOffReq doesn't really do anything interesting apart from stopping the MAC timer and syncing it with the sleep timer. Which will require a functional sleep timer.

没有32Khz外部晶振,不能进入sleep状态么?

Jason Li1:

回复 Jason Li1:

没有回?还是自己顶吧。问题解决了。32Khz晶振必须焊上才能进入低功耗休眠状态(PM2)。无广播时电池电流约150uA。

但是有个疑问,没有32Khz晶振,系统自带的RC振荡器(32K)不能工作么?希望有大神来解释。

David wei:

回复 Viki Shi:

/* Sleep Clock */

#define EXTERNAL_CRYSTAL_OSC 0x80 //0x00 // external 32kHz XOSC#define INTERNAL_RC_OSC 0x80 // internal 32kHz RCOSC

这个可以定义使用外部还是内部32.768晶振……

赞(0)
未经允许不得转载:TI中文支持网 » POWER_SAVING打开时,CC2541无法广播
分享到: 更多 (0)