GPIO I2C Master*
提示
- SDK 路径: http://gitlab.nationalchip.com/nationalchip/voice-wifi-solution/ovp_aiot
- App 路径: SDK 路径下 app/i2c_app/
- 适用芯片 8005/8006
1. 概述*
GPIO 模拟 I2C Master 示例 App,演示如何使用两个 GPIO 引脚模拟 I2C 总线时序,实现与 I2C 从设备的通信。适用于芯片硬件 I2C 资源不足或需要灵活定义引脚的场景。
2. 功能特性*
- GPIO 模拟 I2C Master 时序(SCL/SDA)
- 支持跨芯片移植(通过
port/目录下的移植接口) - 配套主/从测试程序,可用两块开发板进行通信验证
3. 目录结构*
app/i2c_app/
├── i2c_app.c # 主程序(测试程序)
├── app.mk # 编译配置
├── app.name # Kconfig 选项
├── gpio_i2c/
│ ├── gpio_i2c.c # GPIO 模拟 I2C 源文件
│ ├── gpio_i2c.h # GPIO 模拟 I2C 头文件
│ └── port/
│ ├── port.c # 芯片相关接口实现
│ └── port.h # 芯片相关接口头文件
└── test/
├── fornax_8006_dev_iic_master.zip # 主设备测试程序
└── lvp_8002_dev_iic_slave.zip # 从设备测试程序
| 文件 | 作用 |
|---|---|
i2c_app.c |
测试程序,验证 I2C 主设备通信 |
gpio_i2c/ |
GPIO 模拟 I2C 核心实现 |
gpio_i2c/port/ |
芯片移植层,迁移到其他芯片时需修改此目录 |
test/ |
预编译的测试程序,可直接烧录验证 |
4. 配置说明*
该 App 无额外 Kconfig 子配置。引脚定义在 gpio_i2c/port/port.h 中,根据开发板配置:
GX8006_dev_v1.0(主设备):
| 信号 | 引脚 |
|---|---|
| SCL | P8 |
| SDA | P14 |
8002_grus_dev_v1.4(从设备):
| 信号 | 引脚 |
|---|---|
| SCL | P04 |
| SDA | P03 |
5. 工作原理*
5.1 初始化流程*
- 配置 SCL、SDA 引脚为 GPIO 模式
- 初始化 GPIO I2C Master 状态机
- 开始与从设备的通信测试
5.2 事件处理*
app_event_response() 中处理 I2C 通信逻辑。
5.3 主循环*
app_task_loop() 中执行 I2C 通信的周期性任务。
6. 使用方法*
6.1 硬件准备*
- 主设备:
GX8006_dev_v1.0开发板 - 从设备:
8002_grus_dev_v1.4开发板 - 使用杜邦线连接两块开发板的 SCL、SDA 引脚
6.2 编译*
方案一(自行编译):
cp configs/example/app/8006_gpio_iic_app.config .config
make defconfig
make clean; make
方案二(直接使用预编译测试程序):
将 test/fornax_8006_dev_iic_master.zip 解压后烧录。
6.3 烧录运行*
cd tools/bootx/
./flash_nor.sh 0 -r 1000000
从设备烧录 test/lvp_8002_dev_iic_slave.zip。
6.4 串口监控*
将 GX8006_dev_v1.0 的串口 0 连接 PC,波特率 921600,观察日志输出。
7. 预期输出*
- 测试通过:日志中无
error错误信息 - 测试失败:日志中出现
error信息,需检查硬件连接和烧录
8. 注意事项*
- GPIO 模拟时序:GPIO 模拟的 I2C 速率低于硬件 I2C,不适用于高速通信场景
- 移植接口:迁移到其他芯片时需修改
gpio_i2c/port/port.c和port.h,实现引脚初始化和时序控制接口 - 上拉电阻:I2C 总线需外部上拉电阻,确保 SCL/SDA 空闲时为高电平
- 休眠/唤醒未实现:当前 SDK 不支持休眠功能,
app_suspend()和app_resume()保持空实现即可
9. 移植说明*
迁移到其他芯片时需修改以下文件:
| 文件 | 修改内容 |
|---|---|
gpio_i2c/port/port.c |
实现芯片相关的 GPIO 初始化、读写、延时等接口 |
gpio_i2c/port/port.h |
定义芯片相关的引脚宏和函数声明 |