我不是电子背景的,所以请多多包涵。假设英特尔处理器想要通过 I2C 总线与温度传感器通信。底层通信如何?到目前为止,我了解,英特尔处理器使用专门的 CPU 指令 (IN/OUT) 与外围设备进行通信。另外,我相信英特尔没有片上 I2C 控制器。所以,我们需要一个 I2C 控制器,不是吗?如果是这样,处理器是否将控制器视为外围设备并使用 IN/OUT CPU 指令与其通信?控制器是否安装在主板上?什么总线连接 CPU 和控制器?
英特尔处理器如何与 I2C 设备“对话”?
到目前为止,我了解,英特尔处理器使用专门的 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 控制器的一部分。
我只是随机查看了一份英特尔处理器的数据表
[编辑:] 它是一个封装平台控制器集线器 (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 总线连接。