英特尔处理器如何与 I2C 设备“对话”?

电器工程 i2c 公共汽车 英特尔
2022-01-22 14:51:46

我不是电子背景的,所以请多多包涵。假设英特尔处理器想要通过 I2C 总线与温度传感器通信。底层通信如何?到目前为止,我了解,英特尔处理器使用专门的 CPU 指令 (IN/OUT) 与外围设备进行通信。另外,我相信英特尔没有片上 I2C 控制器。所以,我们需要一个 I2C 控制器,不是吗?如果是这样,处理器是否将控制器视为外围设备并使用 IN/OUT CPU 指令与其通信?控制器是否安装在主板上?什么总线连接 CPU 和控制器?

4个回答

到目前为止,我了解,英特尔处理器使用专门的 CPU 指令 (IN/OUT) 与外围设备进行通信。

嗯,这在 1970 年代和 1980 年代可能是正确的,但对于 I²C 外围设备来说甚至都不是很有用,而且对 CPU 的编程具有难以置信的侵入性。

因此,相反,有一些外围设备连接到更快的总线(例如 PCIe)上,在接收到来自 CPU 的命令后,它会进行 I²C 通信;该通信通常通过将数据写入特定内存位置来进行,而不是使用特殊的 IO 指令。

另外,我相信英特尔没有片上 I2C 控制器。

哦,我不认为那是真的;应该有多个控制器,但它们是特定用途的,例如,用于读取 RAM 模块上的 EEPROM。

所以,我们需要一个 I2C 控制器,不是吗?

是的。

如果是这样,处理器是否将控制器视为外围设备

是的

并使用IN / OUT CPU指令与之交谈?

不,如前所述,这些指令用于已经存在了几十年的极少数设备类型(想想:PS/2 键盘、PCI 地址空间配置、实时时钟、软盘、并行打印机端口、 ...) 只有 CPU 需要直接与之通信,主要是出于启动和遗留原因。

基本上,一旦您设置了 PCI 地址空间,大多数外围设备通信就只是正常的内存访问。

通常,您的程序甚至会在内存区域中为 I²C 控制器准备命令,然后告诉某些 DMA 控制器将该内存传输到控制器。因此,您的 CPU 甚至不一定直接与控制器对话——它告诉 DMA 控制器告诉 PCIe 控制器将字节从某些内存传输到设备。

控制器是否安装在主板上?什么总线连接 CPU 和控制器?

要看; 可以集成在同一个IC封装中,也可以在主板上。

如果直接集成在南桥(在 Intel CPU 芯片组中称为 ICH),那么接口将是Direct Media Interface它也可能位于连接到南桥的 PCIe 设备中,或者位于连接到 USB 控制器的 USB 设备中,这又可以是南桥的一部分,或者是 PCIe 连接的 USB 控制器的一部分。

英特尔酷睿处理器通过直接媒体接口DMI连接到 Platform Controller Hub PCH
PCH 包含所有外围设备,如 PCI、USB、AHCI、Display 输出所有东西。

还有SMBus (I2C) 接口,它将所有小传感器连接在一起。

PCH 通过 DMI 使这些外设在地址空间中可用。这是一个专有接口,PCH 是强制性的。因此,对于英特尔平台的概念,您可以将其视为片上 SMBus 控制器。

在此处输入图像描述英特尔 7 代 PCH

我只是随机查看了一份英特尔处理器的数据表

[编辑:] 它是一个封装平台控制器集线器 (PCH) 数据表

在介绍中: 在此处输入图像描述

  • 您有时也可能会以不同的名称看到它:(SMBus在此处输入图像描述

你的问题,看起来这是一个很好的教程来解释它: https ://learn.sparkfun.com/tutorials/i2c/all

就像这样:1个用于在芯片之间同步时钟的引脚(由总线主控发送).. 1个用于数据的引脚..(想要在线发送位的设备会将其拉低)主控通常发送地址他想与之交谈的芯片,该芯片将确认,然后通信发生......其他芯片沉默:D


i2c 太慢了,无法与芯片对话并获取信息或配置。没有数据交换的东西。

PC 有多个 I²C 控制器。最突出的是那些用于 DDC 和那些用于 RAM 模块的 SPD。有时温度传感器和风扇控制也会放在 I²C 总线上。

如何控制这些 I²C 总线取决于主板的芯片组。大多数主机适配器都非常简单,仅包含一个时钟发生器、一个移位寄存器和一些用于创建 I²C 启动和停止条件的逻辑。整个传输都在软件控制之下。摆弄电路板南桥芯片内的控制位。

南桥芯片非常复杂,内部有很多遗留的东西。内部的 I²C 控制器甚至可以通过芯片内部的 LPC 总线连接。