class SPI – SPI通信
2024-10-21
该类提供串行外设接口总线协议功能。
构造函数
machine.SPI
class machine.SPI(port, mode, clk, [group])
参数描述:
port
- 通道选择[0,1],int类型。mode
- SPI 的工作模式,说明如下:
时钟极性CPOL:即SPI空闲时,时钟信号SCLK的电平(0:空闲时低电平; 1:空闲时高电平)0
: CPOL=0, CPHA=01
: CPOL=0, CPHA=12
: CPOL=1, CPHA=03
: CPOL=1, CPHA=1clk
- 时钟频率,说明如下:
EC600N/EC600S/EC800N/BG95M3/EC600M/EC800M/EG810M/EG912N/EC200A/EC600E/EC800E/EC800Z:0
: 812.5kHz1
: 1.625MHz2
: 3.25MHz3
: 6.5MHz4
: 13MHz5
: 26MHz(EC600E/EC800E/EC800Z不支持)6
:52MHz(EC600E/EC800E/EC800Z不支持)
EC600U/EC200U/EG915U:0
: 781.25KHz1
: 1.5625MHz2
: 3.125MHz3
: 5MHz4
: 6.25MHz5
: 10MHz6
: 12.5MHz7
: 20MHz8
: 25MHz9
: 33.33MHz
BC25PA:0
:5MHzX
: 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)