I2C - 10-bit

本 demo 主要介绍 I2C 10-bit slave 模式数据传输。

硬件连接

本 demo 使用到的 gpio 参考 board_i2c0_gpio_init ,将 USB 转 I2C 模块与开发板连接,具体引脚连接方式如下表(以BL616为例):

硬件连接

开发板 I2C 引脚

USB 转 I2C 模块

SCL(GPIO14)

SCL

SDA(GPIO15)

SDA

软件实现

更详细的代码请参考 examples/peripherals/i2c/i2c_10_bit

1board_init();
  • board_init 中会开启 I2C IP 时钟,并选择 I2C 时钟源和分频。

1board_i2c0_gpio_init();
  • 配置相关引脚为 I2C 功能

1i2c0 = bflb_device_get_by_name("i2c0");
2
3bflb_i2c_init(i2c0, 400000);
  • 获取 i2c0 句柄,并初始化 i2c0 频率为 400K

 1struct bflb_i2c_msg_s msgs[2];
 2uint8_t subaddr[2] = { 0x00, 0x04};
 3uint8_t write_data[I2C_10BIT_TRANSFER_LENGTH];
 4
 5/* Write buffer init */
 6write_data[0] = 0x55;
 7write_data[1] = 0x11;
 8write_data[2] = 0x22;
 9for (size_t i = 3; i < I2C_10BIT_TRANSFER_LENGTH; i++) {
10    write_data[i] = i;
11}
12
13/* Write data */
14msgs[0].addr = I2C_10BIT_SLAVE_ADDR;
15msgs[0].flags = I2C_M_NOSTOP | I2C_M_TEN;
16msgs[0].buffer = subaddr;
17msgs[0].length = 2;
18
19msgs[1].addr = I2C_10BIT_SLAVE_ADDR;
20msgs[1].flags = 0;
21msgs[1].buffer = write_data;
22msgs[1].length = I2C_10BIT_TRANSFER_LENGTH;
23
24bflb_i2c_transfer(i2c0, msgs, 2);
  • 初始化发送数据(write_data)和配置从设备信息(msgs)

  • bflb_i2c_transfer(i2c0, msgs, 2) 开启 i2c 传输

编译和烧录

参考 环境搭建

实验现象

通过串口(波特率大于115200)发送``04 00 06 01 03 55``命令给 USB 转 I2C 模块,设置 I2C 从机 10-bit 模式数据传输。 按下开发板中 RST 按键,串口打印开发板发送的 write_data 数据。