由于国庆节假期,帖子审批以及工程师回复将会有所延迟,敬请谅解

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.

CC1101超低功耗问题:运行将CC1101设置为接收模式的指令,功耗马上变大。

Other Parts Discussed in Thread: CC1101, TPS62730

把板子上的CC1101的WOR配置好之后,消耗的电流稳定在1mA,但是一旦运行指令:CC1101_Set_Mode( RX_MODE );//将CC1101设置为接收模式。电流马上变成15mA。

请问应该怎么解决这个问题,系统电流最大不能超过1mA。

注:主控是Stm8S003

  • 在RX模式下,15mA是正常的,除非一直低功耗,RX,TX都是十几mA的电流

    • In RX, the current drawn from a 3.6 V battery is typically less than 
      11 mA when TPS62730 output voltage is 2.1 V. When connecting CC1101 
      directly to a 3.6 V battery the current drawn is typically 17 mA
    • In TX, at maximum output power (+12 dBm), the current drawn from a 
      3.6 V battery is typically 22 mA when TPS62730 output voltage is 2.1 V. 
      When connecting CC1101 directly to a 3.6 V battery the current drawn is 
      typically 34 mA

    以上是RX/TX模式下的电流消耗,可以参考一下

  • 那我是应该,每次发送或者接收后,马上进入睡眠模式,然后定时唤醒,是这样么。

    我刚接触这款芯片,有问的不合适的地方您多包涵。

  • 你好,就是请问一下,如果你说将CC1101设置成数据接收完成后立即进入sleep模式(降低功耗),那这颗芯片在sleep时候是regulator off、crystal off,那它是怎么知道下一次有信息传送过来需要再次进入到RX模式的呢?你说的通过单片机SPI定时的唤醒它,如果数据发射端刚好是在它sleep时间段内怎么办,岂不是会接收不到?

  • 我现在刚开始做不久,打算采取的方案是,发送端连续发3次指令,比如发这三次指令所需的时间是3t的话,我接收机睡眠的时间是1t,那么在这3t内,接收机是一定能够接收到一次完整的数据的。而且我有开WOR。

    现在我一开接收,电流就变成十几毫安,所以打算用睡眠模式把电流降到1mA一下。

    这个是我在英文论坛找到的信息:

    Okay, here is another update and errata about last answer. 

    First bit in "TI_CCxxx0_MCSM0" register need to be configured to "0", if you want possibility to turning On/Off internal oscillator.

    And also after putting CC1101 module to sleep,  if you want to send/ receive data, you need to wake up  module from "Sleep" state.

    Code should look like that: 

    TI_CC_CSn_PxOUT &= ~TI_CC_CSn_PIN;      // /CS low
     while (TI_CC_SPI_USCIA0_PxIN & TI_CC_SPI_USCIA0_SOMI);      // Wait till SOMI go to "0"
     TI_CC_CSn_PxOUT |= TI_CC_CSn_PIN;        // /CS high

     TI_CC_SPIStrobe(TI_CCxxx0_SFRX);                // Flush RX buffer
     TI_CC_SPIStrobe(TI_CCxxx0_SIDLE);               // IDLE 

  • 我现在试着进入睡眠模式,但是一直进不去,请问你们这有可以参考的程序么?

  •   我就想知道RX端在sleep时候是如何监听有没有数据过来然后进入RX模式的,是被动的被MCU的CSN脚唤醒,还是RX端自己知道有数据来了,主动转到RX模式的,,,另外你说的连续发送三次数据,只需确保接收成功一次就可以,这种做法是合理的做法吗,

  • 我也是刚接触这个芯片,怕回答错了,你最好去看一下官方手册swrs064i中19.5节,有详细的讲解。

    第二个问题,我在论坛里看到有这种做法,我自己也觉得可行,暂时还在调试睡眠和唤醒,还没有做大这一步。

    希望你这头有进展也能分享给我。

  • RF芯片在sleep状态下,是不能接收数据的。必须在发送端开始发送之前,将接收端的RF置为rx状态,才能接收到数据。

    对于有功耗要求的应用,一般是两种处理方式。

    1. 收发两端保持时间同步,接收端MCU知道应该在什么时刻唤醒并处于rx状态接收数据。考虑到时间同步的偏差,接收端需要稍微提前一些进入rx状态,以保证发送端发出的数据能落入接收窗口。

    2.如果发送端没有低功耗要求,则可以发送端不停的发送,接收端周期性唤醒接收。

    关于第二个问题,在有些应用场合,接收端只有接收功能,没有发送功能,因此无法回复ACK告知发送端接收成功。针对这种应用,为了提高数据被接收到的概率,通常采用发送端同一个数据包连续发送多次的方法。