Benjamin Valentin d35511bee7 drivers/at86rf215: Add basic driver for the AT86RF215 radio
This adds a driver for the SPI based AT86RF215 transceiver.
The chip supports the IEEE Std 802.15.4-2015 and IEEE Std 802.15.4g-2012 standard.

This driver supports two versions of the chip:
    - AT86RF215:  dual sub-GHz & 2.4 GHz radio & baseband
    - AT86RF215M: sub-GHz radio & baseband only

Both radios support the following PHY modes:
    - MR-FSK
    - MR-OFDM
    - MR-O-QPKS
    - O-QPSK (legacy)

The driver currently only implements support for legacy O-QPSK.

To use both interfaces, add

    GNRC_NETIF_NUMOF := 2

to your Makefile.

The transceiver is able to send frames of up to 2047 bytes according to
IEEE 802.15.4g-2012 when operating in non-legacy mode.

Known issues:

 - [ ] dBm setting values are bogus
 - [ ] Channel spacing for sub-GHz MR-O-QPSK might be wrong
 - [ ] TX/RX stress test will lock up the driver on openmote-b
2020-03-19 14:39:18 +01:00

157 lines
3.9 KiB
C

/**
* Auto initialization for network devices
*
* Copyright (C) 2020 Freie Universität Berlin
* 2020 Kaspar Schleiser <kaspar@schleiser.de>
* 2013 INRIA.
*
* This file is subject to the terms and conditions of the GNU Lesser
* General Public License v2.1. See the file LICENSE in the top level
* directory for more details.
*
* @ingroup sys_auto_init
* @{
* @file
* @brief initializes any used network interface that has a trivial init function
* @author Oliver Hahm <oliver.hahm@inria.fr>
* @author Hauke Petersen <hauke.petersen@fu-berlin.de>
* @author Kaspar Schleiser <kaspar@schleiser.de>
* @author Martine S. Lenders <m.lenders@fu-berlin.de>
* @}
*/
#include "kernel_defines.h"
/**
* @brief Initializes network devices
*/
void gnrc_netif_init_devs(void)
{
if (IS_USED(MODULE_STM32_ETH)) {
extern void auto_init_stm32_eth(void);
auto_init_stm32_eth();
}
if (IS_USED(MODULE_AUTO_INIT_AT86RF215)) {
extern void auto_init_at86rf215(void);
auto_init_at86rf215();
}
if (IS_USED(MODULE_AUTO_INIT_AT86RF2XX)) {
extern void auto_init_at86rf2xx(void);
auto_init_at86rf2xx();
}
if (IS_USED(MODULE_MRF24J40)) {
extern void auto_init_mrf24j40(void);
auto_init_mrf24j40();
}
if (IS_USED(MODULE_CC110X)) {
extern void auto_init_cc110x(void);
auto_init_cc110x();
}
if (IS_USED(MODULE_CC2420)) {
extern void auto_init_cc2420(void);
auto_init_cc2420();
}
if (IS_USED(MODULE_ENCX24J600)) {
extern void auto_init_encx24j600(void);
auto_init_encx24j600();
}
if (IS_USED(MODULE_ENC28J60)) {
extern void auto_init_enc28j60(void);
auto_init_enc28j60();
}
if (IS_USED(MODULE_ESP_ETH)) {
extern void auto_init_esp_eth(void);
auto_init_esp_eth();
}
/* don't change the order of auto_init_esp_now and auto_init_esp_wifi */
if (IS_USED(MODULE_ESP_NOW)) {
extern void auto_init_esp_now(void);
auto_init_esp_now();
}
/* don't change the order of auto_init_esp_now and auto_init_esp_wifi */
if (IS_USED(MODULE_ESP_WIFI)) {
extern void auto_init_esp_wifi(void);
auto_init_esp_wifi();
}
if (IS_USED(MODULE_ETHOS)) {
extern void auto_init_ethos(void);
auto_init_ethos();
}
if (IS_USED(MODULE_DOSE)) {
extern void auto_init_dose(void);
auto_init_dose();
}
if (IS_USED(MODULE_SLIPDEV)) {
extern void auto_init_slipdev(void);
auto_init_slipdev();
}
if (IS_USED(MODULE_CC2538_RF)) {
extern void auto_init_cc2538_rf(void);
auto_init_cc2538_rf();
}
if (IS_USED(MODULE_XBEE)) {
extern void auto_init_xbee(void);
auto_init_xbee();
}
if (IS_USED(MODULE_KW2XRF)) {
extern void auto_init_kw2xrf(void);
auto_init_kw2xrf();
}
if (IS_USED(MODULE_USBUS_CDC_ECM)) {
extern void auto_init_netdev_cdcecm(void);
auto_init_netdev_cdcecm();
}
if (IS_USED(MODULE_NETDEV_TAP)) {
extern void auto_init_netdev_tap(void);
auto_init_netdev_tap();
}
if (IS_USED(MODULE_SOCKET_ZEP)) {
extern void auto_init_socket_zep(void);
auto_init_socket_zep();
}
if (IS_USED(MODULE_NORDIC_SOFTDEVICE_BLE)) {
extern void gnrc_nordic_ble_6lowpan_init(void);
gnrc_nordic_ble_6lowpan_init();
}
if (IS_USED(MODULE_NRFMIN)) {
extern void gnrc_nrfmin_init(void);
gnrc_nrfmin_init();
}
if (IS_USED(MODULE_W5100)) {
extern void auto_init_w5100(void);
auto_init_w5100();
}
if (IS_USED(MODULE_SX127X) && !IS_USED(MODULE_SEMTECH_LORAMAC)) {
extern void auto_init_sx127x(void);
auto_init_sx127x();
}
if (IS_USED(MODULE_NRF802154)) {
extern void auto_init_nrf802154(void);
auto_init_nrf802154();
}
}