28 #ifndef MBED_LORA_RADIO_DRV_SX126X_SX126X_DS_H_ 29 #define MBED_LORA_RADIO_DRV_SX126X_SX126X_DS_H_ 31 #include "LoRaRadio.h" 37 #define XTAL_FREQ 32000000 38 #define FREQ_DIV 33554432 39 #define FREQ_STEP 0.95367431640625 // ((double)(XTAL_FREQ / (double)FREQ_DIV)) 40 #define FREQ_ERR 0.47683715820312 53 #define MATCHING_FREQ_915 0 54 #define MATCHING_FREQ_780 1 55 #define MATCHING_FREQ_490 2 56 #define MATCHING_FREQ_434 3 57 #define MATCHING_FREQ_280 4 58 #define MATCHING_FREQ_169 5 59 #define MATCHING_FREQ_868 6 64 #define AUTO_RX_TX_OFFSET 2 69 #define CRC_IBM_SEED 0xFFFF 74 #define CRC_CCITT_SEED 0x1D0F 79 #define CRC_POLYNOMIAL_IBM 0x8005 84 #define CRC_POLYNOMIAL_CCITT 0x1021 90 #define REG_LR_CRCSEEDBASEADDR 0x06BC 95 #define REG_LR_CRCPOLYBASEADDR 0x06BE 100 #define REG_LR_WHITSEEDBASEADDR_MSB 0x06B8 101 #define REG_LR_WHITSEEDBASEADDR_LSB 0x06B9 106 #define REG_LR_PACKETPARAMS 0x0704 111 #define REG_LR_PAYLOADLENGTH 0x0702 116 #define REG_LR_SYNCWORDBASEADDRESS 0x06C0 121 #define REG_LR_SYNCWORD 0x0740 126 #define LORA_MAC_PRIVATE_SYNCWORD 0x1424 131 #define LORA_MAC_PUBLIC_SYNCWORD 0x3444 136 #define RANDOM_NUMBER_GENERATORBASEADDR 0x0819 141 #define REG_RX_GAIN 0x08AC 146 #define REG_FREQUENCY_ERRORBASEADDR 0x076B 151 #define REG_XTA_TRIM 0x0911 156 #define REG_OCP 0x08E7 164 uint16_t packet_received;
166 uint16_t length_error;
174 uint8_t rc64k_enable : 1;
175 uint8_t rc13m_enable : 1;
176 uint8_t pll_enable : 1;
177 uint8_t adc_pulse_enable : 1;
178 uint8_t adc_bulkN_enable : 1;
179 uint8_t adc_bulkP_enable : 1;
180 uint8_t img_enable : 1;
193 uint8_t rc64k_calib : 1;
194 uint8_t rc13m_calib : 1;
195 uint8_t pll_calib : 1;
196 uint8_t adc_calib : 1;
197 uint8_t img_calib : 1;
198 uint8_t xosc_start : 1;
199 uint8_t pll_lock : 1;
200 uint8_t buck_start : 1;
202 uint8_t reserved : 7;
222 } radio_operating_mode_t;
233 } radio_standby_mode_t;
244 } radio_regulator_mode_t;
250 RADIO_RAMP_10_US = 0x00,
251 RADIO_RAMP_20_US = 0x01,
252 RADIO_RAMP_40_US = 0x02,
253 RADIO_RAMP_80_US = 0x03,
254 RADIO_RAMP_200_US = 0x04,
255 RADIO_RAMP_800_US = 0x05,
256 RADIO_RAMP_1700_US = 0x06,
257 RADIO_RAMP_3400_US = 0x07,
264 LORA_CAD_01_SYMBOL = 0x00,
265 LORA_CAD_02_SYMBOL = 0x01,
266 LORA_CAD_04_SYMBOL = 0x02,
267 LORA_CAD_08_SYMBOL = 0x03,
268 LORA_CAD_16_SYMBOL = 0x04,
269 } lora_cad_symbols_t;
275 LORA_CAD_ONLY = 0x00,
284 MOD_SHAPING_OFF = 0x00,
285 MOD_SHAPING_G_BT_03 = 0x08,
286 MOD_SHAPING_G_BT_05 = 0x09,
287 MOD_SHAPING_G_BT_07 = 0x0A,
288 MOD_SHAPING_G_BT_1 = 0x0B,
289 } radio_mod_shaping_t;
316 } radio_rx_bandwidth_t;
330 } lora_spread_factors_t;
348 const uint8_t lora_bandwidhts [] = {LORA_BW_125, LORA_BW_250, LORA_BW_500};
358 } lora_coding_tates_t;
364 RADIO_PREAMBLE_DETECTOR_OFF = 0x00,
365 RADIO_PREAMBLE_DETECTOR_08_BITS = 0x04,
366 RADIO_PREAMBLE_DETECTOR_16_BITS = 0x05,
367 RADIO_PREAMBLE_DETECTOR_24_BITS = 0x06,
368 RADIO_PREAMBLE_DETECTOR_32_BITS = 0x07,
369 } radio_preamble_detection_t;
375 RADIO_ADDRESSCOMP_FILT_OFF = 0x00,
376 RADIO_ADDRESSCOMP_FILT_NODE = 0x01,
377 RADIO_ADDRESSCOMP_FILT_NODE_BROAD = 0x02,
378 } radio_address_filter_t;
384 RADIO_PACKET_VARIABLE_LENGTH = 0x00,
385 RADIO_PACKET_FIXED_LENGTH = 0x01,
386 } radio_pkt_length_t;
391 typedef enum radio_crc_types_e {
392 RADIO_CRC_OFF = 0x01,
393 RADIO_CRC_1_BYTES = 0x00,
394 RADIO_CRC_2_BYTES = 0x02,
395 RADIO_CRC_1_BYTES_INV = 0x04,
396 RADIO_CRC_2_BYTES_INV = 0x06,
397 RADIO_CRC_2_BYTES_IBM = 0xF1,
398 RADIO_CRC_2_BYTES_CCIT = 0xF2,
405 RADIO_DC_FREE_OFF = 0x00,
406 RADIO_DC_FREEWHITENING = 0x01,
407 } radio_whitening_mode_t;
413 LORA_PACKET_VARIABLE_LENGTH = 0x00,
414 LORA_PACKET_FIXED_LENGTH = 0x01,
415 LORA_PACKET_EXPLICIT = LORA_PACKET_VARIABLE_LENGTH,
416 LORA_PACKET_IMPLICIT = LORA_PACKET_FIXED_LENGTH,
431 LORA_IQ_NORMAL = 0x00,
432 LORA_IQ_INVERTED = 0x01,
439 TCXO_CTRL_1_6V = 0x00,
440 TCXO_CTRL_1_7V = 0x01,
441 TCXO_CTRL_1_8V = 0x02,
442 TCXO_CTRL_2_2V = 0x03,
443 TCXO_CTRL_2_4V = 0x04,
444 TCXO_CTRL_2_7V = 0x05,
445 TCXO_CTRL_3_0V = 0x06,
446 TCXO_CTRL_3_3V = 0x07,
447 } radio_TCXO_ctrl_voltage_t;
455 IRQ_RADIO_NONE = 0x0000,
456 IRQ_TX_DONE = 0x0001,
457 IRQ_RX_DONE = 0x0002,
458 IRQ_PREAMBLE_DETECTED = 0x0004,
459 IRQ_SYNCWORD_VALID = 0x0008,
460 IRQ_HEADER_VALID = 0x0010,
461 IRQ_HEADER_ERROR = 0x0020,
462 IRQ_CRC_ERROR = 0x0040,
463 IRQ_CAD_DONE = 0x0080,
464 IRQ_CAD_ACTIVITY_DETECTED = 0x0100,
465 IRQ_RX_TX_TIMEOUT = 0x0200,
466 IRQ_RADIO_ALL = 0xFFFF,
470 RADIO_GET_STATUS = 0xC0,
471 RADIO_WRITE_REGISTER = 0x0D,
472 RADIO_READ_REGISTER = 0x1D,
473 RADIO_WRITE_BUFFER = 0x0E,
474 RADIO_READ_BUFFER = 0x1E,
475 RADIO_SET_SLEEP = 0x84,
476 RADIO_SET_STANDBY = 0x80,
480 RADIO_SET_RXDUTYCYCLE = 0x94,
481 RADIO_SET_CAD = 0xC5,
482 RADIO_SET_TXCONTINUOUSWAVE = 0xD1,
483 RADIO_SET_TXCONTINUOUSPREAMBLE = 0xD2,
484 RADIO_SET_PACKETTYPE = 0x8A,
485 RADIO_GET_PACKETTYPE = 0x11,
486 RADIO_SET_RFFREQUENCY = 0x86,
487 RADIO_SET_TXPARAMS = 0x8E,
488 RADIO_SET_PACONFIG = 0x95,
489 RADIO_SET_CADPARAMS = 0x88,
490 RADIO_SET_BUFFERBASEADDRESS = 0x8F,
491 RADIO_SET_MODULATIONPARAMS = 0x8B,
492 RADIO_SET_PACKETPARAMS = 0x8C,
493 RADIO_GET_RXBUFFERSTATUS = 0x13,
494 RADIO_GET_PACKETSTATUS = 0x14,
495 RADIO_GET_RSSIINST = 0x15,
496 RADIO_GET_STATS = 0x10,
497 RADIO_RESET_STATS = 0x00,
498 RADIO_CFG_DIOIRQ = 0x08,
499 RADIO_GET_IRQSTATUS = 0x12,
500 RADIO_CLR_IRQSTATUS = 0x02,
501 RADIO_CALIBRATE = 0x89,
502 RADIO_CALIBRATEIMAGE = 0x98,
503 RADIO_SET_REGULATORMODE = 0x96,
504 RADIO_GET_ERROR = 0x17,
505 RADIO_CLR_ERROR = 0x07,
506 RADIO_SET_TCXOMODE = 0x97,
507 RADIO_SET_TXFALLBACKMODE = 0x93,
508 RADIO_SET_RFSWITCHMODE = 0x9D,
509 RADIO_SET_STOPRXTIMERONPREAMBLE = 0x9F,
510 RADIO_SET_LORASYMBTIMEOUT = 0xA0,
520 uint8_t reserved : 1;
521 uint8_t cmd_status : 3;
522 uint8_t chip_mode : 3;
523 uint8_t cpu_busy : 1;
531 IRQ_HEADER_ERROR_CODE = 0x01,
532 IRQ_SYNCWORD_ERROR_CODE = 0x02,
533 IRQ_CRC_ERROR_CODE = 0x04,
538 IRQ_PBL_DETECT_CODE = 0x01,
539 IRQ_SYNCWORD_VALID_CODE = 0x02,
540 IRQ_HEADER_VALID_CODE = 0x04,
544 IRQ_RX_TIMEOUT = 0x00,
545 IRQ_TX_TIMEOUT = 0x01,
549 RECEPTION_MODE_SINGLE = 0,
550 RECEPTION_MODE_CONTINUOUS,
563 radio_mod_shaping_t modulation_shaping;
565 uint32_t operational_frequency;
573 uint32_t operational_frequency;
595 radio_whitening_mode_t whitening_mode;
625 int8_t signal_rssi_pkt;
The type describing the packet parameters for every packet types.
int8_t snr_pkt
The SNR of the last packet.
Represents the possible radio system error states.
enum modem_type radio_modems_t
Type of modem.
lora_bandwidths_t bandwidth
Bandwidth for the LoRa modulation.
radio_crc_types_t crc_length
Size of the CRC block in the GFSK packet.
uint8_t low_datarate_optimization
Indicates if the modem uses the low datarate optimization.
lora_coding_tates_t coding_rate
Coding rate for the LoRa modulation.
int8_t rssi_sync
The RSSI measured on last packet.
Represents the packet status for every packet type.
uint8_t syncword_length
The synchronization word length for GFSK packet type.
struct packet_params::@15::@16 gfsk
Holds the GFSK packet parameters.
lora_IQ_mode_t invert_IQ
Allows to swap IQ for LoRa packet.
radio_pkt_length_t header_type
If the header is explicit, it will be transmitted in the GFSK packet. If the header is implicit...
int8_t rssi_pkt
The RSSI of the last packet.
uint16_t preamble_length
The preamble Tx length for GFSK packet type in bit.
lora_pkt_length_t header_type
If the header is explicit, it will be transmitted in the LoRa packet. If the header is implicit...
radio_modems_t modem_type
Packet to which the packet status are referring to.
lora_spread_factors_t spreading_factor
Spreading Factor for the LoRa modulation.
Represents a calibration configuration.
uint8_t payload_length
Size of the payload in the GFSK packet.
int8_t rssi_avg
The averaged RSSI.
struct packet_params::@15::@17 lora
Holds the LoRa packet parameters.
struct packet_params::@15 params
Holds the packet parameters structure.
lora_crc_mode_t crc_mode
Size of CRC block in LoRa packet.
radio_address_filter_t addr_comp
Activated SyncWord correlators.
radio_preamble_detection_t preamble_min_detect
The preamble Rx length minimal for GFSK packet type.
radio_modems_t modem_type
Packet to which the packet status are referring to.
radio_modems_t modem_type
Packet to which the packet parameters are referring to.
Represents the Rx internal counters values when GFSK or LoRa packet type is used. ...
radio_modems_t modem_type
Packet to which the modulation parameters are referring to.
Structure describing the radio status.
The type describing the modulation parameters for every packet types.