跳转至

Air780EPM I2C 硬件电路说明

一、I2C 基本概念

I2C(Inter-Integrated Circuit)是一种串行通信协议,主要用于短距离、低速(通常为 100kHz 至 400kHz)的设备间通信。其特点包括:

  • 双线制:仅需两根信号线(SCL 时钟线、SDA 数据线)。
  • 多主从架构:支持一个主设备(Master)与多个从设备(Slave)通信。
  • 地址寻址:每个从设备有唯一的 7 位或 10 位地址。

在 Air780EPM 中,I2C 接口通过特定的 GPIO 引脚复用实现,需结合 LuatOS 的 API 进行配置。


二、I2C 功能支持

Air780EPM 的 I2C 功能特性如下:

1. 硬件支持

  • 接口数量:支持 2 路通用 I2C 接口,I2C0 和 I2C1 ,其中,推荐优先选择 I2C1 。

  • GPIO 映射:

    • I2C1_SCL(时钟线):GPIO67(VDD_EXT 电压域)。

    • I2C1_SDA(数据线):GPIO66(VDD_EXT 电压域)。

  • 电压兼容性:I2C 接口电压可通过 IO_SEL 引脚配置为 1.8V 或 3.3V,需注意与外设的电平匹配,否则需添加电平转换电路。

2. 软件支持

  • 协议兼容性:支持 Philips I2C 标准协议。

  • 工作模式:

    • 主模式(Master):支持。

    • 从模式(Slave):不支持。

  • 速率支持:

    • 标准模式:100kHz。

    • 快速模式:400kHz。

    • 高速模式:1MHz。

  • LuatOS API:

    • 提供 i2c.setup()i2c.send()i2c.receive() 等函数控制 I2C 通信。

3. 功能特性

  • FIFO 和 DMA 支持:支持 16 字节 FIFO 缓存和 DMA 模式,提升数据传输效率。

三、开发注意事项

以下是使用 Air780EPM 和 LuatOS 进行 I2C 开发时的关键注意事项:

1. 硬件设计

  • 上拉电阻:

    • 默认需外接上拉电阻(4.7kΩ~10kΩ)。

    • 注意:若外设已内置上拉电阻,需避免重复配置导致冲突。

  • 电平匹配:

    • 若外设为 5V 电平,需通过电平转换芯片(如 TXS0108)转换至 3.3V 或 1.8V,与 VDD_EXT 保持一致。
  • 信号完整性:

    • I2C 线需远离高频干扰源(如电源线、射频模块)。

    • 线路长度不宜过长(建议 ≤30cm),否则可能引入信号反射或延迟。

2. 软件配置

  • 初始化步骤:
-- 配置I2C接口(ID=1,速率=400kHz)
i2c.setup(1, i2c.FAST)
  • 地址冲突检测:

    • 确保所有 I2C 外设地址唯一,避免冲突(可通过 i2c.scan() 扫描总线设备)。
  • 低功耗模式:

    • I2C 接口为普通 GPIO 类型,在模块休眠时会掉电,需在唤醒后重新初始化。

3. 调试与常见问题

  • 通信失败排查:

  • 检查上拉电阻:确保 SDA/SCL 有上拉。

  • 总线电平状态:用示波器确认 SCL/SDA 未被异常拉低。

  • 速率匹配:外设最大支持速率需 ≥ 配置速率。

  • 地址错误:使用 i2c.scan() 验证从设备地址。

  • 时序问题:确保 SCL 为高电平时,SDA 无变化(避免仲裁冲突)。

  • 示例代码(读取 SHT20 温湿度传感器):

-- 初始化I2C
i2c.setup(1, i2c.FAST, **true**)

-- 读取温度命令(0xE3)
local addr = 0x4A  -- SHT20地址(7位)
i2c.send(1, addr, string.char(0xE3))
-- 延迟等待数据准备
sys.wait(100)
-- 读取数据
local data = i2c.receive(1, addr, 3)
print("Raw Data: " .. sformat(data))

4. 其他关键点

  • GPIO 复用:

    • 以 I2C 为例,确保 GPIO66(SDA)和 GPIO67(SCL)未被其他功能(如 GPIO、PWM)占用。
  • 固件版本:

    • 使用支持 I2C 功能的 LuatOS 固件。
  • 驱动能力限制:

    • 总线电容负载需 ≤400pF,否则可能影响通信稳定性。

四、硬件设计举例

我们以 Air780EPM 开发板上的 Camera 为例,说明 I2C1 在设计时所涉及到的软硬件知识;

1. 硬件电路

2. 软件代码

有关 Camera 的代码太长,仅截取一段有关 I2C1 的代码作为示例;

Camera 完整示例代码:demo/780EPM_1.3 版本开发板全功能测试/camera780epm.lua · 合宙 Luat/LuatOS-Air780EPM - Gitee.com

sys.taskInit(function()
    log.info("摄像头启动")
    -- spi的id和摄像头的id 
    local cspiId, i2cId = 1, 1
    local camera_id
    -- 配置iic
    i2c.setup(i2cId, i2c.FAST)

五、参考资料

  1. Air780EPM 硬件手册:获取 GPIO 复用表和 I2C 硬件参数。

  2. LuatOS 官方文档:查询 I2C API 的具体用法(如 https://docs.openluat.com/air780epm/luatos/api/)。


六、总结

在 Air780EPM 中使用 I2C 接口需注意硬件电平匹配、软件配置细节及低功耗模式下的复位问题。

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