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)