+ All Categories
Home > Documents > TinyOS Programming Boot Camp (V) Communication

TinyOS Programming Boot Camp (V) Communication

Date post: 12-Jan-2016
Category:
Upload: elias
View: 39 times
Download: 1 times
Share this document with a friend
Description:
TinyOS Programming Boot Camp (V) Communication. David Culler, Jason Hill, Robert Szewczyk, and Alec Woo U.C. Berkeley 2/9/2001. Outline. Media Access Control Ad Hoc Routing Mechanism Hands on Exercise. Mote Characteristics. Hardware: single channel RF radio - PowerPoint PPT Presentation
31
David Culler, Jason Hill, Robert Szewczyk, and Alec Woo U.C. Berkeley 2/9/2001 TinyOS Programming Boot Camp (V) Communication
Transcript
Page 1: TinyOS Programming Boot Camp (V) Communication

David Culler, Jason Hill, Robert Szewczyk, and Alec WooU.C. Berkeley2/9/2001

TinyOS Programming Boot Camp (V)Communication

Page 2: TinyOS Programming Boot Camp (V) Communication

2-9-2001 TOS Boot Camp 2

Outline

• Media Access Control

• Ad Hoc Routing Mechanism

• Hands on Exercise

Page 3: TinyOS Programming Boot Camp (V) Communication

2-9-2001 TOS Boot Camp 3

Mote Characteristics

• Hardware: single channel RF radio

• Nodes contend for the same wireless channel

• Traffic is likely– Periodic : nature of sensor networks applications

– Correlated : detection of common events

• Collision detection mechanism is not available

• Carrier Sense Multiple Access (CSMA)

Page 4: TinyOS Programming Boot Camp (V) Communication

2-9-2001 TOS Boot Camp 4

CSMA in TOS Framework

• Channel capacity ~25 packet/s– High amount of traffic due to

» High node density

» High transmission rate of each node

• Application layer lacks information about the channel

• Place CSMA at RADIO_BYTE level in between application layer and RFM radio component

Page 5: TinyOS Programming Boot Camp (V) Communication

2-9-2001 TOS Boot Camp 5

CSMA Design

• Basic mechanism– Listen on the channel before transmit

» Only transmit if channel is idle– If the channel is busy, “wait” until channel becomes idle

again

• Correlated periodic traffic may lead to repeated collisions

• Introduce random delay in MAC layer

• If channel becomes busy, MAC backpressures to application to drop further transmissions

Page 6: TinyOS Programming Boot Camp (V) Communication

2-9-2001 TOS Boot Camp 6

CSMA in TOS Network Stack

Application

AM

PACKET

RADIO BYTE

RFM

Backpressure

Channel is busy

AM_SEND_MSG fails

VAR(state) != 0

Page 7: TinyOS Programming Boot Camp (V) Communication

2-9-2001 TOS Boot Camp 7

One CSMA Example

• In each RADIO_BYTE components

• Random listening period

TransmissionRequest

Listen forRandom Period

Transmit

Busy

Idle

Page 8: TinyOS Programming Boot Camp (V) Communication

2-9-2001 TOS Boot Camp 8

FOUR_B_RADIO_BYTE.c (RADIO_BYTE_INIT)

• 16 bit Linear Feedback Shift Register (LFSR) as Pseudo Random Number Generator

• Initialization

char TOS_COMMAND(RADIO_BYTE_INIT)(){

TOS_CALL_COMMAND(RADIO_SUB_INIT)();

VAR(wait_amount) = 12;

VAR(shift_reg) = 119 * LOCAL_ADDR_BYTE_2;

return 1;

}

Minimum number of bitsto listen (Encoding Dependent)

Seed for LFSR

Page 9: TinyOS Programming Boot Camp (V) Communication

2-9-2001 TOS Boot Camp 9

FOUR_B_RADIO_BYTE.c(RADIO_BYTE_TX_BYTES)char TOS_COMMAND(RADIO_BYTE_TX_BYTES)(char data){

… if(VAR(state) == 0){

//if currently in idle mode, then switch over to transmit mode

//and set state to waiting to transmit first byte.

VAR(third) = data;

VAR(state) = 10;

return 1;

} …

Goes to CSMA

Page 10: TinyOS Programming Boot Camp (V) Communication

2-9-2001 TOS Boot Camp 10

FOUR_B_RADIO_BYTE.c (RADIO_BYTE_RX_BIT_EVENT)

else if(VAR(state) == 10){if(data){VAR(waiting) = 0;

}else{ if (++VAR(waiting) == 11){ bit = (VAR(shift_reg) & 0x2) >> 1; bit ^= ((VAR(shift_reg) & 0x4000) >> 14); bit ^= ((VAR(shift_reg) & 0x8000) >> 15); VAR(shift_reg) >>=1; if (bit & 0x1) VAR(shift_reg) |= 0x8000; VAR(wait_amount) = (VAR(shift_reg) & 0x3f)+12; } if(VAR(waiting) > VAR(wait_amount)){… Prepare for transmission }

}

16 bit LFSR

Channel is busy. Starts again

Listening period [12,75]

Page 11: TinyOS Programming Boot Camp (V) Communication

2-9-2001 TOS Boot Camp 11

CSMA Evaluation

Channel Utilization and % Throughput per Mote at 4 packet/s Duty Cycle

00.10.20.30.40.50.60.70.80.91

1 2 3 4 5 6 7 8 9 10

Number of Motes

%

Channel Utilization ~70%

Throughputper node isfair

Page 12: TinyOS Programming Boot Camp (V) Communication

2-9-2001 TOS Boot Camp 12

Outline

• Media Access Control

• Ad Hoc Routing Mechanism

• Hands on Exercise

Page 13: TinyOS Programming Boot Camp (V) Communication

2-9-2001 TOS Boot Camp 13

Ad Hoc Routing Goal

• Nodes should self organize into a multi-hop network topology

• Each node can discover a route to deliver packets to the base station – uni-directional towards the base station

• Simple, robust, local algorithm

• Works in an ad hoc, spontaneously changing network

• Assume bi-directional connectivity in general

Page 14: TinyOS Programming Boot Camp (V) Communication

2-9-2001 TOS Boot Camp 14

A Simple Ad Hoc Routing Example (I)

• AM_ROUTE.c

• A route is simply knowing a neighboring node (or parent) that can send to the base station

• Base station broadcasts itself as a route

• Node gets the route and retransmits the broadcast with itself as the route

Page 15: TinyOS Programming Boot Camp (V) Communication

2-9-2001 TOS Boot Camp 15

A Simple Ad Hoc Routing Example (II)

• Base station refreshes route with periodic broadcast

• Nodes expire the old route and wait for base station next route refreshment

• Nodes only broadcast once for each route update it gets– Prevent rebroadcast of children’s broadcasts

– has an effect in lowering the number of messages in broadcasting to the entire network

– Broadcast becomes unidirectional (from BS outward)

Page 16: TinyOS Programming Boot Camp (V) Communication

2-9-2001 TOS Boot Camp 16

Packet Forwarding

• Node receives a packet destined to it will– forward it to the next hop

• Base station receives a packet destined to it will– forwards it to the UART

Page 17: TinyOS Programming Boot Camp (V) Communication

2-9-2001 TOS Boot Camp 17

Packet Format

• Defined in system/include/MSG.h#define DATA_LENGTH 30

struct MSG_VALS{

char addr

char type

char group;

char data[DATA_LENGTH];

};

• Special Address (addr)– Broadcast 0xff (TOS_BCAST_ADDR)

– Send to UART 0x7e (TOS_UART_ADDR)

Application Data Unit

Page 18: TinyOS Programming Boot Camp (V) Communication

2-9-2001 TOS Boot Camp 18

Routing Data Unit

• data[0] = number of hops from the base station

• Each node appends its address to data[] indexed by number of hops (data[(int)data[0]])

1 12BS’s data unit

BS(12)

Node33

Node56

0 1 2 32 12 33Node 33’s data unit

3 12 33 56Node 56’sdata unit

Page 19: TinyOS Programming Boot Camp (V) Communication

2-9-2001 TOS Boot Camp 19

Ad Hoc Routing Codein AM_ROUTE.c

Page 20: TinyOS Programming Boot Camp (V) Communication

2-9-2001 TOS Boot Camp 20

AM_ROUTE.c (AM_ROUTE_INIT) (Base Station)char TOS_COMMAND(AM_ROUTE_INIT)(){

… //set beacon rate for route updates to be sent

TOS_COMMAND(CONNECT_SUB_CLOCK_INIT)(255, 0x06);

//route to base station is over UART.

VAR(route) = TOS_UART_ADDR;

VAR(set) = 1;

VAR(place) = 0;

VAR(data_buf).data[0] = 1;

VAR(data_buf).data[1] = TOS_LOCAL_ADDRESS;

}

Tick every 2 seconds

Set route to UART

BS is 1 hop awayAppend my ID

Page 21: TinyOS Programming Boot Camp (V) Communication

2-9-2001 TOS Boot Camp 21

AM_ROUTE.c (AM_ROUTE_INIT) (NOT Base Station)char TOS_COMMAND(AM_ROUTE_INIT)(){

… //set rate of sampling

TOS_COMMAND(CONNECT_SUB_CLOCK_INIT)(255, 0x03);

VAR(set) = 0;

VAR(route) = 0;

VAR(count) = 0;

return 1;

}

Tick every 0.25 seconds

Route is not set initially

Page 22: TinyOS Programming Boot Camp (V) Communication

2-9-2001 TOS Boot Camp 22

AM_ROUTE.c (AM_ROUTE_SUB_CLOCK)

void TOS_EVENT(AM_ROUTE_SUB_CLOCK)(){

#ifdef BASE_STATION

TOS_CALL_COMMAND(ROUTE_SUB_SEND_MSG)(TOS_BCAST_ADDR,AM_MSG(ROUTE_UPDATE),&VAR(buf));

#else

if(VAR(set) > 0) VAR(set) --;

#endif

}

Base station’speriodic broadcast

Nodes count down toexpire its route

Page 23: TinyOS Programming Boot Camp (V) Communication

2-9-2001 TOS Boot Camp 23

AM_ROUTE.c (ROUTE_UPDATE)

• TOS_MsgPtr TOS_MSG_EVENT(ROUTE_UPDATE)(TOS_MsgPtr msg){

…//if route hasn't already been set this period...

if(VAR(set) == 0){

//record route

VAR(route) = data[(int)data[0]];

VAR(set) = 8;

//create an update packet to be sent out.

data[0]++;

data[(int)data[0]] = TOS_LOCAL_ADDRESS;

… TOS_CALL_COMMAND(ROUTE_SUB_SEND_MSG)

(TOS_BCAST_ADDR,AM_MSG(ROUTE_UPDATE),msg);

…}

Set route toparent’s ID

Set to expire the route after 8 ticks

I am 1 more hop away from the BSAppend my ID to the buffer

Broadcastthe message

Page 24: TinyOS Programming Boot Camp (V) Communication

2-9-2001 TOS Boot Camp 24

AM_ROUTE.c (ROUTE_UPDATE cont.)

TOS_MsgPtr TOS_MSG_EVENT(ROUTE_UPDATE)(TOS_MsgPtr msg){

If (VAR(set) == 0){

}else{

return msg;

}

Only broadcast once for each new route; otherwise, do nothing.

Page 25: TinyOS Programming Boot Camp (V) Communication

2-9-2001 TOS Boot Camp 25

Packet Forwarding Codein AM_ROUTE.c

Page 26: TinyOS Programming Boot Camp (V) Communication

2-9-2001 TOS Boot Camp 26

AM_ROUTE.c (ROUTE_SUB_DATA_READY)

• Data source

char TOS_EVENT(ROUTE_SUB_DATA_READY)(int data){

if(VAR(route) != 0 && other App. Specific conditions){

TOS_CALL_COMMAND(ROUTE_SUB_SEND_MSG)

(VAR(route),AM_MSG(DATA_MSG),

&VAR(data_buf));

}

}

Send out a data packet if a node has a route.

Page 27: TinyOS Programming Boot Camp (V) Communication

2-9-2001 TOS Boot Camp 27

AM_ROUTE.c (DATA_MSG)

TOS_MsgPtrTOS_MSG_EVENT(DATA_MSG)(TOS_MsgPtr msg){

…if(VAR(route) != 0){

Application Specific Modification of theforwarding packet

…TOS_CALL_COMMAND(ROUTE_SUB_SEND_MSG)

(VAR(route),AM_MSG(DATA_MSG),msg);

…}…

}

Forward message if you have a route.

Node has a route

Page 28: TinyOS Programming Boot Camp (V) Communication

2-9-2001 TOS Boot Camp 28

AM_ROUTE.c (DATA_MSG)

TOS_MsgPtrTOS_MSG_EVENT(DATA_MSG) (TOS_MsgPtr msg){…if(VAR(route) != 0){

//update the packet.data[5] = data[4];data[4] = data[3];data[3] = data[2];data[2] = data[1];data[1] = TOS_LOCAL_ADDRESS;…TOS_CALL_COMMAND(ROUTE_SUB_SEND_MSG)

(VAR(route),AM_MSG(DATA_MSG),msg);

…}…

}

Modify the forwardingpacket to stores the hops taken.

Page 29: TinyOS Programming Boot Camp (V) Communication

2-9-2001 TOS Boot Camp 29

Outline

• Media Access Control

• Ad Hoc Routing Mechanism

• Hands on Exercise

Page 30: TinyOS Programming Boot Camp (V) Communication

2-9-2001 TOS Boot Camp 30

Hands on Exercise (I)

• Run the “apps/router.desc” application–Set it to your own LOCAL GROUP in Makefile

»Default is 0x13

–Goes to tools directory

»Run listen.c

Page 31: TinyOS Programming Boot Camp (V) Communication

2-9-2001 TOS Boot Camp 31

Hands on Exercise (II)

• Modify ROUTE_UPDATE in AM_ROUTE.c

• GOAL: pick route based on depth of the tree – Pick the route with the smallest number of hops from the base

station

• Can use the same data unit format – data[0] already tells you number of hops from the base station

of the sender of the packet– and the corresponding node id = data[(int)data[0]]

• If a better route (smaller number of hops) is received, use that as the new route.

• You may need to introduce a new variable (e.g. myLevel) to remember your current depth


Recommended