读EC固件编程指导指南笔记(持续更新ing)
2026/8/25 13:22:41 网站建设 项目流程

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:用户按键盘 → 主机收到按键

  1. 用户按下键盘某键 → KBS 模块扫描检测到(18列×8行矩阵中某行列闭合)

  2. KBS 将键值存入内部寄存器 → 通过I/F 模块​ → 通过LPC 总线​ → 主机 CPU 读取

  3. 主机操作系统处理按键事件(如打开程序)

场景2:读取电池电量 → 主机或直接 KBC

  • 路径A(主机主导):主机通过 LPC → I/F → SMBus → 读取电池芯片 → 返回电量

  • 路径B(KBC 自主):KBC 内部 SMBus 模块直接读取电池 → 存入寄存器 → 主机后续通过 LPC 读取(适用于低功耗场景)

场景3:调节风扇转速 → KBC 自主控制

  1. 主机或通过内部逻辑(如温度阈值)决定风扇转速

  2. PWM 模块输出对应占空比方波 → 驱动风扇电机

  3. 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存储空间布局

OEM 代码可⽤的外部 RAM 范围为 100h~5FFh(共 1.25KB),以及 Scratch SRAM 区域
(800h~FFFh,共 2KB)
只有 OEM 的 RAM 可进行调用/修改,其余的是定死的,不可修改。

5. EC固件主循环流程图

5.1 整体结构分析

启动--》初始化--》主循环
Start

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分支(标准服务循环)

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询