#ifndef SI446X_H #define SI446X_H #include "stm32f0xx_hal.h" // Hardware Options /////////////////// // Timeout for blocking writes #define SI446x_TIMEOUT 10 // Crystal/oscillator frequency #define SI446x_VCXO_FREQ 26000000UL #define SI446x_SPI SPI1 // GPIO assignments #define SI446x_CS_PORT GPIOA #define SI446x_CS_PIN GPIO_PIN_15 #define SI446x_GPIO_PORT GPIOA #define SI446x_GPIO_PIN GPIO_PIN_10 #define SI446x_SHUTDOWN_PORT GPIOA #define SI446x_SHUTDOWN_PIN GPIO_PIN_9 #define SI446x_MOSI_PORT GPIOB #define SI446x_MOSI_PIN GPIO_PIN_5 #define SI446x_MISO_PORT GPIOB #define SI446x_MISO_PIN GPIO_PIN_4 #define SI446x_SCK_PORT GPIOB #define SI446x_SCK_PIN GPIO_PIN_3 #define SI446x_TCXO_EN_PORT GPIOA #define SI446x_TCXO_EN_PIN GPIO_PIN_8 /////////////////////////////////////// // Registers ///////////////////////// #define SI446x_CMD_POWER_UP 0x02 #define SI446x_CMD_NOP 0x00 #define SI446x_CMD_PART_INFO 0x01 #define SI446x_CMD_FUNC_INFO 0x10 #define SI446x_CMD_SET_PROPERTY 0x11 #define SI446x_CMD_GET_PROPERTY 0x12 #define SI446x_CMD_GPIO_PIN_CFG 0x13 #define SI446x_CMD_GET_ADC_READING 0x14 #define SI446x_CMD_FIFO_INFO 0x15 #define SI446x_CMD_PACKET_INFO 0x16 #define SI446x_CMD_IRCAL 0x17 #define SI446x_CMD_PROTOCOL_CFG 0x18 #define SI446x_CMD_GET_INT_STATUS 0x20 #define SI446x_CMD_GET_PH_STATUS 0x21 #define SI446x_CMD_GET_MODEM_STATUS 0x22 #define SI446x_CMD_GET_CHIP_STATUS 0x23 #define SI446x_CMD_START_TX 0x31 #define SI446x_CMD_START_RX 0x32 #define SI446x_CMD_REQUEST_DEVICE_STATE 0x33 #define SI446x_CMD_CHANGE_STATE 0x34 #define SI446x_CMD_READ_CMD_BUFF 0x44 #define SI446x_CMD_FRR_A_READ 0x50 #define SI446x_CMD_FRR_B_READ 0x51 #define SI446x_CMD_FRR_C_READ 0x53 #define SI446x_CMD_FRR_D_READ 0x57 #define SI446x_CMD_WRITE_TX_FIFO 0x66 #define SI446x_CMD_READ_RX_FIFO 0x77 #define SI446x_CMD_RX_HOP 0x36 // GPIO pin configuration options #define SI446x_GPIO_NOCHANGE 0 #define SI446x_GPIO_LOW 2 #define SI446x_GPIO_HIGH 3 #define SI446x_GPIO_INPUT 4 #define SI446x_GPIO_TXFIFO_LOW 35 #define SI446x_GPIO_TXENABLED 32 // GPIO pin definitions #define SI446x_GPIO0 0 #define SI446x_GPIO1 1 #define SI446x_GPIO2 2 #define SI446x_GPIO3 3 // Property MOD_TYPE parameters #define SI446x_MOD_TYPE_REGISTER_GROUP 0x20 #define SI446x_MOD_TYPE_REGISTER_PROP 0x00 #define SI446x_MOD_TYPE_CW 0 #define SI446x_MOD_TYPE_OOK 1 #define SI446x_MOD_TYPE_2FSK 2 #define SI446x_MOD_TYPE_2GFSK 3 #define SI446x_MOD_TYPE_4FSK 4 #define SI446x_MOD_TYPE_4GFSK 5 #define SI446x_MOD_TYPE_SOURCE_PACKETHANDLER (0<<3) #define SI446x_MOD_TYPE_SOURCE_DIRECTMODE (1<<3) #define SI446x_MOD_TYPE_SOURCE_PSEUDORANDOM (2<<3) #define SI446x_MOD_TYPE_DIRECT_SYNCH (0<<7) #define SI446x_MOD_TYPE_DIRECT_ASYNCH (1<<7) #define SI446x_MOD_TYPE_DIRECT_SOURCE_GPIO0 (0<<5) #define SI446x_MOD_TYPE_DIRECT_SOURCE_GPIO1 (1<<5) #define SI446x_MOD_TYPE_DIRECT_SOURCE_GPIO2 (2<<5) #define SI446x_MOD_TYPE_DIRECT_SOURCE_GPIO3 (3<<5) // XO Tune #define SI446x_XO_TUNE_REGISTER_GROUP 0x00 #define SI446x_XO_TUNE_REGISTER_PROP 0x00 #define SI446x_XO_TUNE_MAX 0x7F // Modem bit mapping #define SI446x_MODEM_MAP_GROUP 0x20 #define SI446x_MODEM_MAP_PROP 0x01 // Preamble #define SI446x_PREAMBLE_TX_LENGTH_GROUP 0x10 #define SI446x_PREAMBLE_TX_LENGTH_PROP 0x00 // Sync #define SI446x_SYNC_LENGTH_GROUP 0x11 #define SI446x_SYNC_LENGTH_PROP 0x00 // Power amp control DAC options #define AD56XX_NORMAL_OPERATION 0b00000000 #define AD56XX_1K_TO_GROUND 0b01000000 #define AD56XX_100K_TO_GROUND 0b10000000 #define AD56XX_TRI_STATE 0b11000000 // Internal definitions #define SI446x_CS SI446x_CS_PORT, SI446x_CS_PIN #define SI446x_MOSI SI446x_MOSI_PORT, SI446x_MOSI_PIN #define SI446x_MISO SI446x_MISO_PORT, SI446x_MISO_PIN #define SI446x_SCK SI446x_SCK_PORT, SI446x_SCK_PIN #define SI446x_GPIO SI446x_GPIO_PORT, SI446x_GPIO_PIN #define SI446x_SHUTDOWN SI446x_SHUTDOWN_PORT , SI446x_SHUTDOWN_PIN // Communication options #define SI446x_IGNORE_ACK 0 #define SI446x_CHECK_ACK 1 // Helper macros #define SI446x_SELECT HAL_GPIO_WritePin(SI446x_CS, GPIO_PIN_RESET) #define SI446x_DESELECT HAL_GPIO_WritePin(SI446x_CS, GPIO_PIN_SET) void si446x_init(void); void si446x_reset(void); void si446x_gpio(uint8_t gpio, uint8_t state, uint8_t doack); void si446x_setdatarate(void); void si446x_senddata(uint8_t* data, uint8_t len); void si446x_sendcmd(uint8_t tx_len, uint8_t* data, uint8_t doack); void si446x_setchannel(uint32_t frequency); void si446x_cw_on(void); void si446x_cw_off(void); uint8_t si446x_tx_status(void); SPI_HandleTypeDef* spi1_get(void); void si446x_shutdown(void); void si446x_wakeup(void); #endif