当前位置:   article > 正文

ESP32-C3开发之旅 基础篇6 ESP32-C3 SPI通信_fspihd

fspihd

一、SPI 控制器 (SPI)

串行外设接口 (SPI) 是一种同步串行接口,可用于与外围设备进行通信。ESP32-C3 芯片集成了三个 SPI 控制器:

  1. SPI0
  2. SPI1
  3. 通用SPI2 即 GP-SPI2
    SPI0 和 SPI1 控制器主要供内部使用。

二、特性

  1. 支持主机模式和从机模式

  2. 支持半双工通信和全双工通信
    全双工:主机与从机之间的发送线和接收线各自独立,发送数据和接收数据同时进行。
    半双工:主机和从机只能有一方先发送数据,另一方接收数据。发送数据和接收数据不能同时进行

  3. 支持 CPU 控制的传输模式以及 DMA 控制的传输模式
    CPU 控制:由CPU 控制与 SPI 设备之间的数据传输。
    DMA 控制:由DMA引擎控制,DMA 与 SPI 设备之间的数据传输。

  4. 支持多种数据模式
    1-bit SPI 模式 :一个时钟周期传输一位数据。
    2-bit Dual SPI 模式 :一个时钟周期传输两个数据位。
    4-bit Quad SPI 模式 :一个时钟周期传输四个数据位。
    QPI 模式 :一个时钟周期可传输四位命令、或四位地址、或四位数据。

  5. 时钟频率可配置
    在主机模式下:时钟频率可达 80 MHz
    在从机模式下:时钟频率可达 60 MHz

  6. 数据长度可配置
    在主机和从机 CPU 控制的传输模式下:数据长度为 1 ~ 64 B
    在主机 DMA 控制的单次传输模式下:数据长度为 1 ~ 32 KB
    在主机 DMA 控制的分段配置传输模式下:数据长度字节数无限制
    在从机 DMA 控制的单次或连续传输模式下:数据长度字节数无限制

  7. 四种 SPI 时钟模式:模式 0 ~ 模式 3

  8. 在主机模式下,提供六条 CS 线:CS0 ~ CS5

  9. 支持访问 SPI 接口的传感器、显示屏控制器、flash 或 RAM 芯片
    在这里插入图片描述
    GP-SPI2 通过以下方式与 SPI 设备进行数据交换:
    在 CPU 控制的传输模式下:CPU <-> GP-SPI2 <-> SPI 设备
    在 DMA 控制的传输模式下:GDMA <-> GP-SPI2 <-> SPI 设备
    GP-SPI2 输入输出信号的前缀为 “FSPI”。FSPI 总线信号可通过 GPIO 交换矩阵或 IO MUX 与 GPIO 管脚相连。
    如下图可看出:
    GPIO2 :FSPIQ
    GPIO4 :FSPIHD
    GPIO5 :FSPIWP
    GPIO6 :FSPICLK
    GPIO7 :FSPICD
    GPIO10 :FSPICS0
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述
驱动强度
“驱动强度” 一栏所示为每个管脚复位后的默认驱动强度。
• 0 - 驱动电流 = ~5 mA
• 1 - 驱动电流 = ~10 mA
• 2 - 驱动电流 = ~20 mA
• 3 - 驱动电流 = ~40 mA
复位
“复位” 一栏所示为每个管脚复位后的默认配置。
• 0 - IE = 0(输入关闭)
• 1 - IE = 1(输入使能)
• 2 - IE = 1,WPD = 1(输入使能,下拉电阻使能)
• 3 - IE = 1,WPU = 1 (输入使能,上拉电阻使能)
• 4 - OE = 1, WPU = 1(输出使能,上拉电阻使能)
• 0* - IE = 0,WPU = 0,GPIO19 的 USB 上拉默认值为 1,因此,其上拉电阻使能,具体见说明。
• 1* - 如果 EFUSE_DIS_PAD_JTAG = 1,则 MTCK 管脚复位后浮空,即 IE = 1。如果EFUSE_DIS_PAD_JTAG= 0,则 MTCK 管脚连接内部上拉电阻,即 IE = 1,WPU = 1。
说明
• R - 代表位于 VDD3P3_RTC 电源域的管脚,部分具有模拟功能,见表 5-4。
• USB - GPIO18、GPIO19 为 USB 管脚。USB 管脚的上拉控制由管脚上拉和 USB 上拉共同控制。当其中任意一个为 1 时,对应管脚上拉电阻使能。USB 上拉值对应寄存器 USB_SERIAL_JTAG_DP_PULLUP。
• G - 管脚在芯片上电过程中有毛刺
在这里插入图片描述
ms是毫秒=0.001秒
us是微秒=0.000001秒
ns是纳秒=0.000000001秒

如下图所示,ESP32-C3做主站使用可以控制6个从站,作为从站使用只能与一个主站通讯
在这里插入图片描述

三、配置主站模式

清零 SPI_SLAVE_REG 中 SPI_SLAVE_MODE 位可将 GP-SPI2 配置成主机模式。在这种模式下,GP-SPI2 提供时钟信号(GP-SPI2 模块时钟的分频时钟)和六条 CS 线 (CS0 ~ CS5)

四、应用示例

以下示例展示了 GP-SPI2 如何在主机半双工模式下访问 flash 和外部 RAM。
在这里插入图片描述

五、从机模式

GP-SPI2 可用作从机与另一 SPI 主机进行通信。用作从机时,GP-SPI2 支持特定格式的 1-bit SPI、2-bit Dual SPI、4-bit Quad SPI 和 QPI 模式。用户可置位寄存器 SPI_SLAVE_REG 中 SPI_SLAVE_MODE 位使能 GP-SPI2 从机模式。
在传输过程中,CS 信号应保持低电平,CS 信号的下降沿和上升沿代表一次传输的开始和结束。数据以字节为单位进行传输,否则多余的位将丢失。此处多余的位表示总位长对 8 取模的结果。

在这里插入图片描述

六、代码测试。

时钟信号由主机产生,从机不用配置。但主机的SPI时钟频率应该在从机允许的处理速度范围内。

#define SPI2_FUNC_NUM 2
#define SPI2_IOMUX_PIN_NUM_MISO 2
#define SPI2_IOMUX_PIN_NUM_HD 4
#define SPI2_IOMUX_PIN_NUM_WP 5
#define SPI2_IOMUX_PIN_NUM_CLK 6
#define SPI2_IOMUX_PIN_NUM_MOSI 7
#define SPI2_IOMUX_PIN_NUM_CS 10

#define SPI_CLOCK_DIV2 0x00101001   // 8 MHz
#define SPI_CLOCK_DIV4 0x00241001   // 4 MHz
#define SPI_CLOCK_DIV8 0x004c1001   // 2 MHz
#define SPI_CLOCK_DIV16 0x009c1001  // 1 MHz
#define SPI_CLOCK_DIV32 0x013c1001  // 500 KHz
#define SPI_CLOCK_DIV64 0x027c1001  // 250 KHz
#define SPI_CLOCK_DIV128 0x04fc1001 // 125 KHz

static const int spiClk = 1000000; // 1 MHz
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

未完待续

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/801084
推荐阅读
相关标签
  

闽ICP备14008679号