1 IIC基本信息
IIC(Inter-Integrated Circuit),是一种同步、多主、多从、分组交换、单端、串行计算机总线,由飞利浦半导体 (现在的 NXP 半导体) 在 1982 年发明。是一种半双工,由SDA(数据) 和 SCL(时钟) 组成的两线式串行传输总线。
目前IIC支持下面几种模式:
- 标准模式,standard-mode,最大速率100Kbit/s,有7位寻址
- 快速模式,Fast-mode,最大速率400Kbit/s,可扩展10位寻址
- 快速模式Plus,Fast-mode Plus,最大速率1Mbit/s,可扩展10位寻址
- 高速模式,High-speed mode,最大速率3.4Mbit/s,可扩展10位寻址
- 单向总线:超快速模式,Ultra Fast-mode,最大速率5Mbit/s,使用推挽输出,且不支持设备ID
设备ID:是一个可选的3字节 (24位) 字,包括12位制造商名称,9位芯片标识 (由制造商分配),3位芯片版本标识 。
IIC主要特点
- 为了方便把IIC设备分为主设备和从设备,基本上谁控制时钟线 (即控制SCL的电平高低变换) 谁就是主设备。
- IIC支持多主控,如果两个或更多主机同时初始化数据传输可以通过仲裁防止数据被破坏。
- 一个设备只允许拉低总线 (短接到地) 或者释放总线 (对地高阻态)。没有设备可以保持总线为高,这个特性使得双向通信得以实现。
- IIC是半双工,而不是全双工,同一时间只可以单向通信。
- 连接到相同总线的设备数量受到总线的最大电容400pF限制。并且还受控制器的配置能力限制,例如需要上电初始化的同时配置IIC设备。
- IIC采用开漏输出,需要外部上拉电阻
仲裁是一位一位地进行。节点发送 1 个位后,回读比较总线上所呈现的数据与自己发送的是否一致。是,继续发送;否则,退出竞争。
2 IIC的硬件结构
IIC接口使用的是开漏输出,可独立输入/输出低电平和高阻态,需要外接上拉电阻才能产生高电平。
为什么要设置为开漏输出?
- 电平适应性。开漏输出的特点使得I2C总线能够适应不同电压标准和工作电平。由于开漏输出不会将总线电平拉到高电平,因此可以与其他设备的总线连接,而不受电压不匹配的限制。
- 通过线与实现总线上多设备连接。当多个IIC设备通过IIC总线接在一起时,可以通过开漏输出实现IIC设备间互相线与。只要有一个IIC设备的引脚电平是低电平,那么相应的SCL或SDA总线也会成为一个低电平。如果IIC设备引脚为推挽输出,当一个设备输出为高 (上管PMOS打开),另一个设备输出为低 (下管NMOS打开) 时,会导致电源短路,烧毁设备。
为什么要加上拉电阻?
- 开漏输出不具备输出高电平的能力。上拉电阻通过将信号线拉高,确保总线上的信号线在没有设备主动拉低时维持高电平。
- 线路恢复。当一个设备结束数据传输并释放总线时,上拉电阻有助于快速将信号线拉高,以便其他设备能够开始通信。
- 电平兼容性。上拉电阻确保了I2C总线上的逻辑高电平符合总线的规格。
上拉电阻阻值确定
上拉电阻的取值与 通信速度 和 功耗 相关。
- 一方面,IIC信号的上拉电阻阻值不能太大,因为IIC芯片SCL和SDA引脚都存在寄生电容,同时SDA和SCL信号的走线也会有寄生电容,上拉电阻与总线的电容形成了RC电路,电平由0到1的上升波形会变缓,一定程度会影响IIC的时序。
- 与此同时,减小上拉电阻会增大电路的电流,提高电路损耗。并且过大的电流还会导致IIC引脚烧毁,这个值一般在2-4mA,参考手册。
1. 确定最大值:
通过信号上升时间和总线电容,可以计算确定电阻的最大值。
IIC的SDA和SCL信号的上升时间和总线电容在不同的模式下有不同的要求,具体见下表:
IIC模式 | 信号线最大等效电容 | 信号最大上升时间 |
---|---|---|
标准模式 | 400pF | 1000ns |
快速模式 | 100pF | 300ns |
高速模式 | 550pF | 120ns |
信号上升时间计算公式为:
T
r
=
0.8473
×
R
m
a
x
×
C
I
T_r = 0.8473 \times R_{max} \times C_I
Tr=0.8473×Rmax×CI
其中,
R
m
a
x
R_{max}
Rmax表示上拉电阻可以选取的最大值,
C
I
C_I
CI为实际电路中IIC总线的等效负载电容。
2. 确定最小值:
通过低电平允许的最大电流,确定上拉电阻最小值。
一般要求IIC引脚低电平时,流过芯片IIC引脚的电流小于 3mA,或者考虑电路损耗确定IIC引脚低电平最大电流,由此可以得到以下公式来确定上拉电阻最小值:
R
m
i
n
>
V
C
C
−
V
o
l
I
l
o
w
R_{min} > \dfrac{V_{CC} - V_{ol}}{I_{low}}
Rmin>IlowVCC−Vol
其中,
R
m
i
n
R_{min}
Rmin表示上拉电阻可以选取的最小值,
V
C
C
V_{CC}
VCC表示IIC总线高电平电压,
V
o
l
V_{ol}
Vol是IIC引脚为低电平时的最大电压 (一般取 0.4V),
I
l
o
w
I_{low}
Ilow为低电平最大电流。
IIC信号上拉电阻取值常用的值就是4.7K、5.1K,一般小于10K,大于1K,如果IIC总线比较长,从设备比较多,可以适当降低电阻。
3 SPI
SPI物理层
SPI通讯设备的通讯模式是主从通讯模式,通讯双方有主从之分,根据从机设备的个数,SPI通讯设备之间的连接方式可分为一主一从和一主多从,具体见下图。SPI包含1条时钟线 (SCK)、2条数据线 (主输出从输入MOSI、主输入从输出MISO) 和一条片选信号线 (CS)。
SPI协议层
SPI通讯协议一共有四种通讯模式,模式0、模式1、模式2 以及模式3,这4种模式分别由时钟极性 (CPOL,Clock Polarity) 和时钟相位 (CPHA,Clock Phase) 来定义。其中CPOL参数规定了空闲状态 (CS_N 为高电平,设备未被选中) 时SCK时钟信号的电平状态,CPHA规定了数据采样是在SCK时钟的奇数边沿还是偶数边沿。
- Mode0:CPOL=0,CPHA=0;空闲态时SCK=0,数据在上升沿采样 (奇数边沿),在下降沿移位 (偶数边沿);
- Mode1:CPOL=0,CPHA=1;空闲态时SCK=0,数据在下降沿采样 (偶数边沿),在上升沿移位 (奇数边沿);
- Mode2:CPOL=1,CPHA=0;空闲态时SCK=1,数据在上升沿采样 (奇数边沿),在下降沿移位 (偶数边沿);
- Mode3:CPOL=1,CPHA=1;空闲态时SCK=1,数据在下降沿采样 (偶数边沿),在上升沿移位 (奇数边沿);