CC1101超低功耗问题:运行将CC1101设置为接收模式的指令,功耗马上变大。
把板子上的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告知发送端接收成功。针对这种应用,为了提高数据被接收到的概率,通常采用发送端同一个数据包连续发送多次的方法。