class SPI – SPI通信
该类提供串行外设接口总线协议功能。
构造函数
machine.SPI
class machine.SPI(spi, mode, clk, [group])
参数描述:
-
spi
- 通道选择[0,1],int类型。 -
mode
- I2C 的工作模式,int类型,说明如下:
时钟极性CPOL:即SPI空闲时,时钟信号SCLK的电平(0:空闲时低电平; 1:空闲时高电平)
0
:CPOL=0, CPHA=0
1
:CPOL=0, CPHA=1
2
:CPOL=1, CPHA=0
3
:CPOL=1, CPHA=1
-
clk
- 时钟频率,说明如下:
0
:812.5kHz
1
:1.625MHz
2
:3.25MHz
3
:6.5MHz
4
:13MHz
5
:26MHz
6
:52MHz
52MHz时钟频率对硬件要求较高。
class machine.SPI(spi, mode, clk, [group])
参数描述:
-
spi
- 通道选择[0,1],int类型。 -
mode
- I2C 的工作模式,int类型,说明如下:
时钟极性CPOL:即SPI空闲时,时钟信号SCLK的电平(0:空闲时低电平; 1:空闲时高电平)
0
:CPOL=0, CPHA=0
1
:CPOL=0, CPHA=1
2
:CPOL=1, CPHA=0
3
:CPOL=1, CPHA=1
-
clk
- 时钟频率,说明如下:
0
:812.5kHz
1
:1.625MHz
2
:3.25MHz
3
:6.5MHz
4
:13MHz
-
[group]
- 选择在不同管脚使用spi,缺省值为0。
1
:该组管脚不支持挂载 nor flash
class machine.SPI(spi, mode, clk, [group])
参数描述:
-
spi
- 通道选择[0,1],int类型。 -
mode
- I2C 的工作模式,int类型,说明如下:
时钟极性CPOL:即SPI空闲时,时钟信号SCLK的电平(0:空闲时低电平; 1:空闲时高电平)
0
:CPOL=0, CPHA=0
1
:CPOL=0, CPHA=1
2
:CPOL=1, CPHA=0
3
:CPOL=1, CPHA=1
-
clk
- 时钟频率,说明如下:
0
:812.5kHz
1
:1.625MHz
2
:3.25MHz
3
:6.5MHz
4
:13MHz
-
[group]
- 选择在不同管脚使用spi,缺省值为0。
0
:缺省值
1
:不支持挂载 nor flash
class machine.SPI(spi, mode, clk, [group])
参数描述:
-
spi
- 通道选择[0,1],int类型。 -
mode
- I2C 的工作模式,int类型,说明如下:
时钟极性CPOL:即SPI空闲时,时钟信号SCLK的电平(0:空闲时低电平; 1:空闲时高电平)
0
:CPOL=0, CPHA=0
1
:CPOL=0, CPHA=1
2
:CPOL=1, CPHA=0
3
:CPOL=1, CPHA=1
-
clk
- 时钟频率,说明如下:
0
:781.25KHz
1
:1.5625MHz
2
:3.125MHz
3
:5MHz
4
:6.25MHz
5
:10MHz
6
:12.5MHz
7
:20MHz
8
:25MHz
9
:33.33MHz
class machine.SPI(spi, mode, clk, [group])
参数描述:
-
spi
- 通道选择[0,1],int类型。 -
mode
- I2C 的工作模式,int类型,说明如下:
时钟极性CPOL:即SPI空闲时,时钟信号SCLK的电平(0:空闲时低电平; 1:空闲时高电平)
0
:CPOL=0, CPHA=0
3
:CPOL=1, CPHA=1
-
clk
- 时钟频率,说明如下:
0
:781.25KHz
X
:XMHz (X in [1,39])
class machine.SPI(spi, mode, clk, [group])
参数描述:
-
spi
- 通道选择[0,1],int类型。 -
mode
- I2C 的工作模式,int类型,说明如下:
时钟极性CPOL:即SPI空闲时,时钟信号SCLK的电平(0:空闲时低电平; 1:空闲时高电平)
0
:CPOL=0, CPHA=0
1
:CPOL=0, CPHA=1
2
:CPOL=1, CPHA=0
3
:CPOL=1, CPHA=1
-
clk
- 时钟频率,说明如下:
0
:97.656kHz
1
:100kHz
2
:812.5kHz
3
:1.3MHz
4
:1.625MHz
5
:2MHz
6
:3.25MHz
7
:4.333MHz
8
:6.6MHz
9
:11.93MHz
10
:13MHz
11
:13.92MHz
12
:16.7MHz
13
:20.875MHz
14
:27.83MHz
class machine.SPI(spi, mode, clk, [group])
参数描述:
-
spi
- 通道选择[0,1],int类型。 -
mode
- I2C 的工作模式,int类型,说明如下:
时钟极性CPOL:即SPI空闲时,时钟信号SCLK的电平(0:空闲时低电平; 1:空闲时高电平)
0
:CPOL=0, CPHA=0
1
:CPOL=0, CPHA=1
2
:CPOL=1, CPHA=0
3
:CPOL=1, CPHA=1
-
clk
- 时钟频率,说明如下:
0
:500kHz
1
:1MHz
2
:5MHz
3
:10MHz
4
:20MHz
示例:
>>> from machine import SPI
>>> # 创建SPI对象
>>> spi_obj = SPI(1, 0, 1)
SPI引脚对应关系:
SPI通道 | CS引脚 | CLK引脚 | MOSI引脚 | MISO引脚 |
---|---|---|---|---|
spi0 | 引脚4 | 引脚1 | 引脚3 | 引脚2 |
spi1 | 引脚58 | 引脚61 | 引脚59 | 引脚60 |
SPI通道 | CS引脚 | CLK引脚 | MOSI引脚 | MISO引脚 |
---|---|---|---|---|
spi0 | 引脚134 | 引脚133 | 引脚132 | 引脚131 |
spi1 | 引脚26 | 引脚27 | 引脚24 | 引脚25 |
SPI通道 | CS引脚 | CLK引脚 | MOSI引脚 | MISO引脚 |
---|---|---|---|---|
spi0 | 引脚31 | 引脚30 | 引脚32 | 引脚33 |
spi1 | 引脚52 | 引脚53 | 引脚50 | 引脚51 |
SPI通道 | CS引脚 | CLK引脚 | MOSI引脚 | MISO引脚 |
---|---|---|---|---|
spi0 | 引脚6 | 引脚5 | 引脚4 | 引脚3 |
SPI通道 | CS引脚 | CLK引脚 | MOSI引脚 | MISO引脚 |
---|---|---|---|---|
spi0 | 引脚25 | 引脚26 | 引脚27 | 引脚28 |
spi1 | 引脚41 | 引脚40 | 引脚64 | 引脚65 |
spi2 | 引脚19 | 引脚18 | 引脚23 | 引脚22 |
SPI通道 | CS引脚 | CLK引脚 | MOSI引脚 | MISO引脚 |
---|---|---|---|---|
spi0
group0 |
引脚25 | 引脚26 | 引脚27 | 引脚28 |
spi0
group1 |
引脚4 | 引脚1 | 引脚3 | 引脚2 |
spi1
group0 |
引脚4 | 引脚1 | 引脚3 | 引脚2 |
spi1
group1 |
引脚65 | 引脚67 | 引脚66 | 引脚63 |
spi2 | 引脚49 | 引脚54 | 引脚53 | 引脚52 |
SPI通道 | CS引脚 | CLK引脚 | MOSI引脚 | MISO引脚 |
---|---|---|---|---|
spi0 | 引脚25 | 引脚26 | 引脚64 | 引脚88 |
spi1 | 引脚5 | 引脚4 | 引脚6 | 引脚7 |
SPI通道 | CS引脚 | CLK引脚 | MOSI引脚 | MISO引脚 |
---|---|---|---|---|
spi0
group0 |
引脚31 | 引脚30 | 引脚32 | 引脚33 |
spi0
group1 |
引脚52 | 引脚53 | 引脚50 | 引脚51 |
spi1
group0 |
引脚52 | 引脚53 | 引脚50 | 引脚51 |
spi1
group1 |
引脚69 | 引脚68 | 引脚85 | 引脚84 |
spi2 | 引脚76 | 引脚77 | 引脚78 | 引脚16 |
SPI通道 | CS引脚 | CLK引脚 | MOSI引脚 | MISO引脚 |
---|---|---|---|---|
spi0
group0 |
引脚31 | 引脚30 | 引脚32 | 引脚33 |
spi0
group1 |
引脚52 | 引脚53 | 引脚50 | 引脚51 |
spi1
group0 |
引脚52 | 引脚53 | 引脚50 | 引脚51 |
spi1
group1(EG810M_EU不支持) |
引脚69 | 引脚68 | 引脚85 | 引脚84 |
spi2 | 引脚76 | 引脚77 | 引脚78 | 引脚16 |
SPI通道 | CS引脚 | CLK引脚 | MOSI引脚 | MISO引脚 |
---|---|---|---|---|
spi0 | 引脚25 | 引脚26 | 引脚27 | 引脚28 |
spi1 | 引脚5 | 引脚4 | 引脚6 | 引脚7 |
SPI通道 | CS引脚 | CLK引脚 | MOSI引脚 | MISO引脚 |
---|---|---|---|---|
spi0 | 引脚37 | 引脚40 | 引脚38 | 引脚39 |
spi1 | 引脚26 | 引脚27 | 引脚25 | 引脚24 |
SPI通道 | CS引脚 | CLK引脚 | MOSI引脚 | MISO引脚 |
---|---|---|---|---|
spi0 | 引脚37 | 引脚40 | 引脚38 | 引脚39 |
spi1 | 引脚26 | 引脚27 | 引脚25 | 引脚24 |
SPI通道 | CS引脚 | CLK引脚 | MOSI引脚 | MISO引脚 |
---|---|---|---|---|
spi0(EC600ECN_LE&LQ不可用) | 引脚65 | 引脚67 | 引脚66 | 引脚64 |
spi1 | 引脚69 | 引脚71 | 引脚70 | 引脚72 |
SPI通道 | CS引脚 | CLK引脚 | MOSI引脚 | MISO引脚 |
---|---|---|---|---|
spi0 | 引脚28 | 引脚39 | 引脚29 | 引脚38 |
spi1(EC800ECN_LE&LQ&CG不可用) | 引脚52 | 引脚53 | 引脚50 | 引脚51 |
SPI通道 | CS引脚 | CLK引脚 | MOSI引脚 | MISO引脚 |
---|---|---|---|---|
spi0 | 引脚4 | 引脚1 | 引脚3 | 引脚2 |
spi1(EC800ECN_LE&LQ&CG不可用) | 引脚53 | 引脚52 | 引脚54 | 引脚51 |
SPI通道 | CS引脚 | CLK引脚 | MOSI引脚 | MISO引脚 |
---|---|---|---|---|
spi1 | 引脚79 | 引脚101 | 引脚100 | 引脚108 |
SPI通道 | CS引脚 | CLK引脚 | MOSI引脚 | MISO引脚 |
---|---|---|---|---|
spi0(EG912UGLAA不可用) | 引脚25 | 引脚26 | 引脚64 | 引脚88 |
spi1 | 引脚5 | 引脚4 | 引脚6 | 引脚7 |
SPI通道 | CS引脚 | CLK引脚 | MOSI引脚 | MISO引脚 |
---|---|---|---|---|
spi1 | 引脚4 | 引脚1 | 引脚3 | 引脚2 |
spi2 | 引脚58 | 引脚61 | 引脚59 | 引脚60 |
SPI通道 | CS引脚 | CLK引脚 | MOSI引脚 | MISO引脚 |
---|---|---|---|---|
spi0 | 引脚31 | 引脚30 | 引脚32 | 引脚33 |
spi1 | 引脚52 | 引脚53 | 引脚50 | 引脚51 |
spi2 | 引脚74 | 引脚75 | 引脚76 | 引脚77 |
SPI通道 | CS引脚 | CLK引脚 | MOSI引脚 | MISO引脚 |
---|---|---|---|---|
spi0 | 引脚31 | 引脚30 | 引脚32 | 引脚33 |
spi1 | 引脚52 | 引脚53 | 引脚50 | 引脚51 |
spi2 | 引脚74 | 引脚75 | 引脚76 | 引脚77 |
SPI通道 | CS引脚 | CLK引脚 | MOSI引脚 | MISO引脚 |
---|---|---|---|---|
spi0 | 引脚21 | 引脚22 | 引脚29 | 引脚23 |
SPI通道 | CS引脚 | CLK引脚 | MOSI引脚 | MISO引脚 |
---|---|---|---|---|
spi0 | 引脚29 | 引脚30 | 引脚37 | 引脚31 |
SPI通道 | CS引脚 | CLK引脚 | MOSI引脚 | MISO引脚 |
---|---|---|---|---|
spi0 | 引脚41 | 引脚42 | 引脚43 | 引脚44 |
SPI通道 | CS引脚 | CLK引脚 | MOSI引脚 | MISO引脚 |
---|---|---|---|---|
spi0 | 引脚41 | 引脚42 | 引脚43 | 引脚44 |
SPI通道 | CS引脚 | CLK引脚 | MOSI引脚 | MISO引脚 |
---|---|---|---|---|
spi0 | 引脚5 | 引脚4 | 引脚6 | 引脚7 |
SPI通道 | CS引脚 | CLK引脚 | MOSI引脚 | MISO引脚 |
---|---|---|---|---|
spi0 | 引脚49 | 引脚29 | 引脚101 | 引脚28 |
spi1 | 引脚52 | 引脚53 | 引脚50 | 引脚51 |
方法
SPI.read
SPI.read(recv_data, datalen)
该方法用于读取数据。
参数描述:
-
recv_data
- 接收读取数据的数组,bytearray类型。 -
datalen
- 读取数据的长度,int类型。
返回值描述:
成功返回整型值
0
,失败返回整型值
-1
。
SPI.write
SPI.write(data, datalen)
该方法用于写入数据。
参数描述:
-
data
- 写入的数据,bytes类型。 -
datalen
- 写入的数据长度,int类型。
返回值描述:
成功返回整型值
0
,失败返回整型值
-1
。
SPI.write_read
SPI.write_read(r_data, data, datalen)
该方法用于写入和读取数据。
参数描述:
-
r_data
- 接收读取数据的数组,bytearray类型。 -
data
- 发送的数据,bytes类型。 -
datalen
- 读取数据的长度,int类型。
返回值描述:
成功返回整型值
0
,失败返回整型值
-1
。
SPI.close
SPI.close()
该方法用于关闭spi。
返回值描述:
成功返回整型值
0
,失败返回整型值
-1
。
使用示例:
需要配合外设使用!
import log
from machine import SPI
import utime
spi_obj = SPI(0, 0, 1)
# 设置日志输出级别
log.basicConfig(level=log.INFO)
spi_log = log.getLogger("SPI")
if __name__ == '__main__':
r_data = bytearray(5) # 创建接收数据的buff
data = b"world" # 测试数据
ret = spi_obj.write_read(r_data, data, 5) # 写入数据并接收
spi_log.info(r_data)