SPI 类——串行外设接口总线协议(主端)¶
SPI 是一种由主机驱动的同步串行协议。在物理层面,一条总线由 3 条线路组成:SCK、MOSI、MISO。多个设备可以共享同一条总线。每个设备都应该有一个单独的第 4 个信号 SS(从设备选择),以选择总线上的特定设备,并与之通信。SS 信号的管理应该发生在用户代码中(通过 machine.Pin 类)。
硬件和软件 SPI 实现都通过
machine.SPI 和machine.SoftSPI
类存在 。硬件 SPI 使用系统的底层硬件支持来执行读/写,并且通常高效且快速,但可能对可以使用的引脚有限制。软件 SPI 是通过位组合实现的,可以在任何引脚上使用,但效率不高。这些类具有相同的可用方法,主要区别在于它们的构造方式。
构造函数¶
-
class
machine.
SPI
(id, ...)¶ 在给定的总线id上构造一个 SPI 对象。id 的值取决于特定端口及其硬件。值 0、1 等通常用于选择硬件 SPI 块 #0、#1 等。
在没有附加参数的情况下,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.MSB
或SPI.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 上,此函数返回写入的字节数。