物联网AI MicroPython学习之语法 SPI串行外设通信
学物联网,来万物简单IoT物联网!!
SPI 介绍
- 模块功能:
SPI串行外设驱动
接口说明
SPI - 构建SPI对象
- 函数原型:SPI(id, baudrate,polarity, phase,sck, mosi, miso)
- 参数说明:
参数 | 类型 | 必选参数? | 说明 |
---|---|---|---|
id | int | Y | spi通道,可为1或2 |
baudrate | int | N | spi 波特率 |
polarity | int | N | spi极性 polarity是指 SCK 空闲时候的状态 |
phase | enum | N | spi相位 phase=0 表示SCK在第1个边沿开始取样 phase=1 表示SCK在第2个边沿开始取样 |
sck | object | Y | sck引脚对象 |
mosi | object | Y | mosi引脚对象 |
miso | object | Y | miso引脚对象 |
- 返回值:
构建的SPI对象。
SoftSPI - 构建软SPI对象
- 函数原型:SoftSPI(baudrate,polarity, phase,sck, mosi, miso)
- 参数说明:
参数 | 类型 | 必选参数? | 说明 |
---|---|---|---|
baudrate | int | N | spi 波特率 |
polarity | int | N | spi极性 polarity是指 SCK 空闲时候的状态 |
phase | enum | N | spi相位 phase=0 表示SCK在第1个边沿开始取样 phase=1 表示SCK在第2个边沿开始取样 |
sck | object | Y | sck引脚对象 |
mosi | object | Y | mosi引脚对象 |
miso | object | Y | miso引脚对象 |
- 返回值:
构建的软SPI对象。
read - 从SPI接收指定字节数的数据
- 函数原型:read(size)
- 参数说明:
参数 | 类型 | 必选参数? | 说明 |
---|---|---|---|
size | int | Y | 读取指定字节长度数据 |
- 返回值:
buffer - 读取的数据区,长度为参数size
write - 从SPI发送指定字节数的数据
- 函数原型:write(buffer)
- 参数说明:
参数 | 类型 | 必选参数? | 说明 |
---|---|---|---|
buffer | array[] | Y | 发送数据的缓冲区,期待发送的字节数为buffer的长度 |
- 返回值:
无
readinto - 从SPI接收指定字节数的数据,并放在缓冲区
- 函数原型:readinto(buffer)
- 参数说明:
参数 | 类型 | 必选参数? | 说明 |
---|---|---|---|
buffer | array[] | Y | 读取数据并存放在缓冲区 |
- 返回值:
buffer - 读取的数据区,长度为参数size
write_readinto - SPI先发送数据再接收数据
- 函数原型:write_readinto(sendbuf, recvbuf)
- 参数说明:
参数 | 类型 | 必选参数? | 说明 |
---|---|---|---|
sendbuf | array[] | Y | 发送数据的存储数组,期待发送的字节数为sendbuf的长度。 |
recvbuf | array[] | Y | 接收数据的存储数组,期待接收的字节数为recvbuf的长度。 |
- 返回值:
无 - 案例代码
from machine import Pin, SoftSPI, SPI
# 软SPI创建对象
spi = SoftSPI(baudrate=100000, polarity=1, phase=0, sck=Pin(0), mosi=Pin(2), miso=Pin(4))
# 硬件SPI创建对象
spi = SPI(1, 10000000, sck=Pin(14), mosi=Pin(13), miso=Pin(12))
buf = bytearray(10) # 建立缓冲区
buf = spi.read(10) # 读取10字节数据
spi.readinto(buf) # 读取数据并存放在缓冲区 (这里读取10个字节)
spi.write(b'12345') # 在MOSI引脚上写5字节数据
sendbuf = bytearray(40) # 建立缓冲区
recvbuf = bytearray(40) # 建立缓冲区
spi.write_readinto(sendbuf, recvbuf) # 先发送再接收数据