Xbee XR 868 not responding on SPI requests

I wish somebody can help me. I am trying to control DIGI Xbee module (XB-8XR-DMRM-001) by ESP32-S3 chip via SPI interface (I’m using ESP IDF). Example of my code is below also an oscillogram of MOSI, MISO, CLK and nCS data lines, and I have no success, in any combination (like changing logic from MSB to LSB, or reversing byte array, or pulling nCS low by myself, or adding extra delays after and before pulling nCS low and so on). Here like the page of datasheet to this module with an example of one of the request type. Actually, the problem is that I’m everytime receiving responce 0xFF, which is confirmed by MISO line, which everytime pulled high, there is no activity on it. At the same time that chips work perfectly via UART with DIGI’s proprietary software called “XCTU”, but I need to make it work exactly with SPI interface. Can anybody help me, please?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/spi_master.h"
#include "driver/gpio.h"
#include "sdkconfig.h"
#include "esp_log.h"

#define SPI_HOST SPI3_HOST
#define PIN_NUM_MISO GPIO_NUM_9
#define PIN_NUM_MOSI GPIO_NUM_10
#define PIN_NUM_CLK GPIO_NUM_12
#define PIN_NUM_CS GPIO_NUM_11
#define PIN_ATTEN GPIO_NUM_14

static const char TAG[] = "main";

void app_main(void)
{
    ESP_LOGI(TAG, "Initializing bus SPI%d...", SPI_HOST);
    spi_bus_config_t buscfg = {
        .miso_io_num = PIN_NUM_MISO,
        .mosi_io_num = PIN_NUM_MOSI,
        .sclk_io_num = PIN_NUM_CLK,
    };
    ESP_ERROR_CHECK(spi_bus_initialize(SPI_HOST, &buscfg, SPI_DMA_CH_AUTO));

    spi_device_handle_t devhandle;
    spi_device_interface_config_t devcfg = {
        .clock_speed_hz = 1000000UL,
        .mode = 0,
        .spics_io_num = PIN_NUM_CS,
        .queue_size = 10,
    };
    ESP_ERROR_CHECK(spi_bus_add_device(SPI_HOST, &devcfg, &devhandle));
    void *p = heap_caps_malloc(sizeof(uint8_t) * 32, MALLOC_CAP_DMA);
    for (int i = 0; i < 32; i++)
    {
        *((uint8_t *)p + i * sizeof(uint8_t)) = 0;
    }
    uint8_t data_tx[] = {0x7E, 0x00, 0x0E, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFE, 0x00, 0x00, 0xF1};
    spi_transaction_t t = {
        .tx_buffer = &data_tx,
        .rx_buffer = p,
        .length = sizeof(data_tx) * 8,
    };
    while (1)
    {
        ESP_ERROR_CHECK(spi_device_transmit(devhandle, &t));
        for (int i = 0; i < 32; i++)
        {
            printf("%i ", *((uint8_t *)p + i * sizeof(uint8_t)));
        }
        printf("\r\n");
        vTaskDelay(1000 / portTICK_PERIOD_MS);
    }
}

Yellow - CLK, red - MISO


Yellow - CLK, red - MOSI

Yellow - CLK, red - nCS

I would suggest checking to make sure you are using your SPI port as a SPI master. The XBee is a SPI slave and does require you to connect it to a SPI master.

In order to receive data, you need to issue 0xFF’s. Instead of sending data first, try simply receiving data first.