ESP32 学习笔记(八)SPI - SPI Master

SPI Master driver概述ESP32有四个SPI外设,称为SPI0,SPI1,HSPI和VSPI。 SPI0完全专用于ESP32用于将连接的SPI闪存设备映射到存储器的闪存缓存。 SPI1连接到与SPI0相同的硬件线,用于写入闪存芯片。 HSPI和VSPI可以免费使用。 SPI1,HSPI和VSPI都有三条片选线,允许它们最多驱动三个SPI器件作为主器件。spi_maste...
摘要由CSDN通过智能技术生成

SPI Master

概述

ESP32 有四个 SPI 外设,称为 SPI0,SPI1,HSPI 和 VSPI. SPI0 是专用于 flash 缓存, ESP32 将连接的 SPI flash 设备映射到存储器. SPI1 和 SPI0 使用相同的硬件线,SPI1 用于外部 flash 芯片. HSPI 和 VSPI 可以任意使用. SPI1,HSPI 和 VSPI 都有三条片选线,作为 SPI 主机允许它们最多驱动三个 SPI 设备.

spi_master 驱动

即使在多线程环境中,spi_master 驱动程序也可以轻松与 SPI 从设备进行通信. 它完全透明地处理 DMA 传输以读取和写入数据,并自动处理同一主机上不同 SPI 从站之间的多路复用.

术语

spi_master 驱动程序使用以下术语:

  • 主机:ESP32 内部的 SPI 外设启动 SPI 传输. SPI,HSPI 或 VSPI 之一. (目前,驱动程序实际上只支持 HSPI 或 VSPI;它将在未来的某个地方支持所有 3个外设.)
  • 总线:SPI总线,与连接到一个主机的所有 SPI 设备共用.通常,总线由 miso,mosi,sclk 和可选的 quadwp 和 quadhd 信号组成. SPI 从设备并联连接到这些信号.
    • miso - 也称为 q,这是将串行流输入到 ESP32中
    • mosi - 也称为 d,这是来自 ESP32 的串行流的输出
    • sclk - 时钟信号.每个数据位在该信号的正或负边沿输出或输出
    • quadwp - 写保护信号.仅用于 4 位(qio/qout)事务.
    • quadhd - 保持信号.仅用于 4 位(qio/qout)事务.
  • 设备:SPI 从设备.每个 SPI 从设备都有自己的片选(CS)线,当发生到/从 SPI 从设备的传输时,该线被激活.
  • 事务:一个 CS 活动的实例,来自和/或发生的设备的数据传输,以及 CS 再次变为非活动状态.事务是原子的,因为它们永远不会被另一个事务中断.

SPI transactions

SPI 总线上的事务由五个阶段组成,其中任何阶段都可以跳过:

  • 命令阶段. 在此阶段,命令(0-16 位)被输出.
  • 地址阶段. 在此阶段,地址(0-64 位)被输出.
  • 写阶段. 主设备将数据发送到从设备.
  • 虚拟阶段. 该阶段是可配置的,用于满足时序要求.
  • 阅读阶段. 从站将数据发送给主站.

在全双工模式下,读写阶段被组合,SPI 主机同时读写数据.总事务长度command_bits + address_bits + trans_conf.length 决定,而 trans_conf.rx_length 仅确定接收到缓冲区的数据长度.

在半双工模式下,主机具有独立的写和读阶段.写入阶段和读取阶段的长度分别trans_conf.lengthtrans_conf.rx_length 决定.

命令和地址阶段是可选的,因为不是每个 SPI 设备都需要发送命令和/或地址.这反映在设备配置中:当 command_bitsaddress_bits 字段设置为零时,不执行命令或地址阶段.

读写阶段的情况类似:并非每个事务都需要写入数据以及要读取的数据.当 rx_buffer 为 NULL(并且未设置 SPI_USE_RXDATA)时,将跳过读取阶段.当 tx_buffer 为 NULL(并且未设置 SPI_USE_TXDATA)时,将跳过写入阶段.

Interrupt transactions

中断事务将阻塞事务例程,直到事务完成为止,从而使CPU可以运行其他任务。

当事务在传输中时,中断事务使用中断驱动的逻辑。程序将被阻塞,允许 C

  • 7
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值