I am working on nrf52832 development kit for interfacing SX1262 Lora module via SPI. I have configured SPI 0 as follows:
/* LORA Module */
#define LORA_D101_PIN 24
#define LORA_RFRESET_PIN 05
#define LORA_MISO_PIN 30
#define LORA_MOSI_PIN 29
#define LORA_SCK_PIN 26
#define LORA_NSS_PIN 31
#define SPI_INSTANCE 0 /**< SPI instance index. */
const nrf_drv_spi_t spi = NRF_DRV_SPI_INSTANCE(SPI_INSTANCE); /**< SPI instance. */
uint8_t spi_xfer_done; /**< Flag used to indicate that SPI instance completed the transfer. */
void spi_event_handler(nrf_drv_spi_evt_t const * p_event,
void * p_context)
{
spi_xfer_done = 1;
}
void spi_init()
{
uint8_t err_code;
nrf_drv_spi_config_t spi_config = NRF_DRV_SPI_DEFAULT_CONFIG;
spi_config.ss_pin = NRF_DRV_SPI_PIN_NOT_USED;
spi_config.miso_pin = LORA_MISO_PIN;
spi_config.mosi_pin = LORA_MOSI_PIN;
spi_config.sck_pin = LORA_SCK_PIN;
err_code = nrf_drv_spi_init(&spi, &spi_config, spi_event_handler, NULL);
APP_ERROR_CHECK(err_code);
}
Initially I am trying to read the SX1262_REG_SYNC_WORD register with address 0x0740. As per SX1262 datasheet it's default value will be 0x14. But I am getting the value 0x00. The code is given below.
// Helper function to assert NSS (chip select) low
static void SX1262_Select(void) {
nrf_drv_gpiote_out_clear(LORA_NSS_PIN);
}
// Helper function to de-assert NSS (chip select) high
static void SX1262_Unselect(void) {
nrf_drv_gpiote_out_set(LORA_NSS_PIN);
}
uint16_t SX1262_ReadRegister() {
uint8_t command = 0x1D; // Read Register Command
uint8_t addr[2] = {0x07, 0x40};
uint8_t data[2] = {0, 0}; // To store the read data
uint8_t dummy_byte[2] = {0, 0};
// Unselect the SX1262 (NSS high)
SX1262_Select();
spi_xfer_done = 0;
nrf_drv_spi_transfer(&spi, &command, 1, NULL, 0);
while(spi_xfer_done == 0){__WFI();}
spi_xfer_done = 0;
nrf_drv_spi_transfer(&spi, addr, 2, NULL, 1);
while(spi_xfer_done == 0){__WFI();}
spi_xfer_done = 0;
nrf_drv_spi_transfer(&spi, NULL, 0, dummy_byte, 1);
while(spi_xfer_done == 0){__WFI();}
spi_xfer_done = 0;
nrf_drv_spi_transfer(&spi, NULL, 0, rx_data, 1);
while(spi_xfer_done == 0){__WFI();}
spi_xfer_done = 0;
if(rx_data[0] != 0x14) {
SX1262_Unselect();
return 0xFFFF;
}
// Unselect the SX1262 (NSS high)
SX1262_Unselect();
return (data[0]);
}
What will be the issue?
Thanks
Sachin



