SPI 类——串行外设接口总线协议(主端)

SPI 是一种由主机驱动的同步串行协议。在物理层面,一条总线由 3 条线路组成:SCK、MOSI、MISO。多个设备可以共享同一条总线。每个设备都应该有一个单独的第 4 个信号 SS(从设备选择),以选择总线上的特定设备,并与之通信。SS 信号的管理应该发生在用户代码中(通过 machine.Pin 类)。

硬件和软件 SPI 实现都通过 machine.SPImachine.SoftSPI 类存在 。硬件 SPI 使用系统的底层硬件支持来执行读/写,并且通常高效且快速,但可能对可以使用的引脚有限制。软件 SPI 是通过位组合实现的,可以在任何引脚上使用,但效率不高。这些类具有相同的可用方法,主要区别在于它们的构造方式。

构造函数

class machine.SPI(id, ...)

在给定的总线id上构造一个 SPI 对象。id 的值取决于特定端口及其硬件。值 0、1 等通常用于选择硬件 SPI 块 #0、#1 等。

在没有附加参数的情况下,SPI 对象被创建但不初始化(它具有总线上次初始化的设置,如果有的话)。如果给出了额外的参数,则总线被初始化。参见init初始化参数。

class machine.SoftSPI(baudrate=500000, *, polarity=0, phase=0, bits=8, firstbit=MSB, sck=None, mosi=None, miso=None)

构造一个新的软件 SPI 对象。必须给出额外的参数,通常至少是sck、mosi和miso,这些用于初始化总线。有关 SPI.init参数的说明,请参阅。

方法

SPI.init(baudrate=1000000, *, polarity=0, phase=0, bits=8, firstbit=SPI.MSB, sck=None, mosi=None, miso=None, pins=SCK, MOSI, MISO)

使用给定的参数初始化 SPI 总线:

  • baudrate是 SCK 时钟速率。

  • polarity可以是 0 或 1,是空闲时钟线所在的电平。

  • phase 可以是 0 或 1 分别在第一个或第二个时钟沿采样数据。

  • bits是每次传输的位宽度。保证所有硬件只支持 8 个。

  • firstbit 可以SPI.MSBSPI.LSB.

  • sck, mosi, miso 是用于总线信号的引脚 (machine.Pin) 对象。对于大多数硬件 SPI 块(由id 构造函数的参数选择),引脚是固定的,不能更改。在某些情况下,硬件块允许硬件 SPI 块有 2-3 个替代引脚集。任意引脚分配仅适用于 bitbanging SPI 驱动程序 ( id = -1)。

  • pins - WiPy 端口没有 sck, mosi, miso参数,而是允许将它们指定为 pins 参数元组。

在硬件 SPI 的情况下,实际时钟频率可能低于请求的波特率。这取决于平台硬件。实际速率可以通过打印 SPI 对象来确定。

SPI.deinit()

关闭 SPI 总线。

SPI.read(nbytes, write=0)

读取指定的字节数,nbytes 同时连续写入指定的单个字节write。返回一个 bytes 包含读取数据的对象。

SPI.readinto(buf, write=0)

读入由 指定的缓冲区,buf 同时连续写入由 给定的单个字节write。返回 None

注意:在 WiPy 上,此函数返回读取的字节数。

SPI.write(buf)

写入包含在buf. . 返回None

注意:在 WiPy 上,此函数返回写入的字节数。

SPI.write_readinto(write_buf, read_buf)

Write the bytes from write_buf读取时的字节写入read_buf缓冲区可以相同或不同,但两个缓冲区的长度必须相同。返回None

注意:在 WiPy 上,此函数返回写入的字节数。

常数

SPI.MASTER

用于将 SPI 总线初始化为主机;这仅用于 WiPy

SPI.MSB

将第一位设置为最高有效位

SPI.LSB

将第一位设置为最低有效位