I2C驱动

1
2
3
4
5
6
7
8
9
10
11
                          +---------+
+----------+ | |
| CPU | | codec1 |
| | +-+-----+-+
| +---+ | | +------+
| |I2C| | | | |
| | <----------------------------------------------+ codec|
| | <----------------------v-----------------------+ |
| +---+ | |
| | +------+
+----------+

I2C: 以1根串行数据线(SDA)和1根串行时钟线(SCL)实 现了双工的同步数据传输。具有接口线少,控制方式简化,器件封装形式小,通信速率较高等优点。在主从通信中,可以有多个I2C总线器件同时接到I2C总线上,通过地址来识别通信对象, 应答来互通数据及命令。

速度模式:

  • 标准模式下可达到100Kbps
  • 快速模式下可达到400Kbps
  • 高速模式下达到4Mbps

协议

时序

设备定义(DTS)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
&i2c4 {
status = "okay";
clock-frequency = <100000>;
timeout = <1000>;
pinctrl-names = "default";
pinctrl-0 = <&i2c4_pd>;

ak4458: dac@0x10 {
compatible = "asahi-kasei,ak4458";
status = "okay";
reg = <0x10>;
reset-gpios = <&gpd 7 GPIO_ACTIVE_HIGH INGENIC_GPIO_NOBIAS>;
xxmute-gpios = <&gpc 4 GPIO_ACTIVE_HIGH INGENIC_GPIO_NOBIAS>;
};

...
}

acpi

参考

  1. Linux I2C framework(3)_I2C consumer
  2. 示波器分析I2C时序波形图
  3. I2C设备调试及波形分析