ESP32 3.2.5 SPI
主模式 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()
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()
read_buf = bytearray(8)
spi.write_readinto (write_buf, read_buf)
print(read_buf)
```
# 宏
* SPI.MSB = 0 — 数据的第一位设置为最高有效位
* SPI.LSB = 1 — 数据的第一位设置为最低有效位
页:
[1]