1.EC框图的分析
是ITE(联阳半导体)系列嵌入式控制器(EC) 的经典系统架构框图。它清晰地展示了 EC 芯片是如何作为一个“中间枢纽”,连接主板上的高速总线(LPC)与各种底层硬件外设的
1.1 外部接口与总线(芯片与外界的沟通桥梁)
这一层负责 EC 与主板其他大部件(如 CPU/PCH)的通信。
- LPC Bus / HLPC I/F(LPC 总线 / 主机侧 LPC 接口)
- 翻译:Low Pin Count Bus / Host-side LPC Interface。
- 解释:这是连接主板 PCH(南桥)的低引脚数总线。HLPC I/F 是 EC 芯片内部专门用来对接这条总线的接口,让 PCH 能通过 LPC 协议访问 EC 内部的资源(如 Flash 或寄存器)。
- SERIRQ(串行中断请求)
- 翻译:Serialized IRQ。
- 解释:LPC 总线上的串行中断线。EC 通过这根线与 PCH 沟通,告诉主机某个外设(如键盘、鼠标)发生了中断事件。
- FSPI I/F (M Bus) / Serial Flash
- 翻译:Fast Serial Peripheral Interface / 串行闪存。
- 解释:FSPI 是 EC 内部的高速串行总线(M Bus),用于连接外部的 SPI Flash 芯片。EC 的固件(Firmware)通常就存储在这个 Flash 里。
1.2 EC 内部核心与桥接模块(芯片的“大脑”与“翻译官”)
这一层是 EC 芯片的核心处理单元和关键的桥接逻辑。
- SMFI Controller(共享内存闪存接口控制器)
- 翻译:Shared Memory Flash Interface Controller。
- 解释:这是 EC 内部极其重要的模块。它充当“翻译官”,把外部 LPC 总线发来的读/写请求,转换成对内部 SPI Flash 的访问。它同时管理着主机(Host)和 EC 自身对 Flash 的访问权限与地址映射。
- EC (8032)
- 翻译:Embedded Controller (基于 8032 内核)。
- 解释:这是 EC 芯片的“大脑”,通常是一个兼容 Intel 8032 指令集的微处理器内核,负责执行底层的固件代码,调度各个外设模块工作。
- EC2I(EC 到主机接口桥)
- 翻译:EC to I/O (Host) Bridge。
- 解释:允许 EC 反向访问主机控制的模块(如 PNPCFG 和 SWUC),实现 EC 与主机之间的双向通信与资源仲裁。
- Scratch SRAM(临时缓存 SRAM)
- 翻译:暂存静态随机存取存储器。
- 解释:EC 内部的一小块高速 RAM,供 8032 内核在执行代码或处理数据时临时存放变量和堆栈,掉电后数据通常会丢失。
- signaling(信号控制模块)
- 解释:负责处理 EC 与外部总线之间的握手、时序和状态控制信号。
1.3 内部总线(芯片内部的“高速公路”)
图中展示了两条并行的总线,用于内部模块间的通信:
- Internal Bus (I Bus)(内部总线)
- 解释:主要用于连接那些需要与外部(如 LPC 主机)交互的逻辑设备(如 KBC、PMC、UART1 等),以及 EC2I 桥接模块。
- EC Dedicated Bus (EC Bus)(EC 专用总线)
- 解释:主要用于连接 EC 内部纯粹的外设控制模块(如 GPIO、PWM、ADC 等),这些模块通常由 EC 内核直接控制,不需要经过外部总线。
1.4 逻辑设备与功能模块(具体的“外设管家”)
这些是直接挂在总线上的具体功能单元。
1.4.1 挂在 Internal Bus (I Bus) 上的模块:
- KBC (Keyboard Controller):键盘控制器,负责矩阵式键盘的扫描与按键上报。
- PMC (Power Management Controller):电源管理控制器,负责 ACPI 状态管理、睡眠/唤醒控制等。
- UART1:通用异步收发传输器,提供串行通信接口(如 RS232)。
- CIR (Consumer IR):消费级红外控制器,用于接收遥控器(如电视遥控)的红外信号。
- SSPI (Synchronous Serial Peripheral Interface):同步串行外设接口,通常用于与 SMBus 设备或特定传感器通信。
- BRAM (Battery RAM):电池供电的 SRAM,即使主电源关闭,只要电池有电,这里的数据(如 CMOS 设置)就不会丢失。
1.4.2 挂在 EC Bus 上的模块:
- GPIO (General Purpose I/O):通用输入输出端口,用于控制各种开关、LED 灯、电源时序等。
- PWM (Pulse Width Modulation):脉宽调制器,常用于控制散热风扇转速或屏幕背光亮度。
- DAC (Digital-to-Analog Converter):数模转换器,用于将数字信号转换为模拟电压(如某些老式设备的电压控制)。
- INTC (Interrupt Controller):中断控制器,管理 EC 内部各个模块产生的中断请求。
- SM Bus (System Management Bus):系统管理总线,常用于与电池、温度传感器、EEPROM 等设备通信。
- KB Scan (Keyboard Scan):键盘扫描矩阵,配合 KBC 完成按键检测。
- EXGPIO (Extended GPIO):扩展的通用输入输出端口。
- PECI (Platform Environment Control Interface):平台环境控制接口,用于与 CPU 进行温度监控和电源管理通信。
1.4.3 最底层的执行/外设终端:
- GCTRL (General Control):通用控制逻辑,负责电源按钮、开机时序等底层硬件控制。
- PS/2:用于连接传统的 PS/2 接口的键盘或鼠标。
- ADC (Analog-to-Digital Converter):模数转换器,用于采集电池电压、温度等模拟信号。
- WUC/Wake-Up Ctrl (Wake-Up Control):唤醒控制单元,决定哪些事件(如键盘敲击、红外信号)可以唤醒处于休眠状态的系统。
- ECPM/Clock Gen (Enhanced Clock and Power Management):增强型时钟与电源管理模块,提供系统时钟源。
- ETWD (Event Time WatchDog):事件定时器与看门狗,用于系统超时复位或事件计时。
- TMR (Timer):基础定时器,提供精确的时间基准。
2. EC的功能架构图
是ITE(联阳半导体)KBC(键盘控制器)芯片的功能架构图,主要展示它如何连接主机(Host System)、外设(键盘、PS/2、SMBus设备)以及内部功能模块(PWM、ADC、DAC)。
PS: 一个专门管键盘、鼠标、温度/电压采集、风扇控制的智能小芯片。
ITE KBC 芯片通过 LPC 总线与主机通信,同时通过键盘扫描、PS/2、SMBus、PWM、ADC/DAC 等模块,自主管理键盘、鼠标、电池、风扇、温度等外设,是传统 PC 系统中“小而美”的输入/电源管理中枢。
2.1 专业名词翻译与解释
2.1.1 Host System(主机系统)
- 翻译:主机系统
- 解释:指电脑主板上的 CPU + PCH(南桥),通过LPC 总线 与 KBC 通信。主机用它来读取键盘状态、配置 KBC 寄存器、接收中断等。
2.1.2 Low Pin Count BUS(LPC 总线)
- 翻译:低引脚数总线
- 解释:一种低速并行总线(33.3MHz),用于替代老式 ISA 总线,连接 Super I/O、EC、KBC、TPM 等设备。图中箭头双向,表示主机和 KBC 可以互相读写。
2.1.3 I/F(Interface,接口)
- 翻译:接口模块
- 解释:KBC 内部负责与LPC 总线 交互的模块,处理 LPC 周期的译码、响应、数据传输。相当于 KBC 的“LPC 从设备控制器”。
2.1.4 KBS(Keyboard Scan,键盘扫描)
- 翻译:键盘扫描模块
- 解释:负责扫描矩阵式键盘(18列 × 8行 = 144键),检测哪个键被按下,并将键值通过 LPC 或内部总线传给主机。
- 18 KSO (Col.):18 个键盘扫描输出(Column),主动拉低某一列。
- 8 KSI (Row):8 个键盘扫描输入(Row),检测哪一行被拉低(即按键闭合)。
- 这是典型的行列扫描矩阵键盘 驱动方式。
2.1.5 PS/2(Personal System/2)
- 翻译:PS/2 接口
- 解释:传统键盘/鼠标接口,图中显示支持3 个 PS/2 端口(可能是 2 键盘 + 1 鼠标,或 3 个通用设备)。
- 注意:虽然叫“PS/2”,但现代芯片内部通常用KBC + PS/2 物理层 实现,不一定真用 IBM PS/2 协议。
2.1.6 SMBus(System Management Bus)
- 翻译:系统管理总线
- 解释:一种基于 I²C 的两线制总线(SDA + SCL),用于连接电池、温度传感器、EEPROM、风扇控制器等低速设备。
- 图中显示 KBC 内部有SMBus 模块,可直接与SMBus Devices 通信,无需经过主机。
- 例如:读取电池电量、监控 CPU 温度、控制风扇转速等。
2.1.7 PWM(Pulse Width Modulation)
- 翻译:脉宽调制器
- 解释:输出可变占空比的方波,常用于控制风扇转速、屏幕背光亮度、LED 灯效 等。
- 图中箭头双向,表示 PWM 模块既可以输出控制信号,也可能接收主机配置(如设定频率/占空比)。
2.1.8 ADC(Analog-to-Digital Converter)
- 翻译:模数转换器
- 解释:将模拟信号(如电池电压、温度传感器电压)转换为数字值,供 EC/KBC 处理。
- 例如:监测电池剩余电量、CPU 温度是否过热。
2.1.9 DAC(Digital-to-Analog Converter)
- 翻译:数模转换器
- 解释:将数字信号转换为模拟电压,常用于电压调节、音频输出(较少见)、传感器校准 等。
- 在现代笔记本中,DAC 用得比 ADC 少,但在工业控制或老式设备中仍有应用。
2.1.10 Related Applications(相关应用)
- 翻译:相关应用模块
- 解释:指 KBC 控制的下游设备或子系统,如:
- 风扇控制(通过 PWM)
- 电池管理(通过 ADC + SMBus)
- 温度监控(通过 ADC + SMBus)
- 键盘/鼠标输入(通过 KBS + PS/2)
- 等等。
2.2 分层视角
┌───────────────────────┐ │ Host System │ ← 上层:CPU/PCH,通过 LPC 控制 KBC └───────────┬───────────┘ ↓ LPC BUS ┌───────────────────────┐ │ ITE KBC (核心) │ ← 中层:KBC 芯片本体,含 I/F, KBS, SMBus, PWM, ADC, DAC └───────────┬───────────┘ ↓ 多种接口 ┌───────────────────────┐ │ Peripherals │ ← 下层:键盘、PS/2设备、SMBus设备、风扇、电池等 └───────────────────────┘2.3 数据流向示例
场景1:用户按键盘 → 主机收到按键
用户按下键盘某键 → KBS 模块扫描检测到(18列×8行矩阵中某行列闭合)
KBS 将键值存入内部寄存器 → 通过I/F 模块 → 通过LPC 总线 → 主机 CPU 读取
主机操作系统处理按键事件(如打开程序)
场景2:读取电池电量 → 主机或直接 KBC
路径A(主机主导):主机通过 LPC → I/F → SMBus → 读取电池芯片 → 返回电量
路径B(KBC 自主):KBC 内部 SMBus 模块直接读取电池 → 存入寄存器 → 主机后续通过 LPC 读取(适用于低功耗场景)
场景3:调节风扇转速 → KBC 自主控制
主机或通过内部逻辑(如温度阈值)决定风扇转速
PWM 模块输出对应占空比方波 → 驱动风扇电机
ADC 可能同时监测风扇转速或温度反馈(闭环控制)
2.4 关键点总结
模块 | 作用 | 与主机关系 |
|---|---|---|
I/F | LPC 接口控制器 | 主机通过它读写 KBC 寄存器 |
KBS | 键盘扫描 | 主机读取按键状态,KBC 主动扫描 |
PS/2 | 物理接口 | 连接传统键盘/鼠标,KBC 处理协议 |
SMBus | 系统管理总线 | 可独立访问电池/传感器,也可主机介入 |
PWM/ADC/DAC | 模拟控制 | KBC 自主控制风扇、电压、温度,减轻主机负担 |
2.5 为什么需要 KBC?
在没有 EC(嵌入式控制器)的简单系统中,KBC 就是“小 EC”,负责:
- 键盘/鼠标输入
- 电源管理(唤醒、休眠)
- 低速外设管理(SMBus、ADC)
- 风扇/电压控制
在现代笔记本中,KBC 常被EC(如 ITE IT8528)取代,但很多工控板、老式主板、或简化设计中仍保留 KBC。
2.6 图中颜色含义
- 蓝色块(ITE KBC):核心芯片本体
- 黄色块(I/F, KBS, PS/2, SMBus, PWM, ADC, DAC):KBC 内部功能模块
- 绿色块(Scan Matrix Keyboard, SMBus Devices, 3 PS/2 ports, Related Applications):外部连接设备或子系统
3. EC 固件镜像文件的产出方法
1.在source insight中修改代码后,找到代码文件夹,点击B,可对代码进行编译
2.编译完成后,打开ROM文件夹,可以看到对应修改日期的bin文件
4. EC存储空间布局
5. EC固件主循环流程图
5.1 整体结构分析
↓
EC reset / WDT or H/W reset → 判断是否冷启动?
↓
初始化(寄存器、GPIO、变量等)
↓
进入主服务循环(Check service_flag_main_service_function)
↓
循环执行各种服务函数(键盘、PS/2、SMBus、ADC、PWM…)
↓
同时支持 OEM 自定义服务和 Hook 函数扩展
5.2 对流程图专业名词的翻译及解释
1.Start
翻译:开始
解释:程序入口点,芯片复位后从这里开始执行。
2.EC reset, WDT, or H/W reset
翻译:EC 复位、看门狗复位或硬件复位
解释:表示系统刚上电或被强制重启,可能来源包括:
EC 自身复位(软件触发)
看门狗超时复位(WDT)
主机通过 LPC/FWH 发送的硬复位信号
3.Is Hot-Key/Resume/Chassis signal?(菱形判断框)
翻译:是否是热键/唤醒/机箱信号?
解释:
Hot-Key:如 Fn+Esc 开机、Fn+F1 调亮度等组合键
Resume:从休眠/睡眠状态唤醒
Chassis signal:机箱入侵检测、电源按钮等
Yes 分支 → 进入
main()函数(跳过初始化?实际是快速路径)No 分支 → 进入
Initialization阶段
⚠️ 注意:这里“Yes”指向
main(),但通常在嵌入式系统中,“热键/唤醒”会触发特定中断或标志位,而不是直接跳转到 main —— 可能是流程图简化表达。更合理的理解是:“如果是唤醒事件,则执行快速恢复流程”。
4.Initialization (Registers, GPIO, Timers, Variables… etc.)
翻译:初始化(寄存器、GPIO、定时器、变量等)
解释:第一次启动时执行的硬件配置,比如:
设置 GPIO 方向(输入/输出)
初始化定时器计数器
清零全局变量
配置中断使能
加载默认参数
5.main() function.
翻译:主函数
解释:C 语言程序的入口,在嵌入式中也常作为“二次初始化 + 主循环启动”的入口。
可能再次确认时钟、电源状态
启动定时器、使能中断
进入真正的无限循环(即下面那个大循环)
6.Reset cache, Enable timer, Enable interrupt.
翻译:重置缓存、使能定时器、使能中断
解释:确保系统在进入主循环前,所有外设和中断都已准备好响应。
7.EC idle and waiting any interrupt.
翻译:EC 空闲并等待任意中断
解释:这是典型的低功耗待机状态,EC 不主动轮询,而是靠中断唤醒(如键盘、SMBus、定时器、电源事件等)。
8.Can do it other?(菱形判断框)
翻译:还能做别的吗?(是否有其他任务?)
解释:这个判断有点模糊,结合上下文,它可能是指:
“是否有更高优先级的服务需要处理?”
或者“是否允许进入 OEM 服务分支?”
Yes → 进入右侧的
Hook_main_service_L_function分支(OEM 自定义服务)No → 进入左侧的
Check service_flag_main_service_function分支(标准服务循环)