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 外设地址唯一,避免冲突(可通过
-
低功耗模式:
- 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)
五、参考资料
-
Air780EPM 硬件手册:获取 GPIO 复用表和 I2C 硬件参数。
-
LuatOS 官方文档:查询 I2C API 的具体用法(如
https://docs.openluat.com/air780epm/luatos/api/
)。
六、总结
在 Air780EPM 中使用 I2C 接口需注意硬件电平匹配、软件配置细节及低功耗模式下的复位问题。
通过合理设计和调试,可高效连接多种外设,扩展物联网应用功能。