I2C 系列文章主要分为两个部分来写:
1、I2C spec:研究 I2C 协议本身,研究它的协议规范、传输机制。
2、I2C driver:研究 Linux I2C 驱动。
I2C 系列文章目录如下:
I2C spec
I2C Introduction
I2C Architecture
I2C Transfer
I2C Synchronization And Arbitration
I2C Hs-mode
I3C Introduction
I3C Protocol
I2C driver
I2C SW Architecture
I2C Data Structure
I2C Register Flow
I2C Data Transfer
1、I2C Introduction
I2C 历史
- I2C:Inter-Integrated Circuit,集成电路总线。I2C 是 Philips 公司在 1982 年开发的一种简单、双向二线制同步串行总线。Philips 半导体事业部就是现在的 NXP。I2C 的专利在 2006 年 11 月 1 日已到期,大家可以免费使用。Intel 1995 年推出的 I2C 兼容总线(System Managerment Bus),即 SMBus 或 SMB最新版本 I2C v.6 于 2014.04.04 推出。
I2C 的未来
- MIPI 协会在 2014 年左右定稿了 I3C (improved Inter Integrated Circuit)规范,I3C 在 I2C 的规格上建立了功能超集,支持高传输速率模式。当前不论是 Soc 厂商,还是 device 厂商,都已经开始或正在向 I3C 过度。
I2C 的速度
I2C 是一种低速、串行总线,有 SDA(串行数据线) 和 SCL(串行时钟线) 两条信号线,半双工通信。通信速度如下:
• Bidirectional bus:
- Standard-mode (Sm), 100 kbit/sFast-mode (Fm), 400 kbit/sFast-mode Plus (Fm+),1 Mbit/sHigh-speed mode (Hs-mode),3.4 Mbit/s.
• Unidirectional bus:
- Ultra Fast-mode (UFm),5 Mbit/s
速度由 SCL 决定,不同模式对上升沿的要求不一样,上升沿由上拉电阻和等效电容决定(RC)。
I2C 是一种多主从架构总线
- I2C 的读写均由 master 端发起。I2C 通信的每一个 byte(8bits)都需要 slaver 端的回应 ACK/NACK 作为回应。多 master 端需要引入仲裁机制。slaver 端通过设备地址区分,有 7bits 和 10 bits 等地址,还有一种 8bits 地址,实际上是 7bits + 读写位。【其中7位地址 = 种类型号(4bit)+ 寻址码(3bit)】
I2C 总线能挂多少设备?
7-bit address :2 的 7 次方,能挂 128 个设备。
10-bit address :2 的 10 次方,能挂 1024 个设备。
但是 I2C 协议规定,总线上的电容不可以超过 400pF。管脚都是有输入电容的,PCB上也会有寄生电容,所以会有一个限制。
实际设计中经验值大概是不超过 8 个器件。
总线之所以规定电容大小,是因为 I2C 使用的 GPIO 为开漏结构,要求外部有电阻上拉,电阻和总线电容产生了一个 RC 延时效应,电容越大信号的边沿就越缓,有可能带来信号质量风险(方波变三角波)。
传输速度越快,信号的窗口就越小,上升沿下降沿时间要求更短更陡峭,所以 RC 乘积必须更小。
note:要把预留设备地址去除,保留地址如下:
note:写的是 two groups,而不仅仅是八个,0000 XXX 和 1111 XXX 系列地址都是保留的。