通讯协议

CPU如何通过LPC访问EC

LPC(Low Pin Count)是一种低引脚数的总线协议。在主板上,除了CPU、DDR、PCIe这些高速设备外,还有很多低速控制设备例如:键盘、风扇、电源、电池管理。这些功能通常由一个芯片负责——EC(Embedded Controller)。

CPU 如何与 EC 这样的低速设备通信?

主要就是通过LPC总线,主要用于连接以下设备:

  • EC(Embedded Controller)

  • Super I/O

  • BIOS Flash 等低速设备

LPC与EC的地址映射

在操作系统或固件看来,CPU是通过访问I/O地址来与外设通信的。
EC 通常使用下面两个端口:

1
2
#define EC_COMMAND_PORT 0x66
#define EC_DATA_PORT 0x62

CPU在固件或操作系统中访问EC时,本质上只是对这些端口进行读写,例如:

1
2
3
4
5
6
// 读
UINT8 Status;
Status = MmioRead8 (EC_COMMAND_PORT);

// 写
MmioWrite8 (EC_COMMAND_PORT, Cmd);

但EC并不直接连接到CPU的I/O总线,而是挂在LPC总线上。

1
2
3
4
5
6
7
8
9
10
CPU

│ I/O 访问

PCH / Southbridge

│ LPC 总线

EC

CPU并不知道EC的内部结构,EC在主机系统中更像是一个“可编程外设”,类似EEPROM这种,可以读写。

EC 内部地址空间

EC本身通常是一个嵌入式MCU,可能是8位也可能是32位的专用芯片。EC固件会将部分内部地址映射到 LPC访问接口,供 CPU访问。

EC 内部地址 功能
0x0000 – 0x0FFF EC SRAM
0x1000 – 0xFFFF 设备其他控制寄存器

文档示例:

可以这么理解,LPC端口是EC内部地址空间的访问入口。交互示意图如下:

信号定义

LPC 接口由7个必选信号 + 6 个可选信号组成,多数信号与 PCI 复用,无需主机新增引脚。

信号类型 核心信号 核心功能
必选信号 LAD[3:0] 分时复用传输命令、地址、数据
LFRAME# 标识新周期开始、中止错误周期
LRESET# 复位信号,与 PCI 复位同源
LCLK 时钟信号,通常与 PCI 时钟同步
可选信号 LDRQ# DMA / 总线主设备请求,每个外设独立,不可共享
SERIRQ 串行中断,替代传统 ISA 中断线
LPCPD# 电源关断,通知外设准备断电
LPME# 电源管理事件,请求从低功耗唤醒

如下设计:

LPC 的特点是:地址、命令、数据都通过LAD[3:0]分时传输。

本文简单的介绍了LPC总线的基本概念、EC地址映射关系以及核心信号定义,后续我可能会进一步分析LPC的通信原理和时序机制,包括读写周期与通信流程。