fix(spi_dma): fix the receive error with RX DMA start with non-aligned address.
This commit is contained in:
parent
bfb15c6fc9
commit
a01db5569c
2 changed files with 2 additions and 2 deletions
|
@ -86,7 +86,7 @@ struct spi_transaction_t {
|
||||||
void *rx_buffer; ///< Pointer to receive buffer, or NULL for no MISO phase. Written by 4 bytes-unit if DMA is used.
|
void *rx_buffer; ///< Pointer to receive buffer, or NULL for no MISO phase. Written by 4 bytes-unit if DMA is used.
|
||||||
uint8_t rx_data[4]; ///< If SPI_USE_RXDATA is set, data is received directly to this variable
|
uint8_t rx_data[4]; ///< If SPI_USE_RXDATA is set, data is received directly to this variable
|
||||||
};
|
};
|
||||||
};
|
} ; //the rx data should start from a 32-bit aligned address to get around dma issue.
|
||||||
|
|
||||||
|
|
||||||
typedef struct spi_device_t* spi_device_handle_t; ///< Handle for a device on a SPI bus
|
typedef struct spi_device_t* spi_device_handle_t; ///< Handle for a device on a SPI bus
|
||||||
|
|
|
@ -603,7 +603,7 @@ esp_err_t spi_device_queue_trans(spi_device_handle_t handle, spi_transaction_t *
|
||||||
//if not use RXDATA neither rx_buffer, buffer_to_rcv assigned to NULL
|
//if not use RXDATA neither rx_buffer, buffer_to_rcv assigned to NULL
|
||||||
trans_buf.buffer_to_rcv = trans_desc->rx_buffer;
|
trans_buf.buffer_to_rcv = trans_desc->rx_buffer;
|
||||||
}
|
}
|
||||||
if ( trans_buf.buffer_to_rcv && handle->host->dma_chan && !esp_ptr_dma_capable( trans_buf.buffer_to_rcv )) {
|
if ( trans_buf.buffer_to_rcv && handle->host->dma_chan && (!esp_ptr_dma_capable( trans_buf.buffer_to_rcv ) || ((int)trans_buf.buffer_to_rcv%4!=0)) ) {
|
||||||
//if rxbuf in the desc not DMA-capable, malloc a new one
|
//if rxbuf in the desc not DMA-capable, malloc a new one
|
||||||
trans_buf.buffer_to_rcv = heap_caps_malloc((trans_desc->rxlength+7)/8, MALLOC_CAP_DMA);
|
trans_buf.buffer_to_rcv = heap_caps_malloc((trans_desc->rxlength+7)/8, MALLOC_CAP_DMA);
|
||||||
if ( trans_buf.buffer_to_rcv==NULL ) return ESP_ERR_NO_MEM;
|
if ( trans_buf.buffer_to_rcv==NULL ) return ESP_ERR_NO_MEM;
|
||||||
|
|
Loading…
Reference in a new issue