Hi,
It is connected to our custom board, which is work fine on Sierrawireless unit FX30. I wanted to use other chip, so I tried xiao ESP32s3. Code below should work but it does not return correct data.
gpio_reset_pin(GPIO_NUM_44);
gpio_set_direction(GPIO_NUM_44, GPIO_MODE_OUTPUT);
spi_bus_config_t Config;
Config.mosi_io_num = GPIO_NUM_9;
Config.miso_io_num = GPIO_NUM_8;
Config.sclk_io_num = GPIO_NUM_7;
Config.max_transfer_sz = 0;
Config.quadwp_io_num = -1; // -1 not used
Config.quadhd_io_num = -1; // -1 not used
Config.intr_flags = 0;
Config.data0_io_num = -1;
Config.data1_io_num = -1;
Config.data2_io_num = -1;
Config.data3_io_num = -1;
Config.data4_io_num = -1;
Config.data5_io_num = -1;
Config.data6_io_num = -1;
Config.data7_io_num = -1;
//When I set flags Config.flags = SPICOMMON_BUSFLAG_MASTER| SPICOMMON_BUSFLAG_MISO | SPICOMMON_BUSFLAG_MOSI | SPICOMMON_BUSFLAG_SCLK I have got w error
//E (372) spi: mosi pin required.
//E (382) spi: miso pin required.
//E (382) spi: spicommon_bus_initialize_io(598): not all required capabilities satisfied.
Config.flags = 0;//SPICOMMON_BUSFLAG_MASTER| SPICOMMON_BUSFLAG_MISO | SPICOMMON_BUSFLAG_MOSI | SPICOMMON_BUSFLAG_SCLK;
Config.isr_cpu_id = INTR_CPU_ID_0;
if(ESP_OK == spi_bus_initialize(SPI3_HOST, &Config, SPI_DMA_CH_AUTO))
{
printf("-----OK-----");
}
spi_device_interface_config_t ConfigInterface;
ConfigInterface.command_bits = 0;
ConfigInterface.address_bits = 0;
ConfigInterface.dummy_bits = 0;
ConfigInterface.mode = 0;
ConfigInterface.duty_cycle_pos = 128; // default 128 = 50%/50% duty
ConfigInterface.cs_ena_pretrans = 0; // 0 not used
ConfigInterface.cs_ena_posttrans = 0; // 0 not used
ConfigInterface.clock_speed_hz = 400000;
ConfigInterface.spics_io_num = GPIO_NUM_44;
//SPI_DEVICE_HALFDUPLEX does not work
ConfigInterface.flags = 0;//SPI_DEVICE_HALFDUPLEX;//| SPI_DEVICE_NO_DUMMY; //| SPI_DEVICE_HALFDUPLEX;
ConfigInterface.queue_size = 8;
ConfigInterface.pre_cb = NULL;
ConfigInterface.post_cb = NULL;
ConfigInterface.input_delay_ns = 0;
if(ESP_OK == spi_bus_add_device(SPI3_HOST, &ConfigInterface, &SPIHandle))
{
printf("-----OK-----");
}
uint8_t WriteDataPtr[] = {0x08, 0xE7};
uint8_t ReadDataPtr[2];
spi_transaction_t transaction;
transaction.flags = 0;
transaction.cmd = 0;
transaction.addr = 0;
transaction.length = 16;
transaction.rxlength = 0;
transaction.tx_buffer = WriteDataPtr;
transaction.rx_buffer = ReadDataPtr;
esp_err_t err =spi_device_transmit(SPIHandle, &transaction);
if(err == ESP_OK)
{
//ReadDataPtr[0], ReadDataPtr[1] returns constant numbers
printf("SPI Read OK\n");
return true;
}
else
{
return false;
}