Microchip ATA8520E transceiver

Device driver for Microchip ATA8520E transceiver (Sigfox)

For more information, please refer to the datasheet http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-9409-Smart-RF-ATA8520E_Datasheet.pdf

SIGFOX_PAC_LENGTH

Length of Sigfox PAC.

1
(16U)
SIGFOX_ID_LENGTH

Length of Sigfox ID.

1
(8U)
SIGFOX_MAX_TX_LENGTH

Maximum length of a TX payload.

1
(12U)
SIGFOX_RX_LENGTH

RX payload length is always 8.

1
(8U)
enum @110
ATA8520E_OK = 0
Everything is fine.
ATA8520E_ERR_SPI
An error occurred with SPI.
ATA8520E_ERR_GPIO_INT
An error occurred with interrupt pin.
ATA8520E_ERR_GPIO_RESET
An error occurred with reset pin.
ATA8520E_ERR_GPIO_POWER
An error occurred with power pin.
ATA8520E_ERR_EVENT_TIMEOUT
An expected event never happened.
enum @111
ATA8520E_STATE_IDLE
Device is in idle state.
ATA8520E_STATE_INIT
Device is in initialization phase.
ATA8520E_STATE_TX
Device is in TX mode.
ATA8520E_STATE_RX
Device is in RX mode, just after TX.
enum ata8520e_status_type_t
ATA8520E_SSM
SoC System Management status.
ATA8520E_ATMEL
Atmel status.
ATA8520E_SIGFOX
Sigfox status.
enum ata8520e_atmel_status_t
ATA8520E_ATMEL_OK
No error.
ATA8520E_ATMEL_COMMAND_ERROR
Command error / not supported.
ATA8520E_ATMEL_GENERIC_ERROR
Generic error.
ATA8520E_ATMEL_FREQUENCY_ERROR
Frequency error.
ATA8520E_ATMEL_USAGE_ERROR
Usage error.
ATA8520E_ATMEL_OPENING_ERROR
Opening error.
ATA8520E_ATMEL_CLOSING_ERROR
Closing error.
ATA8520E_ATMEL_SEND_ERROR
Send error.
enum ata8520e_sigfox_status_t
ATA8520E_SIGFOX_OK
No error.
ATA8520E_SIGFOX_MANUFACTURER_ERROR
Manufacturer error.
ATA8520E_SIGFOX_ID_OR_KEY_ERROR
ID or key error.
ATA8520E_SIGFOX_STATE_MACHINE_ERROR
State machine error.
ATA8520E_SIGFOX_FRAME_SIZE_ERROR
Frame size error.
ATA8520E_SIGFOX_MANUFACTURER_SEND_ERROR
Manufacturer send error.
ATA8520E_SIGFOX_GET_VOLTAGE_TEMP_ERROR
Get voltage/temperature error.
ATA8520E_SIGFOX_CLOSE_ERROR
Close issues encountered.
ATA8520E_SIGFOX_API_ERROR
API error indication.
ATA8520E_SIGFOX_GET_PN9_ERROR
Error getting PN9.
ATA8520E_SIGFOX_GET_FREQUENCY_ERROR
Error getting frequency.
ATA8520E_SIGFOX_BUILDING_FRAME_ERROR
Error building frame.
ATA8520E_SIGFOX_DELAY_ROUTINE_ERROR
Error in delay routine.
ATA8520E_SIGFOX_CALLBACK_ERROR
Callback causes error.
ATA8520E_SIGFOX_TIMING_ERROR
Timing error.
ATA8520E_SIGFOX_FREQUENCY_ERROR
Frequency error.
int ata8520e_init(ata8520e_t * dev, const ata8520e_params_t * params)

Initialize the device.

This will also initialize the CS pin as a GPIO output, without pull resistors and the interrupt pin handler to manage events.

Parameters

dev:Pointer to device descriptor
params:Pointer to SPI settings

Return values

  • ATA8520E_OK on success
  • -ATA8520E_ERR_SPI on SPI initialization error
  • -ATA8520E_ERR_GPIO_INT on interrupt pin initialization error
  • -ATA8520E_ERR_GPIO_RESET on reset pin initialization error
  • -ATA8520E_ERR_GPIO_POWER on power pin initialization error
void ata8520e_system_reset(const ata8520e_t * dev)

Perform a complete reset of the device.

Parameters

dev:Pointer to device descriptor

void ata8520e_read_atmel_version(const ata8520e_t * dev, uint8_t * version)

Return the Atmel version of the device.

Parameters

dev:Pointer to device descriptor
version:Pointer to the string containing the version, must be able to hold 2 characters

void ata8520e_read_sigfox_version(const ata8520e_t * dev, char * version)

Return the Atmel version of the device.

Parameters

dev:Pointer to device descriptor
version:String containing the version, must be able to hold 11 characters

void ata8520e_read_pac(const ata8520e_t * dev, char * pac)

Return the porting authorization code (PAC) available in the device.

Parameters

dev:Pointer to device descriptor
pac:String containing the pac, must be able to hold 17 characters

void ata8520e_read_id(const ata8520e_t * dev, char * id)

Return the ID of the device.

Parameters

dev:Pointer to device descriptor
id:String containing the ID, must be able to hold 9 characters

int ata8520e_send_frame(ata8520e_t * dev, uint8_t * payload, uint8_t payload_len)

Send a frame.

Parameters

dev:Pointer to device descriptor
payload:The payload to send
payload_len:The length of the payload to send

Return values

  • ATA8520E_OK if the send was successful
  • -ATA8520E_ERR_EVENT_TIMEOUT if the send failed
int ata8520e_send_receive_frame(ata8520e_t * dev, uint8_t * payload, uint8_t payload_len, uint8_t * rx_payload)

Send a frame and wait for a RX packet.

Parameters

dev:Pointer to device descriptor
payload:The payload to send
payload_len:The length of the payload to send
rx_payload:The payload received

Return values

  • ATA8520E_OK if the send was successful
  • -ATA8520E_ERR_EVENT_TIMEOUT if the send failed
int ata8520e_send_bit(ata8520e_t * dev, bool bit)

Send a bit.

Parameters

dev:Pointer to device descriptor
bit:The bit to send

Return values

  • ATA8520E_OK if the send was successful
  • -ATA8520E_ERR_EVENT_TIMEOUT if the send failed
struct ata8520e_params_t

Initialization parameters.

spi.h::spi_t spi

SPI device.

atmega_common/include/periph_cpu_common.h::spi_clk_t spi_clk

SPI clock speed.

gpio.h::gpio_t cs_pin

Chip select pin.

gpio.h::gpio_t int_pin

IRQ pin.

gpio.h::gpio_t power_pin

Power pin.

gpio.h::gpio_t reset_pin

Reset pin.

struct ata8520e_t

device descriptor

ata8520e_params_t params

Device parameters.

uint8_t internal_state

current state of the device

uint8_t event_received

check if an event was received

mutex_t event_lock

mutex for waiting for event