Kaynağa Gözat

spi_master: fix config check of both in&out phases used in half-duplex mode

Add a check in spi_master driver to prevent using both 'trans->length'
and 'trans->rxlength' on chips other than ESP32 and ESP32S2 which hardware
not support using both TX and RX phases in half-duplex mode
wanlei 3 yıl önce
ebeveyn
işleme
4757efe21d
1 değiştirilmiş dosya ile 2 ekleme ve 0 silme
  1. 2 0
      components/driver/spi_master.c

+ 2 - 0
components/driver/spi_master.c

@@ -704,7 +704,9 @@ static SPI_MASTER_ISR_ATTR esp_err_t check_trans_valid(spi_device_handle_t handl
     SPI_CHECK(!is_half_duplex || !bus_attr->dma_enabled || !rx_enabled || !tx_enabled, "SPI half duplex mode does not support using DMA with both MOSI and MISO phases.", ESP_ERR_INVALID_ARG );
 #endif
 #if !SOC_SPI_HD_BOTH_INOUT_SUPPORTED
+    //On these chips, HW doesn't support using both TX and RX phases when in halfduplex mode
     SPI_CHECK(!is_half_duplex || !tx_enabled || !rx_enabled, "SPI half duplex mode is not supported when both MOSI and MISO phases are enabled.", ESP_ERR_INVALID_ARG);
+    SPI_CHECK(!is_half_duplex || !trans_desc->length || !trans_desc->rxlength, "SPI half duplex mode is not supported when both MOSI and MISO phases are enabled.", ESP_ERR_INVALID_ARG);
 #endif
     //MOSI phase is skipped only when both tx_buffer and SPI_TRANS_USE_TXDATA are not set.
     SPI_CHECK(trans_desc->length != 0 || !tx_enabled, "trans tx_buffer should be NULL and SPI_TRANS_USE_TXDATA should be cleared to skip MOSI phase.", ESP_ERR_INVALID_ARG);