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