SPI – 串行外设接口

SPI由主机驱动的同步串行协议。总线的物理层包括3条线:SCK、MOSI、MISO,多个设备可共享同一总线。

每台设备应有一个单独的信号:SS(从属选择),在总线上选择一台特定设备以进行通信。

SS信号的处理应在用户编码(通过machine.Pin类)中进行。


使用示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# coding=utf-8
from machine import Pin, SPI

dc = Pin(28, Pin.OUT)
dc.value(0)

spi = SPI(id=1, baudrate=26000000, polarity=1, phase=0)
spi.write(bytearray([0xAE]))

spi.read(10)

buf = bytearray(4)      # create a buffer
spi.write_readinto(b'1234', buf) # write to MOSI and read from MISO into the buffer
spi.write_readinto(buf, buf) # write buf to MOSI and read MISO back into buf

函数接口


machine_spi.SPI(id)[源代码]

创建一个具有给定id的SPI对象。 id 的值取决于特定端口及其硬件, 不同设备支持的SPI端口号数目不同,请参考具体电路手册获取。

若无额外参数,创建SPI对象但未进行初始化(该对象有来自总线最后一次初始化的设置,若存在的话)。

若给定额外参数,则初始化总线。初始化参数,请参见 init 函数。

提前注意事项

建议在创建SPI对象的同时进行初始化。

machine_spi.init(baudrate=500000, polarity=0, phase=0, bits=8, firstbit=0)[源代码]

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

参数
  • baudrate – SCK的时钟频率。

  • polarity – 可为0或1,并为闲置时钟线所在的层级

  • phase – 可为0或1,分别对应第一和第二时钟脉冲边缘的采样数据。

  • bits – 为每次传输的位宽。所有硬件都支持的位宽为8位。

  • firstbit – 每次SPI传输先传输最高位还是最低位: 0为最高位,1为最低位

  • mode – SPI工作模式:0为从模式, 1为主模式

返回

None

引发

ValueError – EINVAL

machine_spi.deinit()[源代码]

关闭SPI总线。

参数

返回

None

machine_spi.read(nbytes, write=0)[源代码]

当持续写入由 write 给定的单个字节时,读取由 nbytes 指定的字节数。用读取的数据返回一个 bytes 对象。

参数

返回

ADC数值。

machine_spi.readinto(buf, write=0)[源代码]

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

参数

value – 衰减数值

返回

machine_spi.write(buf)[源代码]

写入buf内包含的字节。

参数

buf – 待写出数据的缓存

返回

真实写出的数据字节数

machine_spi.write_readinto(write_buf, read_buf)[源代码]

读取入 read_buf 时,从 write_buf 中写入字节。缓冲区可为相同或不同的,但须有相同长度。

参数
  • write_buf – 待写出数据缓存

  • read_buf – 待读入数据缓存

返回

真实写出的字节数