主模式 SPI串口通信,在物理层需要4根信号线: SCK,MOSI, MISO、CS(片选)。
类
class SPI(baudrate, polarity, phase, bits, firtbit, sck, mosi, miso)
baudrate:SCK时钟频率
0 < baudrate ≤ 0x0FFFFFFF (十进制:0 < baudrate ≤ 2147483647)
polarity:极性
0 — 时钟空闲时候的电平是低电平,所以当SCLK有效的时候,就是高电平
1 — 时钟空闲时候的电平是高电平,所以当SCLK有效的时候,就是低电平
phase:相位
0 — 在第一时钟沿采样数据
1 — 在第二时钟沿采样数据
bits:传输数据位数
firtbit:数据传输的第一位(高位或低位)
sck, mosi, miso:spi总线引脚。
Pin(0)、Pin(2)、Pin(4)、Pin(5)、Pin(9)、Pin(16~19)、Pin(21~23)、Pin(25~27)
定义SPI对象
示例:
from machine import SPI, Pin
spi = SPI(baudrate=100000, polarity=1, phase=0, sck=Pin(17), mosi=Pin(27), miso=Pin(18))
类函数
1. SPI.init(baudrate, polarity, phase, sck, mosi, miso)
函数说明:初始化SPI总线 。
baudrate:SCK时钟频率
0 < baudrate ≤ 0x0FFFFFFF (十进制:0 < baudrate ≤ 2147483647)
polarity:极性
0 — 时钟空闲时候的电平是低电平,所以当SCLK有效的时候,就是高电平
1 — 时钟空闲时候的电平是高电平,所以当SCLK有效的时候,就是低电平
phase:相位
0 — 在第一时钟沿采样数据
1 — 在第二时钟沿采样数据
sck, mosi, miso:spi总线引脚。
Pin(0)、Pin(2)、Pin(4)、Pin(5)、Pin(9)、Pin(16~19)、Pin(21~23)、Pin(25~27)
示例:
spi = SPI.init(baudrate=100000, polarity=1, phase=0, sck=Pin(17), mosi=Pin(27), miso=Pin(18))
2. SPI.deinit()
函数说明:关闭SPI。
示例:
spi.deinit()
3. SPI.write(buf)
函数说明:将 buf 中的所有数据写入到总线。
示例:
buf = bytearray([1,2,3,4,5,6,7,8])
spi.write(buf)
4. SPI.read(len, data=0x00)
函数说明:读取len个数据的同时写入len个data数据,以数组的形式返回读取到的数据。
len: 需要读取的字节长度
data: 写入的单字节数据
示例:
buf=bytearray(2) #申请长度为2的缓冲区
buf = spi.read(2, 0x00)
5. SPI.readinto(buf, data=0x00)
函数说明:读取buf.len个数据并存入buf中,同时写入buf.len个data数据,函数返回None。
buf: 数据缓冲区
data: 写入的单字节数据
6. SPI.write_readinto(write_buf, read_buf)
函数说明:写入write_buf并读取到 read_buf,写入并读取的长度为buf长度,要求两个缓冲区长度相同。
write_buf: 写数据缓冲区
read_buf: 读数据缓冲区
示例:
write_buf = bytearray([1, 2, 3, 4, 5, 6, 7, 8])
read_buf = bytearray(8)
spi.write_readinto (write_buf, read_buf)
print(read_buf)
宏
- SPI.MSB = 0 — 数据的第一位设置为最高有效位
- SPI.LSB = 1 — 数据的第一位设置为最低有效位