跳转至

GPIO I2C Master*

提示

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 初始化流程*

  1. 配置 SCL、SDA 引脚为 GPIO 模式
  2. 初始化 GPIO I2C Master 状态机
  3. 开始与从设备的通信测试

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. 注意事项*

  1. GPIO 模拟时序:GPIO 模拟的 I2C 速率低于硬件 I2C,不适用于高速通信场景
  2. 移植接口:迁移到其他芯片时需修改 gpio_i2c/port/port.cport.h,实现引脚初始化和时序控制接口
  3. 上拉电阻:I2C 总线需外部上拉电阻,确保 SCL/SDA 空闲时为高电平
  4. 休眠/唤醒未实现:当前 SDK 不支持休眠功能,app_suspend()app_resume() 保持空实现即可

9. 移植说明*

迁移到其他芯片时需修改以下文件:

文件 修改内容
gpio_i2c/port/port.c 实现芯片相关的 GPIO 初始化、读写、延时等接口
gpio_i2c/port/port.h 定义芯片相关的引脚宏和函数声明