TinyOS Radio Stacks Joe Polastre, Phil Buonadonna, etc Monday, October 20 2003
Radio Stacks • Mica (Old) • Mica (MicaHighSpeedRadio) • Mica2 (CC1000) • Future?
Mica and Rene Typical Radio Stack Generic Comm AM Packet Layer New Radios (CC2.4K) Byte Layer Radio Control • Mica2 Bit Layer
Mica (Old) Generic Comm AM CRCPacketObj SecDedRadioByte RFM
Mica (MicaHighSpeedRadio) CSMA Preamble Detect Start Sym Detect Generic Comm AM RadioCRCPacket Encoding Captures radio timing and syncs receiver to sender MicaHighSpeedRadioM ChannelMon RadioTiming SlavePin SpiByteFifo SecDedEncoding RandomLFSR
Mica2 (CC1000) Wires the control and data paths: Implementation hidden from app Generic Comm AM CSMA Encoding Data Preamble Detect Synchronization Control (Freq,Power,etc) CC1000RadioC CC1000Control CC1000RadioIntM SpiByteFifo RandomLFSR ADC
Mica2 Radio Stack Phil B
Mica2 Switch to TX Mode Switch to RX Mode MAC Delay Preamble Sync Packet Transmission 1-128 18 2 36 56 250ms 250ms
Mica2 Preamble • CC1000 must “sync” its clock to incoming signal • With manchester encoding, 17 sync bytes are required for longest range • an extra byte is added for offset in receiving
Strength • Mica • sends two strength bytes to measure high amplitude via RSSI pin • Mica2 • with FSK, both ‘0’ and ‘1’ contain energy • measure energy at any point during packet reception, no need for extra bytes
Synchronous ACKs • Mica • Switch from Transmit to Receive mode instantly. • No need to resynchronize ack sender. • Mica2 • Switch from Transmit to Receive mode in 250ms • CC1K requires that each receiver lock to the incoming signal (~18 bytes = 7.5ms) • Almost as expensive as sending a packet!
Mica • Hardware sets automatic gain control (AGC) using a capacitor in ASK mode • Channel Monitor looks for ‘1’ bits on the radio while waiting to send • start symbol/preamble detection
Mica2 Release • Set a fixed noise floor threshold • On transmission: • Take RSSI reading • If reading > floor, transmit on next byte boundary from radio • With a few months in the lab, what happens?
Collisions Oh My! Channel Clear 1 2 4 3
Radio RSSI sampled at 5kHz CC1000 Radio MAC Current MAC Incoming Packet Adjusted Threshold Adjusted Threshold with Averaging Channel Considered Clear Periodic Errors Channel Busy during Xmit
False Positives CC1000 Radio MAC Radio RSSI sampled at 5kHz Median over 5 sample window Average over 5 sample window Max over 5 sample window
Mica2 Joe • Use calibrated ADC • Adjust noise floor: • After each packet transmission, sample RSSI and add to 10 sample FIFO queue • Select median(Q) and add to EWMA • On transmit: • Take <=5 RSSI samples • If one reading > floor, transmit on next byte boundary from radio • Downside: can take up to 10 packets for the noise floor to settle
Brief Low Power Operation • Mica • Snooze: Node is either on or off • Radio: Can detect channel activity in microseconds • Radio startup time is negligible (10s of ms) • Mica2 • HPLPowerManagement: check the state of the mote and shut down if appropriate • Radio: Currently can detect channel activity in 7.5ms (18 bytes) • Using RSSI and MAC noise floor estimation, can reduce this time to ~1ms. • Radio start up time is up to 2500ms!
ACKs Revisited • If we can now reliably detect channel activity, can we do ACKs? • Answer: Hopefully. • How? • By switching modes and sending data (or pulse sending data), the receiver can detect this signal • Think amplitude shift keying • May be able to detect hidden terminals too • If ACK doesn’t have pattern but instead is constant energy, then someone didn’t detect the original transmitter and transmitted over him • Can be done in 4-5 bytes and doesn’t require the receiver to synchronize! • … but it hasn’t been tried yet.
Open Questions • Allow Application to control MAC backoff? • Is TOS_Msg the right networking abstraction for building sensor network apps and services? • OSI? S-MAC? • What does a stack look like where you can change MAC layers, security models, and encodings? Mica and Mica2 stacks are close, but not quite there…