I2C使用参考

Version 1.4


1. 概述

SSD20x提供两组HW I2C, 如下表:(实际使用请参考硬件HW提供的Hw_Checklist):

第一组HW I2C GROUP0的配置可选择如上4种其中一种, 对应节点是/dev/i2c-0。

第二组HW I2C GROUP1的配置可选择如上5种其中一种, 对应节点是/dev/i2c-1。

BUS DEV MODE SCL SDA
HW I2C GROUP0 /dev/i2c-0 MODE1 PAD_HDMITX_SCL PAD_HDMITX_SDA
MODE2 PAD_TTL1 PAD_TTL2
MODE3 PAD_TTL14 PAD_TTL15
MODE4 PAD_GPIO6 PAD_GPIO7
HW I2C GROUP1 /dev/i2c-1 MODE1 PAD_GPIO2 PAD_GPIO3
MODE2 PAD_HDMITX_SCL PAD_HDMITX_SDA
MODE3 PAD_FUART_CTS PAD_FUART_RTS
MODE4 PAD_TTL22 PAD_TTL23
MODE5 PAD_SD_CLK PAD_SD_CMD

2. 配置说明


2.1. Kernel下的I2C配置

2.1.1. 配置config

CONFIG_I2C (默认开启)

CONFIG_MS_I2C (默认开启)

kernel驱动采用通用的设备树配置方式,根据各项目配置修改对应的dts

2.1.2. Padmode配置

这里拿HW I2C GROUP0,MODE1举例(请选择项目实际使用的dtsi文件进行配置)

  1. 打开kernel\arch\arm\boot\dts\infinity2m-ssc011a-s01a-display.dtsi文件,i2c-group配置为i2c-0,i2c-padmux配置为1即选择的是MODE1。

  2. 添加padmux设定,打开kernel\arch\arm\boot\dts\infinity2m-ssc010a-s01a-padmux-display.dtsi 针对SSD20X平台,在i2c-0选择mode1,对应的pin脚是PAD_HDMITX_SCL/PAD_HDMITX_SDA。


2.2. Uboot的I2C配置

2.2.1. Padmode配置

  1. 打开boot\include\configs\infinity2m.h

    配置CONFIG_SYS_I2C_0_PADMUX/CONFIG_SYS_I2C_1_PADMUX 即选定了I2C-0/I2C-1的mode设定,此处的mode跟kernel能够匹配。


3. 使用方法说明

下面只做基本接口示例,详细代码部分请参考demo。


3.1. Kernel下读写I2C

  1. Open设备,FILE_NAME可以是 "/dev/i2c-0" 或者 "/dev/i2c-1"

  2. I2C读接口

  3. i2c写接口


3.2. Uboot下读写I2C

Uboot部分已经对接好标准的接口。

参考文件:alkaid\boot\common\cmd_i2c.c

测试命令简单说明:

  1. 选择总线,可选0/1总线: i2c dev 1

  2. 侦测对应总线上的设备: i2c probe

  3. 读设备数据并直接在串口打印数值:i2c md slave_id reg_adrr.len size

    // *slave_id代表设备id
    // *reg_addr是需要读取的设备寄存器地址
    // *len是reg_addr的字节数(1/2字节)
    // *size为需要读回的数据长度
    

用SSD20X公版Demo board的触控IC示例:

触控IC的slave_id一般是0x5D,读取版本好地址reg_addr是0x4081(2字节),则i2c md 0x5D 0x4081.2 0x2