Files
luban-lite-t3e-pro/packages/third-party/micropython-1.13.0/docs/spec-librarys/machine/SPI.md
2025-09-30 11:56:06 +08:00

97 lines
4.0 KiB
Markdown
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## machine.SPI
**machine.SPI** 类是 machine 模块下面的一个硬件类,用于对 SPI 的配置和控制,提供对 SPI 设备的操作方法。
- `SPI` 是一个由主机驱动的同步串行协议。在物理层,总线有三根:`SCK``MOSI``MISO`。多个设备可以共享同一总线,每个设备都由一个单独的信号 `SS` 来选中,也称片选信号。
- 主机通过片选信号选定一个设备进行通信。`SS` 信号的管理应该由用户代码负责。(通过 [machine.Pin](Pin.md)
### 构造函数
在 RT-Thread MicroPython 中 `SPI` 对象的构造函数如下:
#### **class machine.SPI**(id, ...)
在给定总线上构造一个 `SPI` 对象,`id` 取决于特定的移植。
如果想要使用软件 `SPI` , 即使用引脚模拟 `SPI` 总线,那么初始化的第一个参数需要设置为 `-1` ,可参考 [软件 SPI 示例](#spi) 。
使用硬件 `SPI` 在初始化时只需传入 `SPI` 设备的编号即可,如 '50' 表示 `SPI5` 总线上的第 0 个设备。初始化方式可参考 [硬件 SPI 示例](#spi_1)。
如果没有额外的参数,`SPI` 对象会被创建,但是不会被初始化,如果给出额外的参数,那么总线将被初始化,初始化参数可以参考下面的 `SPI.init` 方法。
### 方法
#### **SPI.init**(baudrate=1000000, \*, polarity=0, phase=0, bits=8, firstbit=SPI.MSB, sck=None, mosi=None, miso=None)
用给定的参数初始化`SPI`总线:
- **baudrate** `SCK` 时钟频率。
- **polarity** :极性可以是 `0``1`,是时钟空闲时所处的电平。
- **phase** :相位可以是 `0``1`,分别在第一个或者第二个时钟边缘采集数据。
- **bits** :每次传输的数据长度,一般是 8 位。
- **firstbit** :传输数据从高位开始还是从低位开始,可以是 `SPI.MSB` 或者 `SPI.LSB`
- **sck** :用于 `sck``machine.Pin` 对象。
- **mosi** :用于 `mosi``machine.Pin` 对象。
- **miso** :用于`miso``machine.Pin` 对象。
#### **SPI.deinit**()
关闭 `SPI` 总线。
#### **SPI.read**(nbytes, write=0x00)
读出 n 字节的同时不断的写入 `write` 给定的单字节。返回一个存放着读出数据的字节对象。
#### **SPI.readinto**(buf, write=0x00)
读出 n 字节到 `buf` 的同时不断地写入 `write` 给定的单字节。
这个方法返回读入的字节数。
#### **SPI.write**(buf)
写入 `buf` 中包含的字节。返回`None`
#### **SPI.write_readinto**(write_buf, read_buf)
在读出数据到 `readbuf` 时,从 `writebuf` 中写入数据。缓冲区可以是相同的或不同,但是两个缓冲区必须具有相同的长度。返回 `None`
### 常量
#### **SPI.MSB**
设置从高位开始传输数据。
#### **SPI.LSB**
设置从低位开始传输数据。
### 示例
#### 软件模拟 SPI
```
>>> from machine import Pin, SPI
>>> clk = Pin(("clk", 26), Pin.OUT_PP)
>>> mosi = Pin(("mosi", 27), Pin.OUT_PP)
>>> miso = Pin(("miso", 28), Pin.IN)
>>> spi = SPI(-1, 500000, polarity = 0, phase = 0, bits = 8, firstbit = 0, sck = clk, mosi = mosi, miso = miso)
>>> print(spi)
SoftSPI(baudrate=500000, polarity=0, phase=0, sck=clk, mosi=mosi, miso=miso)
>>> spi.write("hello rt-thread!")
>>> spi.read(10)
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
```
#### 硬件 SPI
需要先开启 `SPI` 设备驱动,查找设备可以在 `msh` 中输入`list_device` 命令。
在构造函数的第一个参数传入 `50`,系统就会搜索名为 `spi50` 的设备,找到之后使用这个设备来构建 `SPI` 对象:
```
>>> from machine import SPI
>>> spi = SPI(50)
>>> print(spi)
SPI(device port : spi50)
>>> spi.write(b'\x9f')
>>> spi.read(5)
b'\xff\xff\xff\xff\xff'
>>> buf = bytearray(1)
>>> spi.write_readinto(b"\x9f",buf)
>>> buf
bytearray(b'\xef')
>>> spi.init(100000,0,0,8,1) # Resetting SPI parameter
```
更多内容可参考 [machine.SPI](http://docs.micropython.org/en/latest/pyboard/library/machine.SPI.html) 。