class SPI – SPI通信
该类提供串行外设接口总线协议功能。
构造函数
machine.SPI
class machine.SPI(spi, mode, clk, [group])
参数描述:
-
spi- 通道选择[0,1],int类型。 -
mode- SPI 的工作模式,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- SPI 的工作模式,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:960kHz
1:4.8MHz
2:9.6MHz
3:16MHz
4:19.2MHz
5:25MHz
6:50MHz
50MHz时钟频率对硬件要求较高。
class machine.SPI(spi, mode, clk, [group])
参数描述:
-
spi- 通道选择[0,1],int类型。 -
mode- SPI 的工作模式,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:100kHz
1:200kHz
2:300MHz
3:400MHz
4:500MHz
5:600MHz
6:700MHz
7:812.5kHz
8:1.625MHz
9:3.25MHz
10:6.5MHz
11:13MHz
12:26MHz
13:52MHz
52MHz时钟频率对硬件要求较高。
class machine.SPI(spi, mode, clk, [group])
参数描述:
-
spi- 通道选择[0,1],int类型。 -
mode- SPI 的工作模式,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- SPI 的工作模式,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- SPI 的工作模式,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- SPI 的工作模式,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- SPI 的工作模式,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- SPI 的工作模式,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
class machine.SPI(spi, mode, clk)
参数描述:
-
spi- 通道选择[0,1],int类型。 -
mode- SPI 的工作模式,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~30:(1~30)*1MHz
示例:
>>> 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 |
引脚58 | 引脚61 | 引脚59 | 引脚60 |
|
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通道 | CS引脚 | CLK引脚 | MOSI引脚 | MISO引脚 |
|---|---|---|---|---|
| spi0 | 引脚86 | 引脚85 | 引脚88 | 引脚87 |
方法
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)