I2C 配置
- 内核配置
- master 驱动使能
Device Drivers I2C support---> <*> I2C support <*> I2C device interface I2C Hardware Bus support---> <*> ArtInChip I2C support
- slave 驱动使能
Device Drivers I2C support---> <*> I2C support <*> I2C device interface I2C Hardware Bus support---> <*> ArtInChip I2C support <*> ArtInChip I2C as slave mode <*> I2C slave support <*> I2C eeprom slave driver
注:在将 I2C 作为 slave 时,需要一个 backend 程序,作为 slave 的功能逻辑实现。此处选择内核自带的 eeprom,即 I2C 作为 slave 时,是当做一个 eeprom 的功能在使用。也可以根据实际情况自己实现相应的 backend 代码
- eeprom 驱动使能
使用 I2C 接口与 eeprom 通信,是一种应用非常广泛的场景。此处介绍如何使能内核的 eeprom 驱动(需要先使能 I2C 的 master 驱动)。
Device Drivers Misc devices---> EEPROM support---> <*> I2C EEPROMs/RAMs/ROMs from most vendors
- master 驱动使能
- DTS 配置
- I2C 公共参数配置,以 I2C0
为例
i2c0: i2c@19220000 { compatible = "artinchip,aic-i2c-v1.0"; reg = <0x0 0x19220000 0x0 0x400>; interrupts-extended = <&plic0 84 IRQ_TYPE_LEVEL_HIGH>; clocks = <&cmu CLK_I2C0>; resets = <&rst RESET_I2C0>; #address-cells = <1>; #size-cells = <0>; };
- I2C master 配置
&i2c0 { pinctrl-names = "default"; pinctrl-0 = <&i2c0_pins_a>; status = "okay"; eeprom@50 { compatible = "atmel,24c64"; reg = <0x50>; pagesize = <32>; }; };
注:该配置是将 eeprom 挂在 I2C0 总线上的配置,reg 属性表示 slave 设备的地址,pagesize 表示 eeprom 一页有 32byte。若在 I2C 总线上挂其它设备,对 DTS 进行相应修改即可。
- I2C slave
配置
&i2c0 { pinctrl-names = "default"; pinctrl-0 = <&i2c0_pins_a>; status = "okay"; slave@54 { compatible = "slave-24c02"; reg = <0x40000054>; }; };
内核的 I2C 子系统框架会通过查看 reg 属性的 bit30,判断 I2C 是工作在主机模式还是从机模式。若 bit30 为 1,则为从机模式。上述配置表示 I2C 工作在从机模式,设备地址为 0x54。
若需要设置从机为 10bit 寻址,则需要设置 reg 属性的 bit31 为 1,如下图所示,配置从机地址为 0x139。&i2c0 { pinctrl-names = "default"; pinctrl-0 = <&i2c0_pins_a>; status = "okay"; slave@139 { compatible = "slave-24c02"; reg = <0xC0000139>; }; };
- I2C 公共参数配置,以 I2C0
为例