跳转至

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. 调试与常见问题

  • 通信失败排查:

    1. 检查时钟频率:外设最大支持速率需 ≥ 配置速率(如外设仅支持 5MHz,需设置 spi.setup(1, 5e6, ...))。

    2. 数据格式匹配:确保 CPOL/CPHA 模式与外设一致(参考外设数据手册)。

    3. CS 信号状态:确认 SS 引脚在通信期间保持低电平。

    4. 信号完整性:用示波器检查 CLK、MOSI、MISO 波形是否正常。

4. 其他关键点

  • GPIO 复用:

    • 确保 SPI 引脚(GPIO32~35)未被其他功能(如 UART、I2C、PWM、GPIO 等)占用。
  • DMA 与 FIFO 优化:

    • 高速传输时启用 DMA 模式:

    spi.set_dma(1, **true**)  -- 开启 DMA 模式
    
    - 避免FIFO溢出,需合理设置缓冲区大小。

  • 固件版本:

    • 使用支持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接口需注意硬件电平匹配、软件配置细节及低功耗模式下的复位问题。

通过合理设计和调试,可高效连接多种外设,扩展物联网应用功能。