cc2540的功耗测量
请问cc2540的功耗如何确定?如果用外接电源(如锂电池等)供电,应选择多大容量的电源同时时间可以用得比较长久?
建议参考帖子 http://www.deyisupport.com/question_answer/wireless_connectivity/bluetooth/f/103/t/59904.aspx
及官方文档 http://www.ti.com.cn/cn/lit/an/swra347a/swra347a.pdf
dcg,
关于功耗测试,请参考这个文件:http://www.ti.com/general/docs/lit/getliterature.tsp?baseLiteratureNumber=swra347&fileType=pdf
选择多大电源,得根据你实际产品的具体应用的实际功耗来决定。
没有任何外围器件,就是单单一个cc2540,仅完成发送功能,一个纽扣电池能连续工作一年以上或者几个月以上,确实吗?
dcg,
如果仅发送,不建立连接的话,是可以达到你的要求的。
hi,我的意思是:作为从机,主机(如通过lightblue作为主机)搜到到从机进行连接,接着从机不定时通过notification向主机发送数据,这样的功耗大吗?还有就是想问问,主从机建立连接后,如果两者之间在不进行通信时,从机或者主机会自动进入低功耗或者sleep状态,到要发送数据时才变为active状态吗?
dcg,
是的,从机在没有数据进行通信的时候,可以进入低功耗状态。
你可以通过设置connection interval 和 slave latency 来达到让你的从机有更长时间的低功耗状态,从而达到降低功耗的目的。这样目的也是为了维持连接的存在,问你随时要发数据做准备。
当你的从机处于低功耗模式的时候,一旦你有数据要发送,从机就可以立即醒过来,通过notification 发送数据给主机。
connection interval 和 slave latency一般如何设置才可以更大地降低功耗,而不会影响蓝牙主从机的基本的通讯?还想问问,在任务事件处理函数中中,加一个延时函数,蓝牙会自动断开,这是为什么啊?
dcg,
怎么设置参数来降低功耗,看你自己的具体应用了。 connection interval 的范围是从7.5ms 到 4s, slave latency 从 0 到 499,配合调节。
延时函数,你是怎么延时的?由于OSAL系统并不是真正的操作系统,如果你里面有循环之类的卡住了,会占用8051资源无法释放,导致没法同步连接,连接断开。
我这个基本没有什么外设,就是利用cc2540作为从机发送数据,还有,我想问问,先看下方从机处理程序中任务处理事件函数的其中一部分
if ( events & SBP_PERIODIC_EVT )
{
// Restart timer
if ( SBP_PERIODIC_EVT_PERIOD )
{
osal_start_timerEx( simpleBLEPeripheral_TaskID, SBP_PERIODIC_EVT, SBP_PERIODIC_EVT_PERIOD );
}
if(P0_0==0)
{
Sendchartask();
}
else
{
if(P0_0==1||flag2==1)
{
flag2=1;
Sendchartask();
if(n>=3)
{
while(n++<=4000&&flag3==0)
{
if(P0_0==0)
{performPeriodicTask('b');SerialPrintString("b");SerialPrintString(" "); flag3=1;}
}
if(flag3==0){ performPeriodicTask('a');SerialPrintString("a"); SerialPrintString(" ");}
n=0;flag1=0;flag2=0;flag3=0;
}
}
else if(P0_0==0&&flag2!=1)
{
Sendchartask();
if(n>5)
{
performPeriodicTask('d');SerialPrintString("d"); SerialPrintString(" ");
m=0;n=0;flag1=0;flag2=0;
}
}
}
else {/*performPeriodicTask('c');*/SerialPrintString("c");SerialPrintString(" ");if(P0_0!=0){flag=0;}}
return (events ^ SBP_PERIODIC_EVT);
}
红色字体部分,我是每隔一段时间(这里设置成0.02秒)进入一次SBP_PERIODIC_EVT,查询是否需要发送字符数据,我想知道,这样重复查询,如果不需要发送数据,从机还会是处于低功耗状态来查询吗?如果查询到需要发送字符数据,从机会被激活,发送数据完后会重新进入低功耗状态吗?我说加入延时会断开,就是在上述函数内加一个delay()函数,就会断开!
Hi Yan,
弱弱问下,这个Notification是跟主/从机有关么,我怎么觉得是ATT层和Server/Client有关的。。。。。。
Regards,
Holly
Holly,
跟主从无关, 确实是ATT 层的东西。
cg,
用delay()的话必定会造成MCU 挂起,因为OSAL 并不是一个真正的操作系统,能进行任务调度,本质上是个单线程的。
不发送数据,你有定时事件,从机会以PM2 模式进入低功耗,定时到达的时候醒过来进行查询。
http://www.ti.com.cn/cn/lit/an/swra347a/swra347a.pdf
按照 上图所示,当定时事件到来时,会出现上述MCU wake-up ,如果查询到不需要发送或者接收数据,接下来如Pre-processing 、Pre-Rx等过程不会出现,直接进入Pre-Sleep ,待下次定时事件到来时再次重复上述过程。可以这样理解吧?
cg,
你贴的图,是个connection event。这个醒过来是因为sleep timer,也就是32K晶振计时的connection interval时间到了,这个是百分之百必须醒过来,每次一次connection event 醒过来,RX 和TX 都会发生,不管有没有实际数据要传输。 如果没有实际数据传输,那么就发空数据包,这个叫做 LL Ack.。
如果是其他定时事件唤醒,那么和这个图无关,只会处理相应的事情,然后睡过去。
Yan
如果主从机已经连接上了,还是出现这个connection event吗?怎么理解这个connection event,出现这个的意义何在?关闭这个事件对通信有影响吗?
cg,
connection event 是BLE 协议规定的LL 层的基本通信单位,不能关闭。。。这不是“事件”。
你可以去看一下蓝牙 spec,volume 6, 关于BLE 的介绍。
Yan
我的 绑定和配对程序中出现了这个界面,我想改这个界面上显示的内容,在哪里可以修改的?
cg,
你是说设备名?Simple BLE Peripheral?
你可以通过GGS_SetParameter( GGS_DEVICE_NAME_ATT, GAP_DEVICE_NAME_LEN, attDeviceName ); 和 修改scanRspData[] 的内容来实现。
Yan
设备名我知道在哪里改,现在我是想改would like to pair with your iPhone。Enter the code shown on ...,这部分的内容,改为自己想显示的内容,如何修改?
cg,
这个。。。这个貌似是iPhone 自己的吧,苹果应该不让改。。。
我不熟iOS编程,但这个应该是苹果系统里面的吧,你最好找一下相应文档看一下。
好的,谢谢!
Yan
#define DEFAULT_DESIRED_CONN_TIMEOUT 1000
上面那个宏定义是定义supervision timeout,这个值得具体作用是怎样的?改变值得大小对通信有什么影响?
cg,
这个是连接超时参数,但是是10ms, 你定义了1000,那就是10000ms。
这个的意思是,连接建立后,master 或者 slave 有多长时间没理对方,一方就认为连接超时断开了。比如一方离开了之类。。。
这个你看一下蓝牙的spec,里面解释很清楚。在volume 6, BLE那块。
是看这个文档吗?
cg,
是的。就是这个文档。
Yan
我想问问蓝牙射频传输的穿透性如何?如果把蓝牙核心板封装在一个封闭的物品(如被一个金属物品包裹起来)里,还能把信号发送出去使得主机接收吗?
Yan
// Minimum connection interval (units of 1.25ms, 80=100ms) if automatic parameter update request is enabled
#define DEFAULT_DESIRED_MIN_CONN_INTERVAL 800
// Maximum connection interval (units of 1.25ms, 800=1000ms) if automatic parameter update request is enabled
#define DEFAULT_DESIRED_MAX_CONN_INTERVAL 800
// Slave latency to use if automatic parameter update request is enabled
#define DEFAULT_DESIRED_SLAVE_LATENCY 50
// Supervision timeout value (units of 10ms, 1000=10s) if automatic parameter update request is enabled
#define DEFAULT_DESIRED_CONN_TIMEOUT 1000
我把这些参数设置成上述情况,按道理来说超过了DEFAULT_DESIRED_CONN_TIMEOUT的时间连接应该会丢失,为什么我的不会断开连接?
Yan
想问几个问题:
1、主从机在不建立连接的情况下,从机调用的nitification函数仍然会把数据发送出去吧?
2、从机一直没有被连接,是不是一直都会在广播数据?
3、是不是添加了宏定义power_saving后,osal系统就会自动进入低功耗调节?怎么确定蓝牙从机程序已经进入低功耗