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)

型号选择: