On Sep 13, 2006, at 9:22 AM, David Moss wrote:

I am in the final stages of implementing a CC2420 low power listening library for TinyOS 2.x. I'm not intending it to be compliant with any kind of standard; instead, I want it to be functional. This does not require long preambles, and does not require peer-to-peer synchronization.

Initial results on a tmote indicate 5.09 mAh/day at 2-second receive check intervals. This will probably get lower.

Since it's not quite finished and I'm not sure if/when I'll contribute it, I'll explain how I have implemented this in case you want to try it yourself:

Summary: On the Rx end, it's a periodic channel energy check. On the Tx end, it's a repetitively transmitting message.

1. Edited CC2420TransmitP to provide a "CC2420Cca" interface that allows external components to sample the status of the CCA pin when the radio is on and not doing anything. The "getCca()" command simply verifies the state is good to go, then sets the backoff timer to the CC2420_BACKOFF_PERIOD. The backoff timer fires, ensuring the Rx mode has been set for enough symbol periods for the CCA pin to be valid, and then sends back the reading in an event.

2. Built a CC2420DutyCycle component that duty cycles the CC2420 radio on and off. After the radio turns on, the CCA is checked three times in a row. If one of these checks indicates that the channel is *not* clear, then someone is transmitting. The radio is left on indefinitely at this level, only to be turned back off again by higher levels of this architecture after packets are done receiving. If nobody is transmitting, turn the radio off immediately. Total time the radio is on (in the current version): 3.7 ms from start to finish, but most of that time is spent at a lower power (<5mA) starting up the radio.

3. Built a low power listening module that provides send/receive interfaces and sits on top of the duty cycling component. When low power listening is enabled, the duty cycling is turned on. When a message is detected and received at this level, the message is passed up to the application level and leaves the radio on for a brief period of time in case other messages are coming. If this time expires, the radio turns off and continues duty cycling. Ideally, an ack is returned as well.

On the transmitting end, the send event in this LPL module actually retransmits the message over and over again up to the length of the duty cycle period, and adjusts the backoff period to be very short so there is not much space between messages. If an ack is heard, it quits transmitting early (an advantage over the long preamble method!) and signals sendDone. Otherwise, sendDone gets signaled after the duty period expires.


There you have it, low power CC2420 duty cycling, very similar to CC1000's BMAC.

The new TinyOS 2.x CC1000 low power listening does energy checks on the channel as well, instead of preamble checks, only firing up the bias of the radio and leaving the rest of the radio off. This receive check ("RSSI Pulse Check") scheme does not require long preambles if your message (with short preambles) is being sent over and over again for a full receive period. By sending repeating messages, you can also cut the transmission length short if you receive an ack in the middle, saving on Tx energy and decreasing transmission latency. I've tested this.

-david


This is very cool. Once you feel comfortable with its stability, it's definitely something that the 2.x core release could benefit from. Let me know if that's something you're interested in pursuing.

I think that there's a lot of agreement in the community that this is a really critical thing to have. There are two papers in SenSys that propose different LPL approaches with the CC2420.

X-MAC, from CU Boulder, uses channel polling, but rather than just sending a long preamble, the transmitter sends very short packets; as soon as one is acknowledged by the recipient (showing that it is on), the transmitter sends the full length packet. They have a tech report online:

http://www.cs.colorado.edu/department/publications/reports/docs/CU- CS-1008-06.pdf

The second is SCP-MAC, from USC/ISI. SCP-MAC uses loose time synchronization based on preamble sampling in order to decide when to start sending a preamble. So rather than send a really long preamble, you send a much shorter one and start doing so a little bit before you expect the receiver to sample the channel:

http://www.isi.edu/~johnh/PAPERS/Ye05a.html

Note that both of these are earlier (tech report) versions of the papers; the final papers may have different results, evaluation, etc. Go to SenSys to hear the talks, it's good for your soul, etc.

One of the goals in TinyOS 2.x is to have well defined interfaces and abstractions; with such a stable ground in place, it becomes easier to perform comparative evaluation (assuming that systems follow TEPs). It would be great to take these three approaches and evaluate them side-by-side.

Phil


_______________________________________________
Tinyos-help mailing list
[email protected]
https://mail.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help

Reply via email to