This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

cc2540的功耗测量

Other Parts Discussed in Thread: 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系统就会自动进入低功耗调节?怎么确定蓝牙从机程序已经进入低功耗