[导读]本文通过阅读内核代码,来梳理一下I2C子系统的整体视图。在开发I2C设备驱动程序时,往往缺乏对于系统整体的认识,没有一个清晰的思路。所以从高层级来分析一下I2C系统的设计思路,将有助于设计调试具体的驱动程序。
I2C/SMBUS基础I2C是一种芯片间通讯总线技术,最早由Philips设计制定。下面内容参考I2C2.1规格书
半双工通信方式,通信采用主/从结构支持多主模式,下图来源于I2C2.1规格书其内部电气实现采用集电极开路(Open-collector)/漏极开路(open-drain)结构以实现线与功能,这是总线的实现基础,多芯片通过查询总线状态实现介质仲裁以实现总线控制。总线信号由两线实现,串行时钟线SCL(SerialClockLine)/串行数据线SDA(serialDataLine)。具有三种通讯速率模式:standardmode:0-kbps(bps:bit/s)Fastmode:0-kbpsHigh-speedmode:0-3.4Mbps可支持混速模式不同的速率在硬件设计时需要注意信号的完整性,I2C总线等效电容Cx,主要需要考虑PCB布线,以及上拉电阻选取。支持7bit/10bit两种芯片地址模式I2C总线电气特性,这个非常重要,须严格遵守标准的电气特性SMBUS(systemmanagementbus)。大多数SMBus系统也符合I2C,电气约束对于SMBus更为严格,并且它标准化了特定的协议消息和习惯用语。支持I2C的控制器也可以支持大多数SMBus操作,但是SMBus控制器并不支持I2C控制器将支持的所有协议选项。通过使用I2C原语或通过向不支持这些I2C操作的i2c_adapter设备发出SMBus命令,可以执行各种SMBus协议操作。