ESP32之软件SPI驱动及SPI、HSPI和VSPI的理解

SPI内部结构

SPI系统框图
ESP32 共有 4 个 SPI 控制器,用于连接支持 SPI 协议的设备。 SPI0 控制器作为 cache 访问外部
存储单元接口使用, SPI1 作为主机使用, SPI2 和 SPI3 控制器既可作为主机使用又可作为从机使用。作主机使
用时,每个 SPI 控制器可以使用多个片选信号 (CS0~CS2) 来连接多个 SPI 从机设备。 SPI1 ~ SPI3 控制器共享
两个 DMA 通道。
SPI 控制器在 GP-SPI 模式下,支持标准的四线全双工通信(MOSI、 MISO、 CS、 CLK)和三线半双工通信(DATA、
CS、 CLK)。 SPI 控制器在 QSPI 模式下使用信号总线 D、 Q、 CS0~CS2、 CLK、 WP 和 HD 作为 4-bit 并行 SPI
总线来访问外部 Flash 或 SRAM。
SPI信号与引脚信号功能映射关系

SPI配置类型

需要注意的是,HSPI和VSPI并不是网友们认为的high-speed SPI 和Very High-speed SPI,这是SPI和HSPI、VSPI是一样的,只不过是换个名字用于区分,SPI相当于SPI0或SPI1,HSPI相当于SPI2,VSPI相当于SPI3。

  • 20
    点赞
  • 106
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
ESP32-S2 支持多种 SPI 操作模式,包括主模式和从模式,可以通过硬件 SPI 接口或者软件 SPI 接口进行通信。以下是使用 ESP32-S2 的硬件 SPI 接口的示例代码: ```c #include <SPI.h> // 定义 SPI 引脚 #define PIN_CLK 18 #define PIN_MISO 19 #define PIN_MOSI 23 #define PIN_CS 5 SPIClass SPI1(HSPI); // 定义 SPI 对象 void setup() { // 初始化 SPI 总线 SPI1.begin(PIN_CLK, PIN_MISO, PIN_MOSI, PIN_CS); // 设置 SPI 参数 SPI1.setBitOrder(MSBFIRST); // 数据位顺序,高位先传输 SPI1.setDataMode(SPI_MODE0); // 时钟极性和相位,MODE0 表示 CPOL=0, CPHA=0 SPI1.setFrequency(1000000); // 时钟频率,1MHz } void loop() { // 向从设备发送 0x55 命令 SPI1.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE0)); digitalWrite(PIN_CS, LOW); SPI1.transfer(0x55); digitalWrite(PIN_CS, HIGH); SPI1.endTransaction(); // 从从设备接收 4 字节数据 uint8_t data[4]; SPI1.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE0)); digitalWrite(PIN_CS, LOW); for (int i = 0; i < 4; i++) { data[i] = SPI1.transfer(0x00); } digitalWrite(PIN_CS, HIGH); SPI1.endTransaction(); // 处理接收到的数据 // ... delay(1000); } ``` 在上面的代码中,我们使用 `SPIClass` 类定义了一个名为 `SPI1` 的 SPI 对象,使用了 HSPI 硬件 SPI 接口。在 `setup()` 函数中,我们初始化了 SPI 总线,并设置了数据位顺序、时钟极性和相位以及时钟频率。在 `loop()` 函数中,我们先发送了一个 0x55 命令,然后接收了 4 字节的数据,并进行处理。其中,`beginTransaction()` 和 `endTransaction()` 函数用于开始和结束 SPI 总线传输事务,`SPISettings()` 函数用于设置传输参数,`digitalWrite()` 函数用于控制从设备的 CS 引脚。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Justice_Gao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值