I2C Driver

[中文]

Overview

I2C (Inter-Integrated Circuit) is a two-wire serial bus supporting master/slave operations.

Functional Description

  • Multiple instances, master and slave modes

  • 7-bit/10-bit addressing, configurable speeds

  • Interrupts, timeouts, bus state queries

  • Memory read/write helpers for EEPROM-like devices

Development Guide

  1. Init: bk_i2c_driver_init(), then bk_i2c_init(id, &cfg)

  2. Master I/O: bk_i2c_master_write/read, bk_i2c_master_mem_write/read

  3. Slave I/O: bk_i2c_slave_write/read

  4. Status: bk_i2c_is_bus_busy, bk_i2c_get_*state

Notes

  • Verify pull-ups on SDA/SCL

  • Match target device speed and addressing

API Reference

  • bk_i2c_driver_init/deinit, bk_i2c_init/deinit

  • bk_i2c_master_write/read, bk_i2c_master_mem_write/read

  • bk_i2c_slave_write/read

  • bk_i2c_set_baud_rate, bk_i2c_set_slave_addr

  • bk_i2c_enable/disable_interrupt, bk_i2c_is_bus_busy

  • bk_i2c_get_current_action, bk_i2c_get_bus_state, bk_i2c_get_transaction_state

Examples

Read a register:

uint8_t reg = 0x10, val = 0;
bk_i2c_master_write(I2C_ID_0, 0x50, &reg, 1, 100);
bk_i2c_master_read(I2C_ID_0, 0x50, &val, 1, 100);

Error Codes

  • BK_ERR_I2C_NOT_INIT, BK_ERR_I2C_INVALID_ID, BK_ERR_I2C_ID_NOT_INIT