This module contains drivers for radio devices in Atmel's AT86RF2xx series. More...
This module contains drivers for radio devices in Atmel's AT86RF2xx series.
The driver is aimed to work with all devices of this series.
Files | |
file | at86rf2xx_aes.h |
The extended feature set of at86rf2xx transceivers comprises a hardware implementation of AES. | |
file | at86rf2xx_internal.h |
Internal interfaces for AT86RF2xx drivers. | |
file | at86rf2xx_netdev.h |
Netdev interface to AT86RF2xx drivers. | |
file | at86rf2xx_params.h |
Default configuration for the AT86RF2xx driver. | |
file | at86rf2xx_registers.h |
Register and command definitions for AT86RF2xx devices. | |
file | at86rf2xx.h |
Interface definition for AT86RF2xx based drivers. | |
Data Structures | |
struct | at86rf2xx_params |
struct holding all params needed for device initialization More... | |
struct | at86rf2xx_t |
Device descriptor for AT86RF2XX radio devices. More... | |
Macros | |
#define | AT86RF2XX_MAX_PKT_LENGTH (IEEE802154_FRAME_LEN_MAX) |
Maximum possible packet size in byte. | |
#define | AT86RF2XX_DEFAULT_TXPOWER (CONFIG_IEEE802154_DEFAULT_TXPOWER) |
Default TX power (0dBm) | |
#define | RSSI_BASE_VAL (-91) |
Base (minimal) RSSI value in dBm. | |
#define | MIN_RX_SENSITIVITY (-101) |
Min Receiver sensitivity value in dBm. | |
#define | AT86RF2XX_IS_PERIPH (0) |
Whether there is a periph version of the radio. | |
#define | AT86RF2XX_HAVE_ED_REGISTER (0) |
ED Register. | |
#define | AT86RF2XX_HAVE_SUBGHZ (0) |
Support for SubGHz bands. | |
#define | AT86RF2XX_HAVE_RETRIES (1) |
Frame retry counter reporting. | |
#define | AT86RF2XX_HAVE_RETRIES_REG (0) |
Frame retry counter register. | |
#define | AT86RF2XX_HAVE_TX_START_IRQ (0) |
TX Start IRQ. | |
#define | AT86RF2XX_RANDOM_NUMBER_GENERATOR (0) |
Random Number Generator. | |
#define | AT86RF2XX_SMART_IDLE_LISTENING (0) |
Smart idle listening feature. | |
#define | AT86RF2XX_PHY_STATE_RX AT86RF2XX_STATE_RX_ON |
Internal radio state equivalent to RX_ON. | |
#define | AT86RF2XX_PHY_STATE_RX_BUSY AT86RF2XX_STATE_BUSY_RX |
Internal radio state equivalent to RX_BUSY. | |
#define | AT86RF2XX_PHY_STATE_TX AT86RF2XX_STATE_PLL_ON |
Internal radio state equivalent to TX_ON. | |
#define | AT86RF2XX_PHY_STATE_TX_BUSY AT86RF2XX_STATE_BUSY_TX |
Internal radio state equivalent to TX_BUSY. | |
Typedefs | |
typedef struct at86rf2xx_params | at86rf2xx_params_t |
struct holding all params needed for device initialization | |
Functions | |
void | at86rf2xx_setup (at86rf2xx_t *dev, const at86rf2xx_params_t *params, uint8_t index) |
Setup an AT86RF2xx based device state. | |
void | at86rf2xx_reset (at86rf2xx_t *dev) |
Trigger a hardware reset and configure radio with default values. | |
void | at86rf2xx_set_addr_short (at86rf2xx_t *dev, const network_uint16_t *addr) |
Set the short address of the given device. | |
void | at86rf2xx_set_addr_long (at86rf2xx_t *dev, const eui64_t *addr) |
Set the long address of the given device. | |
uint8_t | at86rf2xx_get_phy_mode (at86rf2xx_t *dev) |
Get the PHY mode of the given device. | |
uint8_t | at86rf2xx_get_rate (at86rf2xx_t *dev) |
Get the current O-QPSK rate mode of the PHY. | |
int | at86rf2xx_set_rate (at86rf2xx_t *dev, uint8_t rate) |
Set the current O-QPSK rate mode of the PHY rate modes > 0 are proprietary. | |
void | at86rf2xx_set_pan (at86rf2xx_t *dev, uint16_t pan) |
Set the PAN ID of the given device. | |
void | at86rf2xx_set_txpower (const at86rf2xx_t *dev, int16_t txpower, uint8_t channel) |
Set the transmission power of the given device [in dBm]. | |
int8_t | at86rf2xx_get_rxsensitivity (const at86rf2xx_t *dev) |
Get the configured receiver sensitivity of the given device [in dBm]. | |
void | at86rf2xx_set_rxsensitivity (const at86rf2xx_t *dev, int8_t rxsens) |
Set the receiver sensitivity of the given device [in dBm]. | |
uint8_t | at86rf2xx_get_max_retries (const at86rf2xx_t *dev) |
Get the maximum number of retransmissions. | |
void | at86rf2xx_set_max_retries (const at86rf2xx_t *dev, uint8_t max) |
Set the maximum number of retransmissions. | |
uint8_t | at86rf2xx_get_csma_max_retries (const at86rf2xx_t *dev) |
Get the maximum number of channel access attempts per frame (CSMA) | |
void | at86rf2xx_set_csma_max_retries (const at86rf2xx_t *dev, int8_t retries) |
Set the maximum number of channel access attempts per frame (CSMA) | |
void | at86rf2xx_set_csma_backoff_exp (const at86rf2xx_t *dev, uint8_t min, uint8_t max) |
Set the min and max backoff exponent for CSMA/CA. | |
void | at86rf2xx_set_csma_seed (const at86rf2xx_t *dev, const uint8_t entropy[2]) |
Set seed for CSMA random backoff. | |
int8_t | at86rf2xx_get_cca_threshold (const at86rf2xx_t *dev) |
Get the CCA threshold value. | |
void | at86rf2xx_set_cca_threshold (const at86rf2xx_t *dev, int8_t value) |
Set the CCA threshold value. | |
int8_t | at86rf2xx_get_ed_level (at86rf2xx_t *dev) |
Get the latest ED level measurement. | |
void | at86rf2xx_set_option (at86rf2xx_t *dev, uint16_t option, bool state) |
Enable or disable driver specific options. | |
uint8_t | at86rf2xx_set_state (at86rf2xx_t *dev, uint8_t state) |
Set the state of the given device (trigger a state change) | |
void | at86rf2xx_tx_prepare (at86rf2xx_t *dev) |
Prepare for sending of data. | |
size_t | at86rf2xx_tx_load (at86rf2xx_t *dev, const uint8_t *data, size_t len, size_t offset) |
Load chunks of data into the transmit buffer of the given device. | |
void | at86rf2xx_tx_exec (at86rf2xx_t *dev) |
Trigger sending of data previously loaded into transmit buffer. | |
bool | at86rf2xx_cca (at86rf2xx_t *dev) |
Perform one manual channel clear assessment (CCA) | |
void | at86rf2xx_enable_smart_idle (at86rf2xx_t *dev) |
Enable the smart receive technology (SRT) | |
void | at86rf2xx_disable_smart_idle (at86rf2xx_t *dev) |
Disable the smart receive technology (SRT) | |
Channel configuration | |
#define | AT86RF2XX_MIN_CHANNEL (IEEE802154_CHANNEL_MIN) |
#define | AT86RF2XX_MAX_CHANNEL (IEEE802154_CHANNEL_MAX) |
#define | AT86RF2XX_DEFAULT_CHANNEL (CONFIG_IEEE802154_DEFAULT_CHANNEL) |
#define | AT86RF2XX_DEFAULT_PAGE (0) |
Flags for device internal states (see datasheet) | |
#define | AT86RF2XX_STATE_P_ON (0x00) |
initial power on | |
#define | AT86RF2XX_STATE_BUSY_RX (0x01) |
busy receiving data (basic mode) | |
#define | AT86RF2XX_STATE_BUSY_TX (0x02) |
busy transmitting data (basic mode) | |
#define | AT86RF2XX_STATE_FORCE_TRX_OFF (0x03) |
force transition to idle | |
#define | AT86RF2XX_STATE_RX_ON (0x06) |
listen mode (basic mode) | |
#define | AT86RF2XX_STATE_TRX_OFF (0x08) |
idle | |
#define | AT86RF2XX_STATE_PLL_ON (0x09) |
ready to transmit | |
#define | AT86RF2XX_STATE_SLEEP (0x0f) |
sleep mode | |
#define | AT86RF2XX_STATE_BUSY_RX_AACK (0x11) |
busy receiving data (extended mode) | |
#define | AT86RF2XX_STATE_BUSY_TX_ARET (0x12) |
busy transmitting data (extended mode) | |
#define | AT86RF2XX_STATE_RX_AACK_ON (0x16) |
wait for incoming data | |
#define | AT86RF2XX_STATE_TX_ARET_ON (0x19) |
ready for sending data | |
#define | AT86RF2XX_STATE_IN_PROGRESS (0x1f) |
ongoing state conversion | |
Internal device option flags | |
#define | AT86RF2XX_OPT_CSMA (0x0010) |
CSMA active. | |
#define | AT86RF2XX_OPT_PROMISCUOUS (0x0020) |
promiscuous mode active | |
#define | AT86RF2XX_OPT_PRELOADING (0x0040) |
preloading enabled | |
#define | AT86RF2XX_OPT_AUTOACK (0x0080) |
Auto ACK active. | |
#define | AT86RF2XX_OPT_ACK_PENDING (0x0100) |
ACK frames with data pending. | |
#define AT86RF2XX_DEFAULT_CHANNEL (CONFIG_IEEE802154_DEFAULT_CHANNEL) |
Definition at line 70 of file at86rf2xx.h.
#define AT86RF2XX_DEFAULT_PAGE (0) |
Definition at line 71 of file at86rf2xx.h.
#define AT86RF2XX_DEFAULT_TXPOWER (CONFIG_IEEE802154_DEFAULT_TXPOWER) |
Default TX power (0dBm)
Definition at line 79 of file at86rf2xx.h.
#define AT86RF2XX_HAVE_ED_REGISTER (0) |
ED Register.
Definition at line 126 of file at86rf2xx.h.
#define AT86RF2XX_HAVE_RETRIES (1) |
Frame retry counter reporting.
The AT86RF2XX_HAVE_RETRIES flag enables support for NETOPT_TX_RETRIES NEEDED operation.
Definition at line 145 of file at86rf2xx.h.
#define AT86RF2XX_HAVE_RETRIES_REG (0) |
Frame retry counter register.
Some radios include the XAH_CTRL_2 register which contains the frame retry counter. Only the at86rf232 and the at86rf233 support this register.
Definition at line 159 of file at86rf2xx.h.
#define AT86RF2XX_HAVE_SUBGHZ (0) |
Support for SubGHz bands.
Definition at line 135 of file at86rf2xx.h.
#define AT86RF2XX_HAVE_TX_START_IRQ (0) |
TX Start IRQ.
Definition at line 168 of file at86rf2xx.h.
#define AT86RF2XX_IS_PERIPH (0) |
Whether there is a periph version of the radio.
Definition at line 117 of file at86rf2xx.h.
#define AT86RF2XX_MAX_CHANNEL (IEEE802154_CHANNEL_MAX) |
Definition at line 69 of file at86rf2xx.h.
#define AT86RF2XX_MAX_PKT_LENGTH (IEEE802154_FRAME_LEN_MAX) |
Maximum possible packet size in byte.
Definition at line 54 of file at86rf2xx.h.
#define AT86RF2XX_MIN_CHANNEL (IEEE802154_CHANNEL_MIN) |
Definition at line 68 of file at86rf2xx.h.
#define AT86RF2XX_OPT_ACK_PENDING (0x0100) |
ACK frames with data pending.
Definition at line 231 of file at86rf2xx.h.
#define AT86RF2XX_OPT_AUTOACK (0x0080) |
Auto ACK active.
Definition at line 230 of file at86rf2xx.h.
#define AT86RF2XX_OPT_CSMA (0x0010) |
CSMA active.
Definition at line 227 of file at86rf2xx.h.
#define AT86RF2XX_OPT_PRELOADING (0x0040) |
preloading enabled
Definition at line 229 of file at86rf2xx.h.
#define AT86RF2XX_OPT_PROMISCUOUS (0x0020) |
promiscuous mode active
Definition at line 228 of file at86rf2xx.h.
#define AT86RF2XX_PHY_STATE_RX AT86RF2XX_STATE_RX_ON |
Internal radio state equivalent to RX_ON.
Definition at line 239 of file at86rf2xx.h.
#define AT86RF2XX_PHY_STATE_RX_BUSY AT86RF2XX_STATE_BUSY_RX |
Internal radio state equivalent to RX_BUSY.
Definition at line 243 of file at86rf2xx.h.
#define AT86RF2XX_PHY_STATE_TX AT86RF2XX_STATE_PLL_ON |
Internal radio state equivalent to TX_ON.
Definition at line 247 of file at86rf2xx.h.
#define AT86RF2XX_PHY_STATE_TX_BUSY AT86RF2XX_STATE_BUSY_TX |
Internal radio state equivalent to TX_BUSY.
Definition at line 251 of file at86rf2xx.h.
#define AT86RF2XX_RANDOM_NUMBER_GENERATOR (0) |
Random Number Generator.
Most AT86RF radios have the option to use the highest bits of the RSSI register as a source of randomness. See Section 11.2 of the at86rf233 reference manual. (RND_VALUE)
Definition at line 184 of file at86rf2xx.h.
#define AT86RF2XX_SMART_IDLE_LISTENING (0) |
Smart idle listening feature.
This feature optimizes radio operation in the listening mode, reducing current consumption by ~50%. It is supported by only at86rf233. The reference manual recommends to disable this feature for RSSI measurements or random number generation (Section 8.4 and Section 11.2).
Definition at line 201 of file at86rf2xx.h.
#define AT86RF2XX_STATE_BUSY_RX (0x01) |
busy receiving data (basic mode)
Definition at line 209 of file at86rf2xx.h.
#define AT86RF2XX_STATE_BUSY_RX_AACK (0x11) |
busy receiving data (extended mode)
Definition at line 216 of file at86rf2xx.h.
#define AT86RF2XX_STATE_BUSY_TX (0x02) |
busy transmitting data (basic mode)
Definition at line 210 of file at86rf2xx.h.
#define AT86RF2XX_STATE_BUSY_TX_ARET (0x12) |
busy transmitting data (extended mode)
Definition at line 217 of file at86rf2xx.h.
#define AT86RF2XX_STATE_FORCE_TRX_OFF (0x03) |
force transition to idle
Definition at line 211 of file at86rf2xx.h.
#define AT86RF2XX_STATE_IN_PROGRESS (0x1f) |
ongoing state conversion
Definition at line 220 of file at86rf2xx.h.
#define AT86RF2XX_STATE_P_ON (0x00) |
initial power on
Definition at line 208 of file at86rf2xx.h.
#define AT86RF2XX_STATE_PLL_ON (0x09) |
ready to transmit
Definition at line 214 of file at86rf2xx.h.
#define AT86RF2XX_STATE_RX_AACK_ON (0x16) |
wait for incoming data
Definition at line 218 of file at86rf2xx.h.
#define AT86RF2XX_STATE_RX_ON (0x06) |
listen mode (basic mode)
Definition at line 212 of file at86rf2xx.h.
#define AT86RF2XX_STATE_SLEEP (0x0f) |
sleep mode
Definition at line 215 of file at86rf2xx.h.
#define AT86RF2XX_STATE_TRX_OFF (0x08) |
idle
Definition at line 213 of file at86rf2xx.h.
#define AT86RF2XX_STATE_TX_ARET_ON (0x19) |
ready for sending data
Definition at line 219 of file at86rf2xx.h.
#define MIN_RX_SENSITIVITY (-101) |
Min Receiver sensitivity value in dBm.
Definition at line 108 of file at86rf2xx.h.
#define RSSI_BASE_VAL (-91) |
Base (minimal) RSSI value in dBm.
Definition at line 95 of file at86rf2xx.h.
bool at86rf2xx_cca | ( | at86rf2xx_t * | dev | ) |
Perform one manual channel clear assessment (CCA)
The CCA mode and threshold level depends on the current transceiver settings.
[in] | dev | device to use |
void at86rf2xx_disable_smart_idle | ( | at86rf2xx_t * | dev | ) |
Disable the smart receive technology (SRT)
[in] | dev | device to use |
void at86rf2xx_enable_smart_idle | ( | at86rf2xx_t * | dev | ) |
Enable the smart receive technology (SRT)
The SRT reduces the power consumption during RX listening periods.
[in] | dev | device to use |
int8_t at86rf2xx_get_cca_threshold | ( | const at86rf2xx_t * | dev | ) |
Get the CCA threshold value.
[in] | dev | device to read value from |
uint8_t at86rf2xx_get_csma_max_retries | ( | const at86rf2xx_t * | dev | ) |
Get the maximum number of channel access attempts per frame (CSMA)
[in] | dev | device to read from |
int8_t at86rf2xx_get_ed_level | ( | at86rf2xx_t * | dev | ) |
Get the latest ED level measurement.
[in] | dev | device to read value from |
uint8_t at86rf2xx_get_max_retries | ( | const at86rf2xx_t * | dev | ) |
Get the maximum number of retransmissions.
[in] | dev | device to read from |
uint8_t at86rf2xx_get_phy_mode | ( | at86rf2xx_t * | dev | ) |
Get the PHY mode of the given device.
[in,out] | dev | device to read from |
uint8_t at86rf2xx_get_rate | ( | at86rf2xx_t * | dev | ) |
Get the current O-QPSK rate mode of the PHY.
[in] | dev | device to read from |
int8_t at86rf2xx_get_rxsensitivity | ( | const at86rf2xx_t * | dev | ) |
Get the configured receiver sensitivity of the given device [in dBm].
[in] | dev | device to read from |
void at86rf2xx_reset | ( | at86rf2xx_t * | dev | ) |
Trigger a hardware reset and configure radio with default values.
[in,out] | dev | device to reset |
void at86rf2xx_set_addr_long | ( | at86rf2xx_t * | dev, |
const eui64_t * | addr | ||
) |
Set the long address of the given device.
[in,out] | dev | device to write to |
[in] | addr | (8-byte) long address to set |
void at86rf2xx_set_addr_short | ( | at86rf2xx_t * | dev, |
const network_uint16_t * | addr | ||
) |
Set the short address of the given device.
[in,out] | dev | device to write to |
[in] | addr | (2-byte) short address to set |
void at86rf2xx_set_cca_threshold | ( | const at86rf2xx_t * | dev, |
int8_t | value | ||
) |
Set the CCA threshold value.
[in] | dev | device to write to |
[in] | value | the new CCA threshold value |
void at86rf2xx_set_csma_backoff_exp | ( | const at86rf2xx_t * | dev, |
uint8_t | min, | ||
uint8_t | max | ||
) |
Set the min and max backoff exponent for CSMA/CA.
[in] | dev | device to write to |
[in] | min | the minimum BE |
[in] | max | the maximum BE |
void at86rf2xx_set_csma_max_retries | ( | const at86rf2xx_t * | dev, |
int8_t | retries | ||
) |
Set the maximum number of channel access attempts per frame (CSMA)
This setting specifies the number of attempts to access the channel to transmit a frame. If the channel is busy retries
times, then frame transmission fails. Valid values: 0 to 5, -1 means CSMA disabled
[in] | dev | device to write to |
[in] | retries | the maximum number of retries |
void at86rf2xx_set_csma_seed | ( | const at86rf2xx_t * | dev, |
const uint8_t | entropy[2] | ||
) |
Set seed for CSMA random backoff.
[in] | dev | device to write to |
[in] | entropy | 11 bit of entropy as seed for random backoff |
void at86rf2xx_set_max_retries | ( | const at86rf2xx_t * | dev, |
uint8_t | max | ||
) |
Set the maximum number of retransmissions.
This setting specifies the number of attempts to retransmit a frame, when it was not acknowledged by the recipient, before the transaction gets cancelled. The maximum value is 7.
[in] | dev | device to write to |
[in] | max | the maximum number of retransmissions |
void at86rf2xx_set_option | ( | at86rf2xx_t * | dev, |
uint16_t | option, | ||
bool | state | ||
) |
Enable or disable driver specific options.
[in,out] | dev | device to set/clear option flag for |
[in] | option | option to enable/disable |
[in] | state | true for enable, false for disable |
void at86rf2xx_set_pan | ( | at86rf2xx_t * | dev, |
uint16_t | pan | ||
) |
Set the PAN ID of the given device.
[in,out] | dev | device to write to |
[in] | pan | PAN ID to set |
int at86rf2xx_set_rate | ( | at86rf2xx_t * | dev, |
uint8_t | rate | ||
) |
Set the current O-QPSK rate mode of the PHY rate modes > 0 are proprietary.
rate 0: 250 kbit/s (IEEE mode) rate 1: 500 kbit/s rate 2: 1000 kbit/s (compatible with AT86RF215) rate 3: 2000 kbit/s
[in] | dev | device to write to |
[in] | rate | the selected data rate mode (0-3) |
void at86rf2xx_set_rxsensitivity | ( | const at86rf2xx_t * | dev, |
int8_t | rxsens | ||
) |
Set the receiver sensitivity of the given device [in dBm].
If the device does not support the exact dBm value given, it will set a value as close as possible to the given value. If the given value is larger or lower then the maximal or minimal possible value, the min or max value is set, respectively.
[in] | dev | device to write to |
[in] | rxsens | rx sensitivity in dBm |
uint8_t at86rf2xx_set_state | ( | at86rf2xx_t * | dev, |
uint8_t | state | ||
) |
Set the state of the given device (trigger a state change)
[in,out] | dev | device to change state of |
[in] | state | the targeted new state |
void at86rf2xx_set_txpower | ( | const at86rf2xx_t * | dev, |
int16_t | txpower, | ||
uint8_t | channel | ||
) |
Set the transmission power of the given device [in dBm].
If the device does not support the exact dBm value given, it will set a value as close as possible to the given value. If the given value is larger or lower then the maximal or minimal possible value, the min or max value is set, respectively.
[in] | dev | device to write to |
[in] | txpower | transmission power in dBm |
[in] | channel | the current channel |
void at86rf2xx_setup | ( | at86rf2xx_t * | dev, |
const at86rf2xx_params_t * | params, | ||
uint8_t | index | ||
) |
Setup an AT86RF2xx based device state.
[out] | dev | device descriptor |
[in] | params | parameters for device initialization |
[in] | index | index of params in a global parameter struct array. If initialized manually, pass a unique identifier instead. |
void at86rf2xx_tx_exec | ( | at86rf2xx_t * | dev | ) |
Trigger sending of data previously loaded into transmit buffer.
[in] | dev | device to trigger |
size_t at86rf2xx_tx_load | ( | at86rf2xx_t * | dev, |
const uint8_t * | data, | ||
size_t | len, | ||
size_t | offset | ||
) |
Load chunks of data into the transmit buffer of the given device.
[in,out] | dev | device to write data to |
[in] | data | buffer containing the data to load |
[in] | len | number of bytes in buffer |
[in] | offset | offset used when writing data to internal buffer |
void at86rf2xx_tx_prepare | ( | at86rf2xx_t * | dev | ) |
Prepare for sending of data.
This function puts the given device into the TX state, so no receiving of data is possible after it was called.
[in,out] | dev | device to prepare for sending |