请问cc2540的功耗如何确定?如果用外接电源(如锂电池等)供电,应选择多大容量的电源同时时间可以用得比较长久?
Susan Yang:
建议参考帖子 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
Yan:
dcg,
关于功耗测试,请参考这个文件:http://www.ti.com/general/docs/lit/getliterature.tsp?baseLiteratureNumber=swra347&fileType=pdf
选择多大电源,得根据你实际产品的具体应用的实际功耗来决定。
waiting:
回复 Susan Yang:
没有任何外围器件,就是单单一个cc2540,仅完成发送功能,一个纽扣电池能连续工作一年以上或者几个月以上,确实吗?
Yan:
回复 waiting:
dcg,
如果仅发送,不建立连接的话,是可以达到你的要求的。
waiting:
回复 Yan:
hi,我的意思是:作为从机,主机(如通过lightblue作为主机)搜到到从机进行连接,接着从机不定时通过notification向主机发送数据,这样的功耗大吗?还有就是想问问,主从机建立连接后,如果两者之间在不进行通信时,从机或者主机会自动进入低功耗或者sleep状态,到要发送数据时才变为active状态吗?
Yan:
回复 waiting:
dcg,
是的,从机在没有数据进行通信的时候,可以进入低功耗状态。
你可以通过设置connection interval 和 slave latency 来达到让你的从机有更长时间的低功耗状态,从而达到降低功耗的目的。这样目的也是为了维持连接的存在,问你随时要发数据做准备。
当你的从机处于低功耗模式的时候,一旦你有数据要发送,从机就可以立即醒过来,通过notification 发送数据给主机。
waiting:
回复 Yan:
connection interval 和 slave latency一般如何设置才可以更大地降低功耗,而不会影响蓝牙主从机的基本的通讯?还想问问,在任务事件处理函数中中,加一个延时函数,蓝牙会自动断开,这是为什么啊?
Yan:
回复 waiting:
dcg,
怎么设置参数来降低功耗,看你自己的具体应用了。 connection interval 的范围是从7.5ms 到 4s, slave latency 从 0 到 499,配合调节。
延时函数,你是怎么延时的?由于OSAL系统并不是真正的操作系统,如果你里面有循环之类的卡住了,会占用8051资源无法释放,导致没法同步连接,连接断开。
waiting:
回复 Yan:
我这个基本没有什么外设,就是利用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()函数,就会断开!
HG:
回复 Yan:
Hi Yan,
弱弱问下,这个Notification是跟主/从机有关么,我怎么觉得是ATT层和Server/Client有关的。。。。。。
Regards,
Holly