I2C
I2C 是两线制串行总线(SCL 时钟 + SDA 数据),采用主从模型,支持多设备挂载同一条总线。WS63 I2C 支持 Master 和 Slave 两种角色,提供中断和 DMA 两种传输模式。
Master 模式下写入/读取 Slave 设备数据;Slave 模式下响应 Master 的读写请求。适用 EEPROM、温湿度传感器、OLED 显示屏等外设通信。
头文件清单
接口清单
接口名称 功能简述 uapi_i2c_master_init 初始化I2C为主机模式 uapi_i2c_master_write 主机向目标从机写入数据 uapi_i2c_master_read 主机从目标从机读取数据 uapi_i2c_master_writeread 主机向目标从机写入数据并读取数据 uapi_i2c_slave_init 初始化I2C为从机模式 uapi_i2c_slave_write 从机向主机写入数据 uapi_i2c_slave_read 从机从主机读取数据 uapi_i2c_set_irq_mode 设置是否使用中断模式传输数据 uapi_i2c_register_irq_callback 注册I2C中断事件回调函数 uapi_i2c_unregister_irq_callback 取消注册I2C中断事件回调函数 uapi_i2c_set_dma_mode 使能/去使能DMA模式下I2C传输 uapi_i2c_deinit 去初始化I2C,支持主从机 uapi_i2c_set_baudrate 重置已初始化I2C的波特率 uapi_i2c_suspend 挂起所有I2C通道 uapi_i2c_resume 恢复所有I2C通道
Functions
uapi_i2c_master_init
头文件清单
功能说明
- 根据指定的参数初始化I2C为主机模式
- 支持标准模式(100KHz)、快速模式(400KHz)、高速模式(3.4MHz)三种波特率配置
- 高速模式下需配置唯一主机码,用于高速仲裁
前置条件
- I2C总线未被初始化(未被其他模块占用)
- 对应I2C引脚已通过pinctrl配置为I2C功能模式
入参
名称 参数类型 详细说明 约束取值范围 bus i2c_bus_t I2C总线编号 I2C_BUS_0, I2C_BUS_1 baudrate uint32_t I2C波特率 标准模式上限:100000; 快速模式上限:400000; 高速模式上限:3400000; 且不为0 hscode uint8_t I2C高速模式主机码 0 ~ 7,仅在高速模式下需要配置
返回值
返回值 文字含义 触发场景 ERRCODE_SUCC(0x0) 成功 初始化成功 Other 其他错误码,参考errcode_t 执行失败
参考案例
src/application/samples/peripheral/i2c/i2c_master_demo.c
Kconfig配置
配置项 宏类型 说明 默认值 CONFIG_I2C_SUPPORT_MASTER 功能宏 支持I2C主机功能 y CONFIG_I2C_SUPPORT_LPC 特性宏 支持低功耗时钟控制特性 n CONFIG_I2C_SUPPORT_INT 特性宏 支持中断模式传输特性 n CONFIG_I2C_SUPPORT_DMA 特性宏 支持DMA传输特性 n
uapi_i2c_master_write
头文件清单
功能说明
- 主机向目标从机写入数据
- 支持手动切换模式(轮询/DMA/中断)和自动切换模式(轮询与DMA自动切换),两种方式静态配置
- 自动切换模式下,数据长度小于等于阈值时使用轮询模式,大于阈值时自动切换为DMA模式
- 手动切换模式的三种传输模式不能在同一总线中同时使用
前置条件
- I2C已通过uapi_i2c_master_init()初始化为主机模式
- data指针非空,且send_buf非空,send_len大于0
入参
名称 参数类型 详细说明 约束取值范围 bus i2c_bus_t I2C总线编号 I2C_BUS_0, I2C_BUS_1 dev_addr uint16_t 目标从机地址 7比特地址范围[0x8, 0x77]; 10比特地址范围[0x7800, 0x7BFF] data i2c_data_t * 发送数据信息指针 非NULL,send_buf非NULL,send_len大于0
返回值
返回值 文字含义 触发场景 ERRCODE_SUCC(0x0) 成功 写入成功 Other 其他错误码,参考errcode_t 执行失败
参考案例
src/application/samples/peripheral/i2c/i2c_master_demo.c
Kconfig配置
配置项 宏类型 说明 默认值 CONFIG_I2C_SUPPORT_MASTER 功能宏 支持I2C主机功能 y CONFIG_I2C_SUPPORT_DMA 特性宏 支持DMA传输特性 n CONFIG_I2C_SUPPORT_POLL_AND_DMA_AUTO_SWITCH 特性宏 支持轮询与DMA自动切换特性 n CONFIG_I2C_SUPPORT_INT 特性宏 支持中断模式传输特性 n
uapi_i2c_master_read
头文件清单
功能说明
- 主机从目标从机读取数据
- 支持手动切换模式(轮询/DMA/中断)和自动切换模式(轮询与DMA自动切换),两种方式静态配置
- 自动切换模式下,数据长度小于等于阈值时使用轮询模式,大于阈值时自动切换为DMA模式
- 手动切换模式的三种传输模式不能在同一总线中同时使用
前置条件
- I2C已通过uapi_i2c_master_init()初始化为主机模式
- data指针非空,且receive_buf非空,receive_len大于0
入参
名称 参数类型 详细说明 约束取值范围 bus i2c_bus_t I2C总线编号 I2C_BUS_0, I2C_BUS_1 dev_addr uint16_t 目标从机地址 7比特地址范围[0x8, 0x77]; 10比特地址范围[0x7800, 0x7BFF] data i2c_data_t * 接收数据信息指针 非NULL,receive_buf非NULL,receive_len大于0
返回值
返回值 文字含义 触发场景 ERRCODE_SUCC(0x0) 成功 读取成功 Other 其他错误码,参考errcode_t 执行失败
参考案例
src/application/samples/peripheral/i2c/i2c_master_demo.c
Kconfig配置
配置项 宏类型 说明 默认值 CONFIG_I2C_SUPPORT_MASTER 功能宏 支持I2C主机功能 y CONFIG_I2C_SUPPORT_DMA 特性宏 支持DMA传输特性 n CONFIG_I2C_SUPPORT_POLL_AND_DMA_AUTO_SWITCH 特性宏 支持轮询与DMA自动切换特性 n CONFIG_I2C_SUPPORT_INT 特性宏 支持中断模式传输特性 n
uapi_i2c_master_writeread
头文件清单
功能说明
- 主机向目标从机写入数据并接收来自此从机的数据,在一次传输中完成写操作和读操作
- 支持手动切换模式(轮询/DMA/中断)和自动切换模式(轮询与DMA自动切换),两种方式静态配置
- 自动切换模式下,数据长度小于等于阈值时使用轮询模式,大于阈值时自动切换为DMA模式
- 手动切换模式的三种传输模式不能在同一总线中同时使用
前置条件
- I2C已通过uapi_i2c_master_init()初始化为主机模式
- data指针非空,且send_buf非空、send_len大于0,receive_buf非空、receive_len大于0
入参
名称 参数类型 详细说明 约束取值范围 bus i2c_bus_t I2C总线编号 I2C_BUS_0, I2C_BUS_1 dev_addr uint16_t 目标从机地址 7比特地址范围[0x8, 0x77]; 10比特地址范围[0x7800, 0x7BFF] data i2c_data_t * 收发数据信息指针 非NULL,send_buf非NULL且send_len大于0,receive_buf非NULL且receive_len大于0
返回值
返回值 文字含义 触发场景 ERRCODE_SUCC(0x0) 成功 写入并读取成功 Other 其他错误码,参考errcode_t 执行失败
Kconfig配置
配置项 宏类型 说明 默认值 CONFIG_I2C_SUPPORT_MASTER 功能宏 支持I2C主机功能 y CONFIG_I2C_SUPPORT_DMA 特性宏 支持DMA传输特性 n CONFIG_I2C_SUPPORT_POLL_AND_DMA_AUTO_SWITCH 特性宏 支持轮询与DMA自动切换特性 n CONFIG_I2C_SUPPORT_INT 特性宏 支持中断模式传输特性 n
uapi_i2c_slave_init
头文件清单
功能说明
- 根据指定的参数初始化I2C为从机模式
- 波特率需与主机保持一致
- 支持7比特地址和10比特地址两种寻址模式
前置条件
- I2C总线未被初始化(未被其他模块占用)
- 对应I2C引脚已通过pinctrl配置为I2C功能模式
入参
名称 参数类型 详细说明 约束取值范围 bus i2c_bus_t I2C总线编号 I2C_BUS_0, I2C_BUS_1 baudrate uint32_t I2C波特率,需与主机保持一致 标准模式上限:100000; 快速模式上限:400000; 高速模式上限:3400000; 且不为0 addr uint16_t 从机地址 7比特地址范围[0x8, 0x77]; 10比特地址范围[0x7800, 0x7BFF]
返回值
返回值 文字含义 触发场景 ERRCODE_SUCC(0x0) 成功 初始化成功 Other 其他错误码,参考errcode_t 执行失败
参考案例
src/application/samples/peripheral/i2c/i2c_slave_demo.c
Kconfig配置
配置项 宏类型 说明 默认值 CONFIG_I2C_SUPPORT_SLAVE 功能宏 支持I2C从机功能 y CONFIG_I2C_SUPPORT_LPC 特性宏 支持低功耗时钟控制特性 n CONFIG_I2C_SUPPORT_INT 特性宏 支持中断模式传输特性 n CONFIG_I2C_SUPPORT_DMA 特性宏 支持DMA传输特性 n
uapi_i2c_slave_write
头文件清单
功能说明
- 从机向主机写入数据
- 支持手动切换模式(轮询/DMA/中断)和自动切换模式(轮询与DMA自动切换),两种方式静态配置
- 自动切换模式下,数据长度小于等于阈值时使用轮询模式,大于阈值时自动切换为DMA模式
- 手动切换模式的三种传输模式不能在同一总线中同时使用
前置条件
- I2C已通过uapi_i2c_slave_init()初始化为从机模式
- data指针非空,且send_buf非空,send_len大于0
入参
名称 参数类型 详细说明 约束取值范围 bus i2c_bus_t I2C总线编号 I2C_BUS_0, I2C_BUS_1 data i2c_data_t * 发送数据信息指针 非NULL,send_buf非NULL,send_len大于0
返回值
返回值 文字含义 触发场景 ERRCODE_SUCC(0x0) 成功 写入成功 Other 其他错误码,参考errcode_t 执行失败
参考案例
src/application/samples/peripheral/i2c/i2c_slave_demo.c
Kconfig配置
配置项 宏类型 说明 默认值 CONFIG_I2C_SUPPORT_SLAVE 功能宏 支持I2C从机功能 y CONFIG_I2C_SUPPORT_DMA 特性宏 支持DMA传输特性 n CONFIG_I2C_SUPPORT_POLL_AND_DMA_AUTO_SWITCH 特性宏 支持轮询与DMA自动切换特性 n CONFIG_I2C_SUPPORT_INT 特性宏 支持中断模式传输特性 n
uapi_i2c_slave_read
头文件清单
功能说明
- 从机从主机读取数据
- 支持手动切换模式(轮询/DMA/中断)和自动切换模式(轮询与DMA自动切换),两种方式静态配置
- 自动切换模式下,数据长度小于等于阈值时使用轮询模式,大于阈值时自动切换为DMA模式
- 手动切换模式的三种传输模式不能在同一总线中同时使用
前置条件
- I2C已通过uapi_i2c_slave_init()初始化为从机模式
- data指针非空,且receive_buf非空,receive_len大于0
入参
名称 参数类型 详细说明 约束取值范围 bus i2c_bus_t I2C总线编号 I2C_BUS_0, I2C_BUS_1 data i2c_data_t * 接收数据信息指针 非NULL,receive_buf非NULL,receive_len大于0
返回值
返回值 文字含义 触发场景 ERRCODE_SUCC(0x0) 成功 读取成功 Other 其他错误码,参考errcode_t 执行失败
参考案例
src/application/samples/peripheral/i2c/i2c_slave_demo.c
Kconfig配置
配置项 宏类型 说明 默认值 CONFIG_I2C_SUPPORT_SLAVE 功能宏 支持I2C从机功能 y CONFIG_I2C_SUPPORT_DMA 特性宏 支持DMA传输特性 n CONFIG_I2C_SUPPORT_POLL_AND_DMA_AUTO_SWITCH 特性宏 支持轮询与DMA自动切换特性 n CONFIG_I2C_SUPPORT_INT 特性宏 支持中断模式传输特性 n
uapi_i2c_set_irq_mode
头文件清单
功能说明
- 设置是否使用中断模式传输数据
- 使能中断模式后,I2C传输通过中断回调方式完成数据收发
- 去使能中断模式后,I2C传输切换为轮询模式
前置条件
- I2C已通过uapi_i2c_master_init()或uapi_i2c_slave_init()初始化完成
入参
名称 参数类型 详细说明 约束取值范围 bus i2c_bus_t I2C总线编号 I2C_BUS_0, I2C_BUS_1 irq_en bool 是否使用中断模式 true: 使能中断模式; false: 去使能中断模式
返回值
返回值 文字含义 触发场景 ERRCODE_SUCC(0x0) 成功 设置成功 Other 其他错误码,参考errcode_t 执行失败
参考案例
src/application/samples/peripheral/i2c/i2c_master_demo.csrc/application/samples/peripheral/i2c/i2c_slave_demo.c
Kconfig配置
配置项 宏类型 说明 默认值 CONFIG_I2C_SUPPORT_INT 功能宏 支持I2C中断模式功能 n
uapi_i2c_register_irq_callback
头文件清单
功能说明
- 注册I2C中断事件回调函数
- 回调函数在中断上下文中执行,需注意执行时效性
- 回调函数接收总线编号和中断事件类型参数
前置条件
- I2C已通过uapi_i2c_master_init()或uapi_i2c_slave_init()初始化完成
- 已通过uapi_i2c_set_irq_mode()使能中断模式
入参
名称 参数类型 详细说明 约束取值范围 bus i2c_bus_t I2C总线编号 I2C_BUS_0, I2C_BUS_1 callback i2c_irq_callback_t 中断事件回调函数 非NULL
返回值
返回值 文字含义 触发场景 ERRCODE_SUCC(0x0) 成功 注册成功 Other 其他错误码,参考errcode_t 执行失败
Kconfig配置
配置项 宏类型 说明 默认值 CONFIG_I2C_SUPPORT_INT 功能宏 支持I2C中断模式功能 n
uapi_i2c_unregister_irq_callback
头文件清单
功能说明
- 取消注册I2C中断事件回调函数
- 取消注册后,I2C中断事件不再触发用户回调
前置条件
- I2C已通过uapi_i2c_master_init()或uapi_i2c_slave_init()初始化完成
- 已通过uapi_i2c_register_irq_callback()注册过回调函数
入参
名称 参数类型 详细说明 约束取值范围 bus i2c_bus_t I2C总线编号 I2C_BUS_0, I2C_BUS_1
返回值
返回值 文字含义 触发场景 ERRCODE_SUCC(0x0) 成功 取消注册成功 Other 其他错误码,参考errcode_t 执行失败
Kconfig配置
配置项 宏类型 说明 默认值 CONFIG_I2C_SUPPORT_INT 功能宏 支持I2C中断模式功能 n
uapi_i2c_set_dma_mode
头文件清单
功能说明
- 使能/去使能DMA模式下I2C传输
- 使能DMA模式后,I2C传输通过DMA方式完成数据搬移
- 去使能DMA模式后,I2C传输切换为轮询模式
前置条件
- I2C已通过uapi_i2c_master_init()或uapi_i2c_slave_init()初始化完成
- DMA模块已通过uapi_dma_init()初始化并已打开
入参
名称 参数类型 详细说明 约束取值范围 bus i2c_bus_t I2C总线编号 I2C_BUS_0, I2C_BUS_1 en bool 是否使能DMA传输 true: 使能DMA模式; false: 去使能DMA模式
返回值
返回值 文字含义 触发场景 ERRCODE_SUCC(0x0) 成功 设置成功 Other 其他错误码,参考errcode_t 执行失败
Kconfig配置
配置项 宏类型 说明 默认值 CONFIG_I2C_SUPPORT_DMA 功能宏 支持I2C DMA模式功能 n
uapi_i2c_deinit
头文件清单
功能说明
- 去初始化I2C,支持主从机模式
- 释放I2C总线占用的硬件资源,注销中断,销毁互斥锁和信号量
- 去初始化后I2C总线不可使用,需重新初始化后方可使用
前置条件
- I2C已通过uapi_i2c_master_init()或uapi_i2c_slave_init()初始化完成
入参
名称 参数类型 详细说明 约束取值范围 bus i2c_bus_t I2C总线编号 I2C_BUS_0, I2C_BUS_1
返回值
返回值 文字含义 触发场景 ERRCODE_SUCC(0x0) 成功 去初始化成功 Other 其他错误码,参考errcode_t 执行失败
Kconfig配置
配置项 宏类型 说明 默认值 CONFIG_I2C_SUPPORT_INT 特性宏 支持中断模式传输特性 n CONFIG_I2C_SUPPORT_LPC 特性宏 支持低功耗时钟控制特性 n
uapi_i2c_set_baudrate
头文件清单
功能说明
- 对已初始化的I2C重置波特率,支持主从机模式
- 主机模式下重新调用hal_i2c_master_init更新波特率,从机模式下重新调用hal_i2c_slave_init更新波特率
- 波特率不能超过IP上限
前置条件
- I2C已通过uapi_i2c_master_init()或uapi_i2c_slave_init()初始化完成
入参
名称 参数类型 详细说明 约束取值范围 bus i2c_bus_t I2C总线编号 I2C_BUS_0, I2C_BUS_1 baudrate uint32_t I2C波特率 标准模式上限:100000; 快速模式上限:400000; 高速模式上限:3400000; 且不为0
返回值
返回值 文字含义 触发场景 ERRCODE_SUCC(0x0) 成功 设置成功 Other 其他错误码,参考errcode_t 执行失败
uapi_i2c_suspend
头文件清单
功能说明
- 挂起所有I2C通道
- 用于低功耗模式场景,挂起I2C外设运行
前置条件
- I2C模块已初始化
入参
名称 参数类型 详细说明 约束取值范围 arg uintptr_t 挂起所需要的参数 -
返回值
返回值 文字含义 触发场景 ERRCODE_SUCC(0x0) 成功 挂起成功 Other 其他错误码,参考errcode_t 执行失败
Kconfig配置
配置项 宏类型 说明 默认值 CONFIG_I2C_SUPPORT_LPM 功能宏 支持I2C低功耗模式功能 n
uapi_i2c_resume
头文件清单
功能说明
- 恢复所有I2C通道
- 用于低功耗模式场景,恢复I2C外设运行
前置条件
- I2C已通过uapi_i2c_suspend()挂起
入参
名称 参数类型 详细说明 约束取值范围 arg uintptr_t 恢复所需要的参数 -
返回值
返回值 文字含义 触发场景 ERRCODE_SUCC(0x0) 成功 恢复成功 Other 其他错误码,参考errcode_t 执行失败
Kconfig配置
配置项 宏类型 说明 默认值 CONFIG_I2C_SUPPORT_LPM 功能宏 支持I2C低功耗模式功能 n
Type definitions
i2c_irq_callback_t
使用说明:I2C中断事件回调函数类型,通过uapi_i2c_register_irq_callback()注册到驱动中,在中断上下文中执行。bus为I2C总线编号,event为中断事件类型,参考i2c_irq_event_t。
Enumerations
i2c_bus_t
typedef enum {
I2C_BUS_0, // !< I2C0
I2C_BUS_1, // !< I2C1
I2C_BUS_NONE = I2C_BUS_MAX_NUMBER
} i2c_bus_t;
枚举成员 取值 描述 I2C_BUS_0 0 I2C总线0 I2C_BUS_1 1 I2C总线1 I2C_BUS_NONE I2C_BUS_MAX_NUMBER 无效/未使用的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_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_I2C_ERR 3 I2C传输错误事件
Structures
i2c_data_t
typedef struct i2c_data {
uint8_t *send_buf; /*!< 发送数据的buffer指针。 */
uint32_t send_len; /*!< 发送数据的buffer长度。 */
uint8_t *receive_buf; /*!< 接收数据的buffer指针。 */
uint32_t receive_len; /*!< 接收数据的buffer长度。 */
} i2c_data_t;
成员说明:
成员名称 数据类型 描述 send_buf uint8_t * 发送数据的buffer指针 send_len uint32_t 发送数据的buffer长度 receive_buf uint8_t * 接收数据的buffer指针 receive_len uint32_t 接收数据的buffer长度
i2c_wait_condition_t
typedef struct i2c_wait_condition {
uint32_t evt_mask; /*!< 等待事件条件,如果不成立会引起任务调度,释放cpu占用。 */
uint32_t ctrl_mask; /*!< 等待控制条件,如果不成立一直轮询,不释放cpu占用。 */
} i2c_wait_condition_t;
成员说明:
成员名称 数据类型 描述 evt_mask uint32_t 等待事件条件掩码,条件不成立时引起任务调度释放CPU ctrl_mask uint32_t 等待控制条件掩码,条件不成立时持续轮询不释放CPU