B-mac

Version 3 (Anthony Rowe, 03/04/2007 08:07 pm)

1 1 Anthony Rowe
= BMAC =
2 1 Anthony Rowe
3 3 Anthony Rowe
BMAC is a low-power listen CSMA (lpl-csma) protocol.  Instead of leaving the receiver on 100% of the time like in a non-power constrained radio environment, the radio is active for short bursts used to check for channel activity.  In order to ensure that a neighboring node receives the message, an extended preamble the length of the check interval is required.  There is a trade-off between checking more often or sending a longer preamble.
4 3 Anthony Rowe
5 2 Anthony Rowe
[[Image(rx_tx.png)]]
6 1 Anthony Rowe
7 3 Anthony Rowe
8 2 Anthony Rowe
9 2 Anthony Rowe
10 2 Anthony Rowe
This implementation has no internal transmit or receive buffers. Applications or higher level network layers must provide their own transmit and receive buffers.  BMAC will pass transmit buffers directly to the basic_rf transmit functions where additional information like a CRC checksum is added.  When data is received, BMAC will store this data in the last set receive buffer until the bmac_rx_release() function is called by a higher layer or application.  The reception of a packet will generate a signal notifying any waiting tasks that the packet is ready. Received packets can be checked in a polling fashion using the bmac_rx_status() function, or a task can suspend until a packet arrives using the bmac_rx_packet_get() function.  Timeouts on packet reception can be achieved using the wait until next wakeup configuration commands provided by Nano-RK.  If a timeout occurs, bmac_wait_until_rx_packet() will return an error code.  To allow efficient network layer development, the receive buffer can be changed using the bmac_rx_pkt_set_buffer() function. This should only be done after a packet is received or at startup.  If a new receive buffer pointer has been set, it is then safe to call bmac_rx_pkt_release() indicating that the BMAC task is allowed to buffer new packets at that memory location.