class SPI – SPI通信

该类提供串行外设接口总线协议功能。

构造函数

machine.SPI

class machine.SPI(port, mode, clk, [group])

参数描述:

  • port - 通道选择[0,1],int类型。
  • mode - SPI 的工作模式,说明如下:
    时钟极性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 - 时钟频率,说明如下:
    EC600N/EC600S/EC800N/BG95M3/EC600M/EC800M/EG810M/EG912N/EC200A/EC600E/EC800E/EC800Z:
    0 : 812.5kHz
    1 : 1.625MHz
    2 : 3.25MHz
    3 : 6.5MHz
    4 : 13MHz
    5 : 26MHz(EC600E/EC800E/EC800Z不支持)
    6:52MHz(EC600E/EC800E/EC800Z不支持)
    EC600U/EC200U/EG915U:
    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
    BC25PA:
    0 :5MHz
    X : XMHz (X in [1,39])
    EC600G/EC800G:
    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
    FCM360W/FCM362K:
    0:500kHz
    1:1MHz
    2:5MHz
    3:10MHz
    4:20MHz
  • [group] - 选择在不同管脚使用spi,缺省值为0

BC25PA平台不支持1、2模式。

group参数目前仅EC600M/EC800M/EG810M系列支持,group = 1 不支持挂载 nor flash

52MHz时钟频率对硬件要求较高。

示例:

>>> from machine import SPI
>>> # 创建SPI对象
>>> spi_obj = SPI(1, 0, 1)

SPI引脚对应关系:

平台 引脚
EC600U port0:
CS:引脚号4
CLK:引脚号1
MOSI:引脚号3
MISO:引脚号2
port1:
CS:引脚号58
CLK:引脚号61
MOSI:引脚号59
MISO:引脚号60
EC200U port0:
CS:引脚号134
CLK:引脚号133
MOSI:引脚号132
MISO:引脚号131
port1:
CS:引脚号26
CLK:引脚号27
MOSI:引脚号24
MISO:引脚号25
EC600S/EC600N port0:
CS:引脚号58
CLK:引脚号61
MOSI:引脚号59
MISO:引脚号60
port1:
CS:引脚号4
CLK:引脚号1
MOSI:引脚号3
MISO:引脚号2
EC100Y port0:
CS:引脚号25
CLK:引脚号26
MOSI:引脚号27
MISO:引脚号28
port1:
CS:引脚号105
CLK:引脚号104
MOSI:引脚号107
MISO:引脚号106
EC800N port0:
CS:引脚号31
CLK:引脚号30
MOSI:引脚号32
MISO:引脚号33
port1:
CS:引脚号52
CLK:引脚号53
MOSI:引脚号50
MISO:引脚号51
BC25PA port0:
CS:引脚号6
CLK:引脚号5
MOSI:引脚号4
MISO:引脚号3
BG95 port0:
CS:引脚号25
CLK:引脚号26
MOSI:引脚号27
MISO:引脚号28
port1:
CS:引脚号41
CLK:引脚号40
MOSI:引脚号64
MISO:引脚号65
port2:
CS:引脚号19
CLK:引脚号18
MOSI:引脚号23
MISO:引脚号22
EC600M port0:
group=0:
CS:引脚号58
CLK:引脚号61
MOSI:引脚号59
MISO:引脚号60
group=1
CS:引脚号4
CLK:引脚号1
MOSI:引脚号3
MISO:引脚号2
port1:
group=0:
CS:引脚号4
CLK:引脚号1
MOSI:引脚号3
MISO:引脚号2
group=1:
CS:引脚号65
CLK:引脚号67
MOSI:引脚号66
MISO:引脚号63
port2:
CS:引脚号49
CLK:引脚号54
MOSI:引脚号53
MISO:引脚号52
EG915U port0:
CS:引脚号25
CLK:引脚号26
MOSI:引脚号64
MISO:引脚号88
port1:
CS:引脚号5
CLK:引脚号4
MOSI:引脚号6
MISO:引脚号7
EC800M/EG810M port0:
group=0:
CS:引脚号31
CLK:引脚号30
MOSI:引脚号32
MISO:引脚号33
group=1:
CS:引脚号52
CLK:引脚号53
MOSI:引脚号50
MISO:引脚号51
port1:
group=0:
CS:引脚号52
CLK:引脚号53
MOSI:引脚号50
MISO:引脚号51
group=1:(EG810M_EU不支持)
CS:引脚号69
CLK:引脚号68
MOSI:引脚号85
MISO:引脚号84
port2:
CS:引脚号76
CLK:引脚号77
MOSI:引脚号78
MISO:引脚号16
EG912N port0:
CS:引脚号25
CLK:引脚号26
MOSI:引脚号27
MISO:引脚号28
port1:
CS:引脚号5
CLK:引脚号4
MOSI:引脚号6
MISO:引脚号7
EC200A/UC200A port0:
CS:引脚号37
CLK:引脚号40
MOSI:引脚号38
MISO:引脚号39
port1:
CS:引脚号26
CLK:引脚号27
MOSI:引脚号25
MISO:引脚号24
EC600E port0:(EC600ECN_LE&LQ不可用)
CS:引脚号65
CLK:引脚号67
MOSI:引脚号66
MISO:引脚号64
port1:(EC600ECN_LE&LQ不可用)
CS:引脚号69
CLK:引脚号71
MOSI:引脚号70
MISO:引脚号72
EC800E port0:
CS:引脚号28
CLK:引脚号39
MOSI:引脚号29
MISO:引脚号38
port1:
CS:引脚号52
CLK:引脚号53
MOSI:引脚号50
MISO:引脚号51
注:EC800ECN_LE&LQ&CG port1 不可用
EC600G port0:
CS:引脚号4
CLK:引脚号1
MOSI:引脚号3
MISO:引脚号2
port1:
CS:引脚号53
CLK:引脚号52
MOSI:引脚号54
MISO:引脚号51
EC800G port1:
CS:引脚号79
CLK:引脚号101
MOSI:引脚号100
MISO:引脚号108
EG912U port0:(EG912UGLAA不可用)
CS:引脚号25
CLK:引脚号26
MOSI:引脚号64
MISO:引脚号88
port1:
CS:引脚号5
CLK:引脚号4
MOSI:引脚号6
MISO:引脚号7
EC600K port1:
CS:引脚号4
CLK:引脚号1
MOSI:引脚号3
MISO:引脚号2
port2:
CS:引脚号58
CLK:引脚号61
MOSI:引脚号59
MISO:引脚号60
EC800K/EG800K port0:
CS:引脚号31
CLK:引脚号30
MOSI:引脚号32
MISO:引脚号33
port1:
CS:引脚号52
CLK:引脚号53
MOSI:引脚号50
MISO:引脚号51
port2:
CS:引脚号74
CLK:引脚号75
MOSI:引脚号76
MISO:引脚号77
FCM360W port0:
CS:引脚号21
CLK:引脚号22
MOSI:引脚号29
MISO:引脚号23
FCM362K port0:
CS:引脚号29
CLK:引脚号30
MOSI:引脚号37
MISO:引脚号31
BC32 port0
CS:引脚号41
CLK:引脚号42
MOSI:引脚号43
MISO:引脚号44
BC92 port0
CS:引脚号41
CLK:引脚号42
MOSI:引脚号43
MISO:引脚号44
EG915N port0
CS:引脚号5
CLK:引脚号4
MOSI:引脚号6
MISO:引脚号7
EC800Z port0:
CS:引脚号49
CLK:引脚号29
MOSI:引脚号101
MISO:引脚号28
port1:
CS:引脚号52
CLK:引脚号53
MOSI:引脚号50
MISO:引脚号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)