Air780EPM SPI 硬件电路说明
一、SPI 基本概念
SPI(Serial Peripheral Interface)是一种高速的同步串行通信协议,常用于短距离、全双工设备间通信。
其特点包括:
- 四线制:CLK(时钟线)、MOSI(主设备输出/从设备输入)、MISO(主设备输入/从设备输出)、CS(从设备片选)。
- 全双工:支持同时发送和接收数据。
- 主从模式:一个主设备(Master)可控制多个从设备(Slave),通过片选信号(CS)选择目标设备。
在 Air780EPM 中,SPI 接口通过特定 GPIO 引脚实现,需结合 LuatOS 的 API 进行配置。
二、SPI 功能支持
Air780EPM 的 SPI 功能特性如下:
1. 硬件支持
-
接口数量:支持 4 路标准 4 线 SPI 接口;
- 1 路推荐用于 SPI LCD,
- 1 路推荐用于 SPI Camera,
- 1 路推荐用于 SPI 以太网,
- 1 路用户自定义使用。
-
用户自定义使用的 SPI 通道的 GPIO 映射关系:
- CLK(时钟线):GPIO35(VDD_EXT 电压域)。
- MOSI(主输出/从输入):GPIO34(VDD_EXT 电压域)。
- MISO(主输入/从输出):GPIO33(VDD_EXT 电压域)。
- CS(片选):GPIO32(VDD_EXT 电压域)。
-
电压兼容性:SPI 接口电压可通过
IO_SEL
引脚配置为 1.8V 或 3.3V,需注意与外设的电平匹配,否则需添加电平转换电路。
2. 软件支持
-
协议兼容性:支持标准 SPI 协议(主模式)。
-
工作模式:
- 主模式(Master):支持。
- 从模式(Slave):不支持(暂不支持)。
-
速率支持:
- 最大时钟频率:25.6MHz(需外设支持)。
- 典型应用频率:1MHz~10MHz(需根据外设能力调整)。
-
LuatOS API:
- 提供
spi.setup()
、spi.send()
、spi.receive()
等函数控制 SPI 通信。
- 提供
3. 功能特性
-
FIFO 和 DMA 支持:
- 支持 16 字节 FIFO 缓存,提升数据传输效率。
- 支持 DMA 模式,减少 CPU 占用率。
-
数据位数:支持 8 位、16 位等数据宽度(需外设匹配)。
三、开发注意事项
以下是使用 Air780EPM 和 LuatOS 进行 SPI 开发时的关键注意事项:
1. 硬件设计
-
信号线配置:
- 确保 SPI 引脚(CLK、MOSI、MISO、CS)正确连接,避免与其他复用功能(如 UART、I2C、PWM、GPIO 等)冲突。
-
电平匹配:
- 若外设为 5V 电平,需通过电平转换芯片(如 TXB0104)转换至 3.3V 或 1.8V,保持与 VDD_EXT 电平一致。
-
信号完整性:
- SPI 线需远离高频干扰源(如电源线、射频模块)。
- 高速通信时,SCLK 线长度应 ≤10cm,避免信号反射或延迟。
2. 软件配置
-
初始化步骤:
-- 配置SPI接口(ID=1,主模式,时钟频率1MHz,模式0(CPOL=0, CPHA=0)) spi.setup(1, 1e6, spi.MODE0) -- 模式0,根据外设需求选择
-
低功耗模式:
- SPI 接口在模块休眠时会掉电,需在唤醒后重新初始化。
3. 调试与常见问题
-
通信失败排查:
-
检查时钟频率:外设最大支持速率需 ≥ 配置速率(如外设仅支持 5MHz,需设置
spi.setup(1, 5e6, ...)
)。 -
数据格式匹配:确保 CPOL/CPHA 模式与外设一致(参考外设数据手册)。
-
CS 信号状态:确认 SS 引脚在通信期间保持低电平。
-
信号完整性:用示波器检查 CLK、MOSI、MISO 波形是否正常。
-
4. 其他关键点
-
GPIO 复用:
- 确保 SPI 引脚(GPIO32~35)未被其他功能(如 UART、I2C、PWM、GPIO 等)占用。
-
DMA 与 FIFO 优化:
- 高速传输时启用 DMA 模式:
- 避免FIFO溢出,需合理设置缓冲区大小。spi.set_dma(1, **true**) -- 开启 DMA 模式
-
固件版本:
- 使用支持SPI功能的LuatOS固件。
四、硬件电路示例
以Air780EPM上SPI接口的以太网芯片CH390H为例,说明SPI接口的常用用法;
1. 硬件电路
2. 软件代码
有关CH390H的代码太长,仅截取一段有关SPI0的代码作为示例;
LAN(CH390H)完整示例代码:demo/780EPM_1.3版本开发板 ch390h联网测试/lan/lan.lua · 合宙Luat/LuatOS-Air780EPM - Gitee.com
sys.taskInit(function ()
-- sys.wait(3000)
local result = spi.setup(
0,--串口 id
**nil**,
0,--CPHA
0,--CPOL
8,--数据宽度
25600000--,--频率
-- spi.MSB,--高低位顺序 可选,默认高位在前
-- spi.master,--主模式 可选,默认主
-- spi.full--全双工 可选,默认全双工
)
log.info("main", "open",result)
if result ~= 0 then--返回值为 0,表示打开成功
log.info("main", "spi open error",result)
return
end
五、参考资料
1. Air780EPM数据手册:获取GPIO复用表和SPI硬件参数。
2. LuatOS官方文档:查询SPI API的具体用法(如https://docs.openluat.com/air780epm/luatos/api/
)。
六、总结
在Air780EPM中使用SPI接口需注意硬件电平匹配、软件配置细节及低功耗模式下的复位问题。
通过合理设计和调试,可高效连接多种外设,扩展物联网应用功能。