首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Arduino提供的ESP32 SPI-SPI.h库

Arduino提供的ESP32 SPI-SPI.h库
EN

Stack Overflow用户
提问于 2022-06-15 21:58:13
回答 1查看 504关注 0票数 -1

我有一个关于SPI.h驱动程序的问题,这在Arduino IDE示例中是可用的。似乎只有一种传输功能,也没有使用SPI接收数据的功能。

以下是用于传输的函数:

代码语言:javascript
复制
uint8_t transfer(uint8_t data);

它在该类中定义:

代码语言:javascript
复制
uint8_t SPIClass::transfer(uint8_t data)
{
    if(_inTransaction){
        return spiTransferByteNL(_spi, data);
    }
    return spiTransferByte(_spi, data);
}

下面是函数的实现:

代码语言:javascript
复制
uint8_t spiTransferByte(spi_t * spi, uint8_t data)
{
    if(!spi) {
        return 0;
    }
    SPI_MUTEX_LOCK();
    spi->dev->mosi_dlen.usr_mosi_dbitlen = 7;
    spi->dev->miso_dlen.usr_miso_dbitlen = 7;
    spi->dev->data_buf[0] = data;
#if CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S3
    spi->dev->cmd.update = 1;
    while (spi->dev->cmd.update);
#endif
    spi->dev->cmd.usr = 1;
    while(spi->dev->cmd.usr);
    data = spi->dev->data_buf[0] & 0xFF;
    SPI_MUTEX_UNLOCK();
    return data;
}

这个值是由函数、数据、SPI从服务器发送的字节返回的吗?我的意思是buf & 0xFF值是从从侧接收到的值吗?如果SPI.h驱动程序没有函数来接收从端得到的值,那就太奇怪了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-17 02:25:21

简单地说,是的,这可能是奴隶发送回来的数据。

更详细的答案是:

SPI中的函数transfer()是双向的,因为SPI有单独的输出(MOSI)和输入(MISO)行,当你时钟出一个字节的时候,它也是从中的一个字节中时钟。从技术上讲,您可以在发送数据时接收数据。但是更多的时候,你需要告诉奴隶你想从奴隶那里得到什么样的数据。因此,通常情况下,如果您发送一个字节命令(告诉从服务器要读取什么),并期望从从服务器返回3个字节的数据,那么您可能需要transfer((uint8_t buffer), 4)发送4个字节数据(一个字节cmd和3个字节虚拟数据),以获得3字节数据。实际实现的方式因设备而异,因此您需要参考正在使用的设备的数据表。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72638289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档