关于I3C的一点碎碎念

先粘贴一段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)

这个倒没什么好特别说的,但确实是个新的而且挺有用的特性。