I2C HAL 接口文档#
硬件介绍#
K230 共有 5 路 i2c,i2c 模块支持主从模式,支持7/10比特寻址,支持中断,i2c 模块传输速率支持100k/400k/1M/3.4M。
数据结构说明#
drv_i2c_inst_t#
描述:I2C 主机实例结构体,包含 I2C 配置和状态信息。
i2c_msg_t#
描述:I2C 消息结构体。
addr:设备地址flags:传输标志(读/写、10位地址等)len:数据长度buf:数据缓冲区指针
drv_i2c_slave_inst_t#
描述:I2C 从机实例结构体。
I2C 传输标志#
DRV_I2C_WR:写操作DRV_I2C_RD:读操作DRV_I2C_ADDR_10BIT:10 位地址模式DRV_I2C_NO_START:不发送起始信号DRV_I2C_IGNORE_NACK:忽略 NACKDRV_I2C_NO_READ_ACK:读取时不发送 ACKDRV_I2C_NO_STOP:不发送停止信号
I2C 主机模式接口#
int drv_i2c_inst_create(int id, uint32_t freq, uint32_t timeout_ms, uint8_t scl, uint8_t sda, drv_i2c_inst_t** inst);#
功能:创建 I2C 主机实例。
参数:
id:I2C 编号,0-4 为硬件 I2C,大于 4 为软件 I2Cfreq:I2C 时钟频率(Hz)timeout_ms:超时时间(毫秒)scl:SCL 引脚编号(软件 I2C 时有效,需小于 64)sda:SDA 引脚编号(软件 I2C 时有效,需小于 64)inst:用于存储创建的 I2C 实例指针
返回值:
0:成功-1:失败
void drv_i2c_inst_destroy(drv_i2c_inst_t** inst);#
功能:销毁 I2C 主机实例,释放资源。
参数:
inst:I2C 实例指针的指针
int drv_i2c_set_7b_addr(drv_i2c_inst_t* inst);#
功能:设置 I2C 为 7 位地址模式。
参数:
inst:I2C 实例指针
返回值:
0:成功-1:失败
int drv_i2c_set_10b_addr(drv_i2c_inst_t* inst);#
功能:设置 I2C 为 10 位地址模式。
参数:
inst:I2C 实例指针
返回值:
0:成功-1:失败
int drv_i2c_set_freq(drv_i2c_inst_t* inst, uint32_t freq);#
功能:设置 I2C 时钟频率。
参数:
inst:I2C 实例指针freq:时钟频率(Hz)
返回值:
0:成功-1:失败
int drv_i2c_set_timeout(drv_i2c_inst_t* inst, uint32_t timeout_ms);#
功能:设置 I2C 超时时间。
参数:
inst:I2C 实例指针timeout_ms:超时时间(毫秒)
返回值:
0:成功-1:失败
int drv_i2c_transfer(drv_i2c_inst_t* inst, i2c_msg_t* msgs, int msg_cnt);#
功能:执行 I2C 传输操作。
参数:
inst:I2C 实例指针msgs:消息数组msg_cnt:消息数量
返回值:
0:成功-1:失败
I2C 主机属性获取函数#
以下函数用于获取 I2C 主机实例的各种属性:
uint32_t drv_i2c_master_get_type(drv_i2c_inst_t* inst);- 获取 I2C 类型(硬件/软件)int drv_i2c_master_get_id(drv_i2c_inst_t* inst);- 获取 I2C 编号int drv_i2c_master_get_fd(drv_i2c_inst_t* inst);- 获取文件描述符uint32_t drv_i2c_master_get_freq(drv_i2c_inst_t* inst);- 获取时钟频率uint32_t drv_i2c_master_get_timeout_ms(drv_i2c_inst_t* inst);- 获取超时时间uint8_t drv_i2c_master_get_pin_scl(drv_i2c_inst_t* inst);- 获取 SCL 引脚编号uint8_t drv_i2c_master_get_pin_sda(drv_i2c_inst_t* inst);- 获取 SDA 引脚编号
I2C 从机模式接口#
int drv_i2c_slave_inst_create(int id, uint32_t buffer_size, uint16_t slave_address, uint8_t scl, uint8_t sda, drv_i2c_slave_inst_t** inst);#
功能:创建 I2C 从机实例。
参数:
id:I2C 编号buffer_size:缓冲区大小slave_address:从机地址scl:SCL 引脚编号sda:SDA 引脚编号inst:用于存储创建的从机实例指针
返回值:
0:成功-1:失败
I2C 从机属性获取函数#
int drv_i2c_slave_get_id(drv_i2c_slave_inst_t* inst);- 获取 I2C 编号int drv_i2c_slave_get_fd(drv_i2c_slave_inst_t* inst);- 获取文件描述符uint8_t drv_i2c_slave_get_pin_scl(drv_i2c_slave_inst_t* inst);- 获取 SCL 引脚编号uint8_t drv_i2c_slave_get_pin_sda(drv_i2c_slave_inst_t* inst);- 获取 SDA 引脚编号uint32_t drv_i2c_slave_get_buffer_size(drv_i2c_slave_inst_t* inst);- 获取缓冲区大小uint16_t drv_i2c_slave_get_slave_address(drv_i2c_slave_inst_t* inst);- 获取从机地址
使用示例#
请参考src/rtsmart/libs/testcases/rtsmart_hal/test_i2c_ssd1306.c
注意事项:
使用硬件 I2C 前需要通过 FPIOA 配置相应引脚功能
