k230 I2C说明#

k230 I2C说明#

K230 芯片内部配备 5 个 I2C 硬件模块,可以配置为主或者从,支持标准 100 kb/s、快速 400 kb/s 以及高速 3.4 Mb/s 的通信模式。通道输出的 IO 配置请参考 IOMUX 模块。

I2C驱动代码说明:

串口代码路径

说明

src/rtsmart/rtsmart/kernel/bsp/maix3/drivers/interdrv/i2c/drv_i2c.c

k230 I2C 驱动

I2C驱动相关的配置说明:

配置

说明

RT_USING_I2C0

使能I2c0 模式 ,make rtsmart-menuconfig

RT_USING_I2C1

使能I2c1 模式,make rtsmart-menuconfig

RT_USING_I2C2

使能I2c2模式,make rtsmart-menuconfig

RT_USING_I2C3

使能I2c3 模式,make rtsmart-menuconfig

RT_USING_I2C4

使能I2c4 模式, make rtsmart-menuconfig

RT_USING_I2C0_SLAVE

使能I2c0 从模式 ,make rtsmart-menuconfig

RT_USING_I2C1_SLAVE

使能I2c1 从模式 ,make rtsmart-menuconfig

RT_USING_I2C2_SLAVE

使能I2c2 从模式 ,make rtsmart-menuconfig

RT_USING_I2C3_SLAVE

使能I2c3 从模式 ,make rtsmart-menuconfig

RT_USING_I2C4_SLAVE

使能I2c4 从模式 ,make rtsmart-menuconfig

i2c总线api说明#

POSIX 文件操作API#

i2c总线对应设备名字是 i2c0 i2c1 i2c3 i2c4,支持标准的 posix文件操作接口(open,close,ioctl等)。

ioctl设置#

int ioctl(int fildes, int cmd, ...)

支持的cmd,及cmd对应参数定义如下:

cmd

参数

说明

RT_I2C_DEV_CTRL_CLK

rt_uint32_t

设置i2c总线频率

RT_I2C_DEV_CTRL_RW

i2c_priv_data_t *

i2c总线读写

i2c_priv_data_t 结构体定义如下:

#define RT_I2C_DEV_CTRL_10BIT (0x800 + 0x01)
#define RT_I2C_DEV_CTRL_TIMEOUT (0x800 + 0x03)
#define RT_I2C_DEV_CTRL_RW (0x800 + 0x04)
#define RT_I2C_DEV_CTRL_CLK (0x800 + 0x05)

enum dm_i2c_msg_flags
{
    I2C_M_TEN           = 0x0010, /* ten-bit chip address */
    I2C_M_RD            = 0x0001, /* read data, from slave to master */
    I2C_M_STOP          = 0x8000, /* send stop after this message */
    I2C_M_NOSTART       = 0x4000, /* no start before this message */
    I2C_M_REV_DIR_ADDR  = 0x2000, /* invert polarity of R/W bit */
    I2C_M_IGNORE_NAK    = 0x1000, /* continue after NAK */
    I2C_M_NO_RD_ACK     = 0x0800, /* skip the Ack bit on reads */
    I2C_M_RECV_LEN      = 0x0400, /* length is first received byte */
    I2C_M_RESTART       = 0x0002, /* restart before this message */
    I2C_M_START         = 0x0004, /* start before this message */
};



typedef struct {
    uint16_t addr;
    uint16_t flags;
    uint16_t len;
    uint8_t *buf;
} i2c_msg_t;

typedef struct {
    i2c_msg_t *msgs;
    size_t number;
} i2c_priv_data_t;

i2c总线从设备API说明#

使能如下配置就可以把对应i2c总线配置为从设备,比如:如果使能RT_USING_I2C1_SLAVE,i2c1会配置成从设备,/dev目录下会创建i2c1_slave设备节点。

配置

说明

RT_USING_I2C0_SLAVE

使能I2c0 从模式 ,make rtsmart-menuconfig,i2c0_slave

RT_USING_I2C1_SLAVE

使能I2c1 从模式 ,make rtsmart-menuconfig,i2c1_slave

RT_USING_I2C2_SLAVE

使能I2c2 从模式 ,make rtsmart-menuconfig,i2c2_slave

RT_USING_I2C3_SLAVE

使能I2c3 从模式 ,make rtsmart-menuconfig,i2c3_slave

RT_USING_I2C4_SLAVE

使能I2c4 从模式 ,make rtsmart-menuconfig,i2c4_slave

POSIX 文件操作接口#

i2c做从设备时支持标准的 posix文件操作接口,比如open,close,read,write,ioctl等

ioctl设置#

int ioctl(int fildes, int cmd, ...)

支持的cmd,及cmd对应参数定义如下:

cmd

参数

说明

I2C_SLAVE_IOCTL_SET_ADDR

uint8_t

设置i2c从设备地址

I2C_SLAVE_IOCTL_SET_BUFFER_SIZE

uint32_t

设置i2c从设备寄存器长度

使用示例如下:

#define I2C_SLAVE_IOCTL_SET_BUFFER_SIZE               0
#define I2C_SLAVE_IOCTL_SET_ADDR                      1
 if(argc >= 3) {
        add = atoi(argv[2]);
        ret = ioctl(fd, I2C_SLAVE_IOCTL_SET_ADDR, &add);
        if (ret) {
            rt_kprintf("set add  %x failed!\n", add);
            return;
        }
    }
    if(argc >= 4) {
        size = atoi(argv[3]);
        ret = ioctl(fd, I2C_SLAVE_IOCTL_SET_BUFFER_SIZE, &size);
        if (ret) {
            rt_kprintf("set size  %d failed!\n", size);
            return;
        }
    }