SPI设备
# 简介
SPI是串行外设接口(Serial Peripheral Interface)的缩写。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,SDI(数据输入),SDO(数据输出),SCLK(时钟),CS(片选),就可以完成一个主设备和一个或多个从设备之间的通信,事实上3根也可以(单向传输时)。在嵌入式系统中,主要应用于EEPROM,FLASH,实时时钟,AD转换器,数字信号处理器和数字信号解码器之间的通信,在全双工模式下,传输速率可达上Mbps的水平。
---
合宙Cat.1模块SPI接口可以作为主器件或从器件,与带外部UART串口的设备进行数据之间的相互通信,进行数据接收和发送,达到相互控制的目的。
-- ---
# SPI的库由底层core实现,相关API接口如下:
|API接口| 描述|
| --- | --- |
|spi.setup| SPI初始化配置|
|spi.send()|SPI写数据|
|spi.recv()|SPI读数据|
|spi.send_recv()|SPI读写数据|
|spi.close()|关闭SPI通信|
> 详细的API介绍见[LuatOS-Air core API](https://doc.openluat.com/wiki/21?wiki_page_id=2249 "LuatOS-Air core API")章节
# SPI通信使用示例
SPI通信的具体使用方式可以参考如下示例代码,示例代码的主要步骤如下:
1. 配置SPI接口函数,即设置选择所对应的端口id,通信时钟速率等。
2. 可以直接调用|spi.send()和spi.recv()进行对数据的读写操作。
```lua
module(...,package.seeall)
require"utils"
require"pm"
pm.wake("wake11")
require"pins"
local result = spi.setup(spi.SPI_1,0,0,8,800000,1)--初始化spi,
log.info("spi1",spi.SPI_1)
log.info("testSpiFlash.init",result)
local s = string.fromHex("9f000000000000")
sys.taskInit(function ()
sys.wait(5000)
while true do
log.info("testSpiFlash.readFlashID",spi.send_recv(spi.SPI_1,s):toHex())--收发读写
--下面方法和上面的等价
log.info("testSpiFlash.sendCommand",spi.send(spi.SPI_1,string.char(0x9f)))--发数据
log.info("testSpiFlash.readFlashID",spi.recv(spi.SPI_1,6):toHex())--收数据
sys.wait(200)
end
spi.close(spi.SPI_1)
end)
```
# 硬件设计
见硬件设计指南 [SPI接口 章节](https://hmi.wiki.luatos.com/doc/65042949/e6zPC3k9/3t5hqI1A)