跳转至

I2C

I2C (Inter-Integrated Circuit) 提供双线制串行总线通信功能,支持主机和从机模式下的数据收发。

头文件清单

#include "include/driver/i2c.h"

接口清单

接口名称 功能简述
uapi_i2c_master_init 根据指定参数初始化I2C为主机模式
uapi_i2c_master_write 主机模式下向目标从机写入数据
uapi_i2c_master_read 主机模式下从目标从机接收数据
uapi_i2c_master_writeread 主机模式下向从机发送数据并接收来自从机的数据
uapi_i2c_master_writeread_restart 主机模式下发送数据(有restart无stop)并接收来自从机的数据
uapi_i2c_master_writeread_with_flag 主机模式下发送并接收数据,支持stop/restart标志控制
uapi_i2c_slave_init 根据指定参数初始化I2C为从机模式
uapi_i2c_slave_write 从机模式下将数据发送给主机
uapi_i2c_slave_read 从机模式下从主机读取数据
uapi_i2c_set_irq_mode 设置I2C传输是否使用中断模式
uapi_i2c_register_irq_callback 注册I2C中断事件回调函数
uapi_i2c_unregister_irq_callback 取消注册I2C中断事件回调函数
uapi_i2c_slave_register_irq_callback 注册I2C从机中断事件回调函数
uapi_i2c_set_dma_mode 设置I2C传输是否使用DMA模式
uapi_i2c_deinit 去初始化I2C外设
uapi_i2c_set_baudrate 对已初始化的I2C重置波特率
uapi_i2c_suspend 挂起所有I2C通道
uapi_i2c_resume 恢复所有I2C通道

Functions

uapi_i2c_master_init

errcode_t uapi_i2c_master_init(i2c_bus_t bus, uint32_t baudrate, uint8_t hscode)

头文件清单

#include "include/driver/i2c.h"

功能说明

  • 根据指定参数初始化I2C为主机模式
  • 支持配置I2C波特率,包括标准模式、快速模式和高速模式
  • 支持配置高速模式主机码,每个主机有唯一的主机码

入参

名称 参数类型 详细说明 约束取值范围
bus i2c_bus_t I2C总线 I2C_BUS_0(0) / I2C_BUS_1(1) / I2C_BUS_2(2) / I2C_BUS_3(3) / I2C_BUS_NONE(4)
baudrate uint32_t I2C波特率,不能超过IP的上限:标准模式波特率上限100KHz;快速模式波特率上限400KHz;高速模式波特率上限3.4MHz 标准模式:0 ~ 100000;快速模式:0 ~ 400000;高速模式:0 ~ 3400000
hscode uint8_t I2C高速模式主机码,每个主机有自己唯一的主机码,仅在高速模式下需要配置 0 ~ 7

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 操作成功
Other 其他错误码,参考errcode_t 执行失败

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_I2C_SUPPORT_MASTER 功能宏 支持I2C主机模式功能 y

uapi_i2c_master_write

errcode_t uapi_i2c_master_write(i2c_bus_t bus, uint16_t dev_addr, i2c_data_t *data)

头文件清单

#include "include/driver/i2c.h"

功能说明

  • 主机模式下向目标从机写入数据
  • 支持手动切换模式(轮询、DMA、中断三种传输方式)和自动切换模式
  • 自动切换模式下根据数据长度与阈值比较自动选择轮询或DMA模式

前置条件

  • 调用时序约束:当前接口必须在 uapi_i2c_master_init() 成功返回后调用
  • 依赖关系:I2C主机模式已使能(CONFIG_I2C_SUPPORT_MASTER == 1)

入参

名称 参数类型 详细说明 约束取值范围
bus i2c_bus_t I2C总线 I2C_BUS_0(0) / I2C_BUS_1(1) / I2C_BUS_2(2) / I2C_BUS_3(3) / I2C_BUS_NONE(4)
dev_addr uint16_t 主机发送数据的目标从机地址 7比特地址范围 [0x08, 0x77];10比特地址范围 [0x7800, 0x7BFF]
data i2c_data_t * 发送数据的信息指针 不为NULL

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 操作成功
Other 其他错误码,参考errcode_t 执行失败

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_I2C_SUPPORT_MASTER 功能宏 支持I2C主机模式功能 y

uapi_i2c_master_read

errcode_t uapi_i2c_master_read(i2c_bus_t bus, uint16_t dev_addr, i2c_data_t *data)

头文件清单

#include "include/driver/i2c.h"

功能说明

  • 主机模式下从目标从机接收数据
  • 支持手动切换模式(轮询、DMA、中断三种传输方式)和自动切换模式
  • 自动切换模式下根据数据长度与阈值比较自动选择轮询或DMA模式

前置条件

  • 调用时序约束:当前接口必须在 uapi_i2c_master_init() 成功返回后调用
  • 依赖关系:I2C主机模式已使能(CONFIG_I2C_SUPPORT_MASTER == 1)

入参

名称 参数类型 详细说明 约束取值范围
bus i2c_bus_t I2C总线 I2C_BUS_0(0) / I2C_BUS_1(1) / I2C_BUS_2(2) / I2C_BUS_3(3) / I2C_BUS_NONE(4)
dev_addr uint16_t 主机接收数据的目标从机地址 7比特地址范围 [0x08, 0x77];10比特地址范围 [0x7800, 0x7BFF]
data i2c_data_t * 接收数据的信息指针 不为NULL

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 操作成功
Other 其他错误码,参考errcode_t 执行失败

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_I2C_SUPPORT_MASTER 功能宏 支持I2C主机模式功能 y

uapi_i2c_master_writeread

errcode_t uapi_i2c_master_writeread(i2c_bus_t bus, uint16_t dev_addr, i2c_data_t *data)

头文件清单

#include "include/driver/i2c.h"

功能说明

  • 主机模式下向目标从机发送数据并接收来自从机的数据
  • 支持手动切换模式(轮询、DMA、中断三种传输方式)和自动切换模式
  • 自动切换模式下根据数据长度与阈值比较自动选择轮询或DMA模式

前置条件

  • 调用时序约束:当前接口必须在 uapi_i2c_master_init() 成功返回后调用
  • 依赖关系:I2C主机模式已使能(CONFIG_I2C_SUPPORT_MASTER == 1)

入参

名称 参数类型 详细说明 约束取值范围
bus i2c_bus_t I2C总线 I2C_BUS_0(0) / I2C_BUS_1(1) / I2C_BUS_2(2) / I2C_BUS_3(3) / I2C_BUS_NONE(4)
dev_addr uint16_t 主机接收数据的目标从机地址 7比特地址范围 [0x08, 0x77];10比特地址范围 [0x7800, 0x7BFF]
data i2c_data_t * 收发数据的信息指针 不为NULL

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 操作成功
Other 其他错误码,参考errcode_t 执行失败

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_I2C_SUPPORT_MASTER 功能宏 支持I2C主机模式功能 y

uapi_i2c_master_writeread_restart

errcode_t uapi_i2c_master_writeread_restart(i2c_bus_t bus, uint16_t dev_addr, i2c_data_t *data)

头文件清单

#include "include/driver/i2c.h"

功能说明

  • 主机模式下向目标从机发送数据(发送时有restart无stop)并接收来自从机的数据
  • 支持手动切换模式(轮询、DMA、中断三种传输方式)和自动切换模式
  • 自动切换模式下根据数据长度与阈值比较自动选择轮询或DMA模式

前置条件

  • 调用时序约束:当前接口必须在 uapi_i2c_master_init() 成功返回后调用
  • 依赖关系:I2C主机模式已使能(CONFIG_I2C_SUPPORT_MASTER == 1)

入参

名称 参数类型 详细说明 约束取值范围
bus i2c_bus_t I2C总线 I2C_BUS_0(0) / I2C_BUS_1(1) / I2C_BUS_2(2) / I2C_BUS_3(3) / I2C_BUS_NONE(4)
dev_addr uint16_t 主机接收数据的目标从机地址 7比特地址范围 [0x08, 0x77];10比特地址范围 [0x7800, 0x7BFF]
data i2c_data_t * 收发数据的信息指针 不为NULL

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 操作成功
Other 其他错误码,参考errcode_t 执行失败

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_I2C_SUPPORT_MASTER 功能宏 支持I2C主机模式功能 y

uapi_i2c_master_writeread_with_flag

errcode_t uapi_i2c_master_writeread_with_flag(i2c_bus_t bus, uint16_t dev_addr,
                                               i2c_buffer_wrap_t *write_buffer,
                                               i2c_buffer_wrap_t *read_buffer)

头文件清单

#include "include/driver/i2c.h"

功能说明

  • 主机模式下向目标从机发送并接收数据,支持stop/restart标志控制
  • 支持手动切换模式(轮询、中断两种传输方式)和自动切换模式
  • 自动切换模式下根据数据长度与阈值比较自动选择轮询模式

前置条件

  • 调用时序约束:当前接口必须在 uapi_i2c_master_init() 成功返回后调用
  • 依赖关系:I2C主机模式已使能(CONFIG_I2C_SUPPORT_MASTER == 1)

入参

名称 参数类型 详细说明 约束取值范围
bus i2c_bus_t I2C总线 I2C_BUS_0(0) / I2C_BUS_1(1) / I2C_BUS_2(2) / I2C_BUS_3(3) / I2C_BUS_NONE(4)
dev_addr uint16_t 主机接收数据的目标从机地址 7比特地址范围 [0x08, 0x77];10比特地址范围 [0x7800, 0x7BFF]
write_buffer i2c_buffer_wrap_t * 发送数据的信息指针 不为NULL
read_buffer i2c_buffer_wrap_t * 接收数据的信息指针 不为NULL

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 操作成功
Other 其他错误码,参考errcode_t 执行失败

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_I2C_SUPPORT_MASTER 功能宏 支持I2C主机模式功能 y

uapi_i2c_slave_init

errcode_t uapi_i2c_slave_init(i2c_bus_t bus, uint32_t baudrate, uint16_t addr)

头文件清单

#include "include/driver/i2c.h"

功能说明

  • 根据指定参数初始化I2C为从机模式
  • 支持配置I2C波特率,需与主机保持一致
  • 支持配置7比特或10比特从机地址

入参

名称 参数类型 详细说明 约束取值范围
bus i2c_bus_t I2C总线 I2C_BUS_0(0) / I2C_BUS_1(1) / I2C_BUS_2(2) / I2C_BUS_3(3) / I2C_BUS_NONE(4)
baudrate uint32_t I2C波特率,需要与主机保持一致:标准模式波特率上限100KHz;快速模式波特率上限400KHz;高速模式波特率上限3.4MHz 标准模式:0 ~ 100000;快速模式:0 ~ 400000;高速模式:0 ~ 3400000
addr uint16_t I2C作为从机工作时的从机地址 7比特地址范围 [0x08, 0x77];10比特地址范围 [0x7800, 0x7BFF]

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 操作成功
Other 其他错误码,参考errcode_t 执行失败

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_I2C_SUPPORT_SLAVE 功能宏 支持I2C从机模式功能 y

uapi_i2c_slave_write

errcode_t uapi_i2c_slave_write(i2c_bus_t bus, i2c_data_t *data)

头文件清单

#include "include/driver/i2c.h"

功能说明

  • 从机模式下将数据发送给主机
  • 支持手动切换模式(轮询、DMA、中断三种传输方式)和自动切换模式
  • 自动切换模式下根据数据长度与阈值比较自动选择轮询或DMA模式

前置条件

  • 调用时序约束:当前接口必须在 uapi_i2c_slave_init() 成功返回后调用
  • 依赖关系:I2C从机模式已使能(CONFIG_I2C_SUPPORT_SLAVE == 1)

入参

名称 参数类型 详细说明 约束取值范围
bus i2c_bus_t I2C总线 I2C_BUS_0(0) / I2C_BUS_1(1) / I2C_BUS_2(2) / I2C_BUS_3(3) / I2C_BUS_NONE(4)
data i2c_data_t * 发送数据的信息指针 不为NULL

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 操作成功
Other 其他错误码,参考errcode_t 执行失败

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_I2C_SUPPORT_SLAVE 功能宏 支持I2C从机模式功能 y

uapi_i2c_slave_read

errcode_t uapi_i2c_slave_read(i2c_bus_t bus, i2c_data_t *data)

头文件清单

#include "include/driver/i2c.h"

功能说明

  • 从机模式下从主机读取数据
  • 支持手动切换模式(轮询、DMA、中断三种传输方式)和自动切换模式
  • 自动切换模式下根据数据长度与阈值比较自动选择轮询或DMA模式

前置条件

  • 调用时序约束:当前接口必须在 uapi_i2c_slave_init() 成功返回后调用
  • 依赖关系:I2C从机模式已使能(CONFIG_I2C_SUPPORT_SLAVE == 1)

入参

名称 参数类型 详细说明 约束取值范围
bus i2c_bus_t I2C总线 I2C_BUS_0(0) / I2C_BUS_1(1) / I2C_BUS_2(2) / I2C_BUS_3(3) / I2C_BUS_NONE(4)
data i2c_data_t * 接收数据的信息指针 不为NULL

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 操作成功
Other 其他错误码,参考errcode_t 执行失败

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_I2C_SUPPORT_SLAVE 功能宏 支持I2C从机模式功能 y

uapi_i2c_set_irq_mode

errcode_t uapi_i2c_set_irq_mode(i2c_bus_t bus, bool irq_en)

头文件清单

#include "include/driver/i2c.h"

功能说明

  • 设置I2C传输是否使用中断模式
  • 适用于已初始化为主机或从机模式的I2C
  • 中断模式下数据传输通过中断事件通知完成

前置条件

  • 调用时序约束:当前接口必须在 I2C 初始化为主机或从机模式后调用
  • 依赖关系:I2C中断传输功能已使能(CONFIG_I2C_SUPPORT_INT == 1)

入参

名称 参数类型 详细说明 约束取值范围
bus i2c_bus_t 指定的I2C接口 I2C_BUS_0(0) / I2C_BUS_1(1) / I2C_BUS_2(2) / I2C_BUS_3(3) / I2C_BUS_NONE(4)
irq_en bool 是否使用中断模式 true / false

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 操作成功
Other 其他错误码,参考errcode_t 执行失败

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_I2C_SUPPORT_INT 功能宏 支持I2C中断传输功能 n

uapi_i2c_register_irq_callback

errcode_t uapi_i2c_register_irq_callback(i2c_bus_t bus, i2c_irq_callback_t callback)

头文件清单

#include "include/driver/i2c.h"

功能说明

  • 注册I2C中断事件回调函数
  • 回调函数在中断上下文中执行
  • 支持处理接收完成、发送完成、总线忙、停止和错误等中断事件

前置条件

  • 调用时序约束:当前接口必须在 I2C 初始化为主机或从机模式后调用
  • 依赖关系:I2C中断传输功能已使能(CONFIG_I2C_SUPPORT_INT == 1)

入参

名称 参数类型 详细说明 约束取值范围
bus i2c_bus_t 指定的I2C接口 I2C_BUS_0(0) / I2C_BUS_1(1) / I2C_BUS_2(2) / I2C_BUS_3(3) / I2C_BUS_NONE(4)
callback i2c_irq_callback_t 事件回调函数,在中断上下文中被调用 不为NULL

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 操作成功
Other 其他错误码,参考errcode_t 执行失败

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_I2C_SUPPORT_INT 功能宏 支持I2C中断传输功能 n

uapi_i2c_unregister_irq_callback

errcode_t uapi_i2c_unregister_irq_callback(i2c_bus_t bus)

头文件清单

#include "include/driver/i2c.h"

功能说明

  • 取消已注册的I2C中断事件回调函数
  • 取消注册后不再接收I2C中断事件通知
  • 适用于已注册回调的I2C接口

前置条件

  • 调用时序约束:当前接口必须在通过 uapi_i2c_register_irq_callback() 注册过回调函数后调用
  • 依赖关系:I2C中断传输功能已使能(CONFIG_I2C_SUPPORT_INT == 1)

入参

名称 参数类型 详细说明 约束取值范围
bus i2c_bus_t 指定的I2C接口 I2C_BUS_0(0) / I2C_BUS_1(1) / I2C_BUS_2(2) / I2C_BUS_3(3) / I2C_BUS_NONE(4)

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 操作成功
Other 其他错误码,参考errcode_t 执行失败

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_I2C_SUPPORT_INT 功能宏 支持I2C中断传输功能 n

uapi_i2c_slave_register_irq_callback

errcode_t uapi_i2c_slave_register_irq_callback(i2c_bus_t bus, i2c_slave_callback_t *callback)

头文件清单

#include "include/driver/i2c.h"

功能说明

  • 注册I2C从机中断事件回调函数集合
  • 回调集合包含从机写、从机读和通用中断事件三个回调
  • 回调函数在中断上下文中执行

前置条件

  • 调用时序约束:当前接口必须在 uapi_i2c_slave_init() 成功返回后调用
  • 依赖关系:I2C中断传输功能已使能(CONFIG_I2C_SUPPORT_INT == 1)且从机模式已使能(CONFIG_I2C_SUPPORT_SLAVE == 1)

入参

名称 参数类型 详细说明 约束取值范围
bus i2c_bus_t 指定的I2C接口 I2C_BUS_0(0) / I2C_BUS_1(1) / I2C_BUS_2(2) / I2C_BUS_3(3) / I2C_BUS_NONE(4)
callback i2c_slave_callback_t * 指向从机回调结构体的指针 不为NULL

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 操作成功
Other 其他错误码,参考errcode_t 执行失败

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_I2C_SUPPORT_INT 功能宏 支持I2C中断传输功能 n
CONFIG_I2C_SUPPORT_SLAVE 功能宏 支持I2C从机模式功能 y

uapi_i2c_set_dma_mode

errcode_t uapi_i2c_set_dma_mode(i2c_bus_t bus, bool en)

头文件清单

#include "include/driver/i2c.h"

功能说明

  • 设置I2C传输是否使用DMA模式
  • 适用于已初始化为主机或从机模式的I2C
  • DMA模式下可实现大量数据传输而减少CPU占用

前置条件

  • 调用时序约束:当前接口必须在 I2C 初始化为主机或从机模式后调用
  • 依赖关系:I2C DMA传输功能已使能(CONFIG_I2C_SUPPORT_DMA == 1)

入参

名称 参数类型 详细说明 约束取值范围
bus i2c_bus_t 指定的I2C接口 I2C_BUS_0(0) / I2C_BUS_1(1) / I2C_BUS_2(2) / I2C_BUS_3(3) / I2C_BUS_NONE(4)
en bool 是否使能DMA传输 true / false

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 操作成功
Other 其他错误码,参考errcode_t 执行失败

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_I2C_SUPPORT_DMA 功能宏 支持I2C DMA传输功能 n

uapi_i2c_deinit

errcode_t uapi_i2c_deinit(i2c_bus_t bus)

头文件清单

#include "include/driver/i2c.h"

功能说明

  • 去初始化I2C外设
  • 支持主机和从机模式
  • 去初始化后释放I2C资源

前置条件

  • 调用时序约束:当前接口必须在 uapi_i2c_master_init() 或 uapi_i2c_slave_init() 成功返回后调用
  • 依赖关系:I2C外设已初始化

入参

名称 参数类型 详细说明 约束取值范围
bus i2c_bus_t I2C总线 I2C_BUS_0(0) / I2C_BUS_1(1) / I2C_BUS_2(2) / I2C_BUS_3(3) / I2C_BUS_NONE(4)

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 操作成功
Other 其他错误码,参考errcode_t 执行失败

uapi_i2c_set_baudrate

errcode_t uapi_i2c_set_baudrate(i2c_bus_t bus, uint32_t baudrate)

头文件清单

#include "include/driver/i2c.h"

功能说明

  • 对已初始化的I2C重置波特率
  • 支持主机和从机模式
  • 波特率不能超过IP的上限

前置条件

  • 调用时序约束:当前接口必须在 uapi_i2c_master_init() 或 uapi_i2c_slave_init() 成功返回后调用
  • 依赖关系:I2C外设已初始化

入参

名称 参数类型 详细说明 约束取值范围
bus i2c_bus_t I2C总线 I2C_BUS_0(0) / I2C_BUS_1(1) / I2C_BUS_2(2) / I2C_BUS_3(3) / I2C_BUS_NONE(4)
baudrate uint32_t I2C波特率,不能超过IP的上限:标准模式波特率上限100KHz;快速模式波特率上限400KHz;高速模式波特率上限3.4MHz 标准模式:0 ~ 100000;快速模式:0 ~ 400000;高速模式:0 ~ 3400000

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 操作成功
Other 其他错误码,参考errcode_t 执行失败

uapi_i2c_suspend

errcode_t uapi_i2c_suspend(uintptr_t arg)

头文件清单

#include "include/driver/i2c.h"

功能说明

  • 挂起所有I2C通道
  • 支持低功耗管理场景
  • 挂起后I2C通道停止工作

前置条件

  • 调用时序约束:当前接口必须在 I2C 初始化后调用
  • 依赖关系:I2C低功耗模式已使能(CONFIG_I2C_SUPPORT_LPM == 1)

入参

名称 参数类型 详细说明 约束取值范围
arg uintptr_t 挂起所需要的参数 -

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 操作成功
Other 其他错误码,参考errcode_t 执行失败

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_I2C_SUPPORT_LPM 功能宏 支持I2C低功耗模式功能 n

uapi_i2c_resume

errcode_t uapi_i2c_resume(uintptr_t arg)

头文件清单

#include "include/driver/i2c.h"

功能说明

  • 恢复所有I2C通道
  • 支持低功耗管理场景
  • 恢复后I2C通道可继续工作

前置条件

  • 调用时序约束:当前接口必须在 uapi_i2c_suspend() 成功返回后调用
  • 依赖关系:I2C低功耗模式已使能(CONFIG_I2C_SUPPORT_LPM == 1)

入参

名称 参数类型 详细说明 约束取值范围
arg uintptr_t 恢复所需要的参数 -

返回值

  • 返回类型:errcode_t
返回值 文字含义 触发场景
ERRCODE_SUCC(0x00) 执行成功 操作成功
Other 其他错误码,参考errcode_t 执行失败

Kconfig配置

配置项 宏类型 说明 默认值
CONFIG_I2C_SUPPORT_LPM 功能宏 支持I2C低功耗模式功能 n

Type definitions

errcode_t [SDK公共基础类型]

typedef uint32_t errcode_t;

使用说明

作为I2C模块所有返回errcode_t类型接口的返回值类型

i2c_irq_callback_t

typedef void (*i2c_irq_callback_t)(i2c_bus_t bus, uint8_t event);

使用说明

I2C中断事件回调函数,通过 uapi_i2c_register_irq_callback 注册到驱动中。调用时机:I2C中断触发时在中断上下文中调用。参数 event 为 I2C 中断事件值,参考 i2c_irq_event_t

i2c_slave_read_cb_t

typedef void (*i2c_slave_read_cb_t)(uint8_t *data, uint32_t length);

使用说明

I2C从机读回调函数。调用时机:当I2C从机接收到主机发送的数据时,在中断上下文中调用。参数 data 指向接收数据缓冲区,参数 length 为接收数据的字节数。

i2c_slave_write_cb_t

typedef uint32_t (*i2c_slave_write_cb_t)(uint8_t *data, uint32_t length);

使用说明

I2C从机写回调函数。调用时机:当I2C主机向从机请求数据时,在中断上下文中调用。回调函数需将待发送的数据填充到 data 指向的缓冲区,参数 length 为可写入的最大字节数,返回值为实际写入的字节数。

i2c_slave_event_cb_t

typedef void (*i2c_slave_event_cb_t)(i2c_irq_event_t event);

使用说明

I2C从机通用中断事件回调函数。调用时机:当I2C从机发生起始、停止或错误等中断事件时,在中断上下文中调用。参数 event 为 I2C 中断事件,参考 i2c_irq_event_t

i2c_buffer_wrap_t

typedef hal_i2c_buffer_wrap_t i2c_buffer_wrap_t;

使用说明

I2C缓存数据封装类型别名,底层类型为 hal_i2c_buffer_wrap_t。用于 uapi_i2c_master_writeread_with_flag 接口的 write_buffer 和 read_buffer 参数类型。

Enumerations

i2c_bus_t

typedef enum {
    I2C_BUS_0,
    I2C_BUS_1,
    I2C_BUS_2,
    I2C_BUS_3,
    I2C_BUS_NONE = I2C_BUS_MAX_NUM
} i2c_bus_t;
枚举成员 取值 描述
I2C_BUS_0 0 I2C总线0
I2C_BUS_1 1 I2C总线1
I2C_BUS_2 2 I2C总线2
I2C_BUS_3 3 I2C总线3
I2C_BUS_NONE 4 无效I2C总线

i2c_irq_event_t

typedef enum {
    I2C_IRQ_EVT_RX_DONE,
    I2C_IRQ_EVT_TX_DONE,
    I2C_IRQ_EVT_I2C_BUSY,
    I2C_IRQ_EVT_STOP,
    I2C_IRQ_EVT_I2C_ERR,
} i2c_irq_event_t;
枚举成员 取值 描述
I2C_IRQ_EVT_RX_DONE 0 接收完成
I2C_IRQ_EVT_TX_DONE 1 发送完成
I2C_IRQ_EVT_I2C_BUSY 2 I2C总线忙
I2C_IRQ_EVT_STOP 3 停止事件
I2C_IRQ_EVT_I2C_ERR 4 I2C错误

Structures

i2c_data_t

typedef struct i2c_data {
    uint8_t *send_buf;
    uint32_t send_len;
    uint8_t *receive_buf;
    uint32_t receive_len;
} i2c_data_t;

成员说明

成员名称 数据类型 描述
send_buf uint8_t * 发送数据的buffer指针
send_len uint32_t 发送数据的buffer长度
receive_buf uint8_t * 接收数据的buffer指针
receive_len uint32_t 接收数据的buffer长度

i2c_slave_callback_t

typedef struct i2c_slave_callback {
    i2c_slave_write_cb_t on_write;
    i2c_slave_read_cb_t on_read;
    i2c_slave_event_cb_t on_event;
} i2c_slave_callback_t;

成员说明

成员名称 数据类型 描述
on_write i2c_slave_write_cb_t 从机写回调函数
on_read i2c_slave_read_cb_t 从机读回调函数
on_event i2c_slave_event_cb_t 从机通用中断事件回调函数

hal_i2c_buffer_wrap_t

typedef struct hal_i2c_buffer_wrap {
    uint8_t *buffer;
    uint32_t len;
    uint32_t cmd_len;
    uint8_t stop_flag;
    uint8_t restart_flag;
    uint8_t reserved[2];
} hal_i2c_buffer_wrap_t;

成员说明

成员名称 数据类型 描述
buffer uint8_t * 缓存数据的buffer指针
len uint32_t 缓存数据Buffer的长度
cmd_len uint32_t 缓存剩余命令的长度
stop_flag uint8_t 缓存数据发送或者接收完成后是否要停止命令
restart_flag uint8_t 缓存数据发送或者接收是否要发重新开始命令
reserved uint8_t[2] 预留字段

Macros

ERRCODE_SUCC [SDK公共共享宏]

#define ERRCODE_SUCC             0UL