From d4f39742ea49607db668d3dcdbaffc1a055e0987 Mon Sep 17 00:00:00 2001 From: Gerson Fernando Budke Date: Sun, 26 Jan 2020 14:55:44 -0300 Subject: [PATCH] drivers: ieee802154: rf2xx: Add SRAM read method Add SRAM read method to enable advanced uses on at86rf2xx driver. Signed-off-by: Gerson Fernando Budke --- drivers/ieee802154/ieee802154_rf2xx_iface.c | 48 ++++++++++++++++++++- drivers/ieee802154/ieee802154_rf2xx_iface.h | 17 +++++++- 2 files changed, 63 insertions(+), 2 deletions(-) diff --git a/drivers/ieee802154/ieee802154_rf2xx_iface.c b/drivers/ieee802154/ieee802154_rf2xx_iface.c index c6c4a960257..a35351d8888 100644 --- a/drivers/ieee802154/ieee802154_rf2xx_iface.c +++ b/drivers/ieee802154/ieee802154_rf2xx_iface.c @@ -1,7 +1,7 @@ /* ieee802154_rf2xx_iface.c - ATMEL RF2XX IEEE 802.15.4 Interface */ /* - * Copyright (c) 2019 Gerson Fernando Budke + * Copyright (c) 2019-2020 Gerson Fernando Budke * * SPDX-License-Identifier: Apache-2.0 */ @@ -248,3 +248,49 @@ void rf2xx_iface_frame_write(struct device *dev, LOG_DBG("Frame W: PhyStatus: %02X. length: %02X", status, length); LOG_HEXDUMP_DBG(data, length, "payload"); } + +void rf2xx_iface_sram_read(struct device *dev, + u8_t address, + u8_t *data, + u8_t length) +{ + const struct rf2xx_context *ctx = dev->driver_data; + u8_t cmd = RF2XX_RF_CMD_SRAM_R; + u8_t status[2]; + + const struct spi_buf tx_buf[2] = { + { + .buf = &cmd, + .len = 1 + }, + { + .buf = &address, + .len = 1 + }, + }; + const struct spi_buf_set tx = { + .buffers = tx_buf, + .count = 2 + }; + const struct spi_buf rx_buf[2] = { + { + .buf = status, + .len = 2 + }, + { + .buf = data, + .len = length + }, + }; + const struct spi_buf_set rx = { + .buffers = rx_buf, + .count = 2 + }; + + if (spi_transceive(ctx->spi, &ctx->spi_cfg, &tx, &rx) != 0) { + LOG_ERR("Failed to exec rf2xx_sram_read"); + } + + LOG_DBG("SRAM R: length: %02X, status: %02X", length, status[0]); + LOG_HEXDUMP_DBG(data, length, "content"); +} diff --git a/drivers/ieee802154/ieee802154_rf2xx_iface.h b/drivers/ieee802154/ieee802154_rf2xx_iface.h index d434323cf64..17e6a76062a 100644 --- a/drivers/ieee802154/ieee802154_rf2xx_iface.h +++ b/drivers/ieee802154/ieee802154_rf2xx_iface.h @@ -1,7 +1,7 @@ /* ieee802154_rf2xx_iface.h - ATMEL RF2XX transceiver interface */ /* - * Copyright (c) 2019 Gerson Fernando Budke + * Copyright (c) 2019-2020 Gerson Fernando Budke * * SPDX-License-Identifier: Apache-2.0 */ @@ -107,4 +107,19 @@ void rf2xx_iface_frame_write(struct device *dev, u8_t *data, u8_t length); +/** + * @brief Reads sram data from the transceiver + * + * This function reads the sram data of the transceiver. + * + * @param[in] dev Transceiver device instance + * @param[in] address Start address to be read + * @param[out] data Pointer to the location to store data + * @param[in] length Number of bytes to be read from the sram space + */ +void rf2xx_iface_sram_read(struct device *dev, + u8_t address, + u8_t *data, + u8_t length); + #endif /* ZEPHYR_DRIVERS_IEEE802154_IEEE802154_RF2XX_IFACE_H_ */