先粘贴一段I3C的介绍在这里。
A medium-speed, utility and control bus interface for connecting peripherals to an application processor in a range of mobile, IoT and automotive applications.
——好吧,好像对于理解I3C一点帮助也没有……
在介绍中,我们可以看见I3C有如下优点:
- 整合了I2C与SPI的主要功能
- 节省引脚
- 高性能
- 功耗低
- 电磁干扰低
- 向后兼容I2C
I3C为什么能节省引脚?快速看一眼手册就能看见如下描述:
In-band interrupt to reduce # of GPIO wires on SoC, as # of sensors increase on the mobile devices.
可以看见,这里提到了I3C的带内中断功能。我们都知道,I2C是没有带内中断的,如果需要实现这个功能那就得再拉一根中断线出来了(如上图),这样必然导致引脚占用太多。I3C是怎么实现该功能的?继续查阅手册,我们发现:
In-Band Interrupt (IBI)
−Slaves can trigger the master by pulling SDA low during a quiet period and the master will start its SCL (start condition)
−Slaves drive their own address during address header; 0s win, so lowest number slave wins the arbitration and Master can ACK/NACK the IBI
也就是说,一旦从机需要发送中断,就直接拉低SDA,通知主机。在手册之前的描述中,我们也能读到SDA有两种输出方式:
……SDA Open-Drain and push-pull.
为什么呢?因为在发送中断,SDA被拉低时,推挽输出功率较大,可能直接给芯片橄榄(),此时就要切换到可以线与的开漏输出了。
至于兼容I2C其实非常好理解。I2C工作在开漏模式下,此时由于驱动能力弱,高低电平是通过上拉电阻实现的,因此外接上拉电阻即可。是不是非常简单呢()看到这里,上面提到功耗低的特性其实也就好理解了——少了上拉电阻消耗,自然就低了。
其实我们还能找到一个有趣的特性——动态分配地址。
Dynamically assigned during initialization.
Slaves may have i2c static address at start (work on i2c buses)
这个倒没什么好特别说的,但确实是个新的而且挺有用的特性。