公众号:嵌入式不难
本文仅供参考学习,如有错误之处,欢迎留言指正。
现象
在使用 spi_device_polling_transmit 发送接收SPI数据的时候,如果读写字节数不是4的倍数,spi会按照4字节对齐的方式额外写0到接收内存里,发送内存不受影响
问题代码
int _SPISendAndRecv(void)
{
esp_err_t ret;
spi_transaction_t t;
uint8_t send=0xBB;
uint8_t recv[4];
memset(&t, 0, sizeof(t));
memset(recv, 0xAA, 4);
t.length=8;
t.tx_buffer=&send;
t.rx_buffer=recv;
ret = spi_device_polling_transmit(NRF_t.spi, &t);
assert(ret==ESP_OK);
if(ret==ESP_OK) return 0;
else return -1;
}
/*
假如会收到0xBB
那么recv最终的内存为0xBB, 0x00, 0x00, 0x00
*/
解决办法
将接收内存使用__attribute__((aligned(4)))
修饰