I2C使用参考
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文件进行配置)
-
打开
kernel\arch\arm\boot\dts\infinity2m-ssc011a-s01a-display.dtsi
文件,i2c-group配置为i2c-0,i2c-padmux配置为1即选择的是MODE1。 -
添加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配置¶
-
打开
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¶
-
Open设备,FILE_NAME可以是 "/dev/i2c-0" 或者 "/dev/i2c-1"
-
I2C读接口
-
i2c写接口
3.2. Uboot下读写I2C¶
Uboot部分已经对接好标准的接口。
参考文件:alkaid\boot\common\cmd_i2c.c
测试命令简单说明:
-
选择总线,可选0/1总线: i2c dev 1
-
侦测对应总线上的设备: i2c probe
-
读设备数据并直接在串口打印数值:
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