spi_slave: fix calculation of buffer size

the previous calculation added 4 additional bytes to the buffers
when the length was already dividable by 4.

Signed-off-by: Christian Ambach <christian.ambach@deutschebahn.com>
This commit is contained in:
Christian Ambach 2018-11-12 11:15:44 +01:00
parent 96783826d8
commit 18b44f2208

View File

@ -35,7 +35,9 @@ static const char TAG[] = __FILE__;
// https://docs.espressif.com/projects/esp-idf/en/latest/api-reference/peripherals/spi_slave.html // https://docs.espressif.com/projects/esp-idf/en/latest/api-reference/peripherals/spi_slave.html
#define BUFFER_SIZE \ #define BUFFER_SIZE \
(MAX(8, HEADER_SIZE + PAYLOAD_BUFFER_SIZE) + \ (MAX(8, HEADER_SIZE + PAYLOAD_BUFFER_SIZE) + \
(4 - MAX(8, HEADER_SIZE + PAYLOAD_BUFFER_SIZE) % 4)) (PAYLOAD_BUFFER_SIZE % 4 == 0 \
? 0 \
: 4 - MAX(8, HEADER_SIZE + PAYLOAD_BUFFER_SIZE) % 4))
DMA_ATTR uint8_t txbuf[BUFFER_SIZE]; DMA_ATTR uint8_t txbuf[BUFFER_SIZE];
DMA_ATTR uint8_t rxbuf[BUFFER_SIZE]; DMA_ATTR uint8_t rxbuf[BUFFER_SIZE];
@ -70,7 +72,11 @@ void spi_slave_task(void *param) {
// set length for spi slave driver // set length for spi slave driver
transaction_size = HEADER_SIZE + msg.MessageSize; transaction_size = HEADER_SIZE + msg.MessageSize;
// SPI transaction size needs to be at least 8 bytes and dividable by 4, see
// https://docs.espressif.com/projects/esp-idf/en/latest/api-reference/peripherals/spi_slave.html
if (transaction_size % 4 != 0) {
transaction_size += (4 - transaction_size % 4); transaction_size += (4 - transaction_size % 4);
}
// prepare spi transaction // prepare spi transaction
spi_slave_transaction_t spi_transaction = {0}; spi_slave_transaction_t spi_transaction = {0};