Telosb 低功耗模式:

Telosb Low Power Mode:

我正在做一个涉及切换 Telosb 状态的项目,我想知道如何将微尘设置为 "sleep"(低功率)以及如何唤醒微尘。

当任务队列为空时,TinyOS 调度程序会自动将 mote 置于休眠 (low-power) 模式(所以基本上是在无事可做时 - 没有代码可执行)。微尘被中断唤醒,例如定时器中断(定时器事件发生),无线电中断(无线电数据包已收到)或外部IO引脚中断(用户按下按钮)。

但是,微控制器具有各种 low-power 级别,在 wake-up 条件、可以继续工作的外围设备、wake-up 延迟和功耗方面有所不同。通常,在较低的睡眠水平下,微尘消耗的功率较少,但它们可以被少数中断唤醒,并且大多数外围设备将停止运行。休眠级别根据微尘即将休眠时正在运行的外围设备进行调整。

可以覆盖睡眠级别。这就是 drivers 所做的,根据他们的状态提供最低可接受的睡眠水平。例如,如果请求无线电数据包接收,无线电 driver 可能会阻止进入最深度睡眠级别,因为在这种情况下数据包会丢失(也就是说,无线电中断通知数据包接收不会唤醒微尘向上)。要覆盖睡眠级别,您的模块必须实现接口 PowerOverride,以便它 returns 调用 lowestState 时可接受的最低睡眠级别:

interface PowerOverride {
    async command mcu_power_t lowestState();
}

PowerOverride 必须连接到组件 McuSleepC:

component McuSleepC {
    provides interface McuSleep;
    provides interface PowerState;
    uses interface PowerOverride;
}

mcu_power_t 是描述可能的功率级别的 chip-specific 类型。对于基于 MSP430 微控制器的 TelosB,此类型在 tos/chips/msp430/msp430hardware.h:

中定义
enum {
    MSP430_POWER_ACTIVE = 0,
    MSP430_POWER_LPM0   = 1,
    MSP430_POWER_LPM1   = 2,
    MSP430_POWER_LPM2   = 3,
    MSP430_POWER_LPM3   = 4,
    MSP430_POWER_LPM4   = 5
};

一般的结论是,如果你只开发应用程序,你永远不必担心睡觉或醒来。

另请参阅:Microcontroller Power Management