拓冰建站拓冰建站
首页 / 资讯中心 / 正文

读EC固件编程指导指南笔记(持续更新ing)

1.EC框图的分析是ITE联阳半导体系列嵌入式控制器EC​ 的经典系统架构框图。它清晰地展示了 EC 芯片是如何作为一个“中间枢纽”连接主板上的高速总线LPC与各种底层硬件外设的1.1 外部接口与总线芯片与外界的沟通桥梁这一层负责 EC 与主板其他大部件如 CPU/PCH的通信。LPC Bus / HLPC I/FLPC 总线 / 主机侧 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 指令集的微处理器内核负责执行底层的固件代码调度各个外设模块工作。EC2IEC 到主机接口桥翻译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 BUSLPC 总线翻译低引脚数总线解释一种低速并行总线33.3MHz用于替代老式 ISA 总线连接 Super I/O、EC、KBC、TPM 等设备。图中箭头双向表示主机和 KBC 可以互相读写。2.1.3 I/FInterface接口翻译接口模块解释KBC 内部负责与LPC 总线​ 交互的模块处理 LPC 周期的译码、响应、数据传输。相当于 KBC 的“LPC 从设备控制器”。2.1.4 KBSKeyboard Scan键盘扫描翻译键盘扫描模块解释负责扫描矩阵式键盘18列 × 8行 144键检测哪个键被按下并将键值通过 LPC 或内部总线传给主机。18 KSO (Col.)18 个键盘扫描输出Column主动拉低某一列。8 KSI (Row)8 个键盘扫描输入Row检测哪一行被拉低即按键闭合。这是典型的行列扫描矩阵键盘​ 驱动方式。2.1.5 PS/2Personal System/2翻译PS/2 接口解释传统键盘/鼠标接口图中显示支持3 个 PS/2 端口可能是 2 键盘 1 鼠标或 3 个通用设备。注意虽然叫“PS/2”但现代芯片内部通常用KBC PS/2 物理层​ 实现不一定真用 IBM PS/2 协议。2.1.6 SMBusSystem Management Bus翻译系统管理总线解释一种基于 I²C 的两线制总线SDA SCL用于连接电池、温度传感器、EEPROM、风扇控制器等低速设备。图中显示 KBC 内部有SMBus 模块可直接与SMBus Devices​ 通信无需经过主机。例如读取电池电量、监控 CPU 温度、控制风扇转速等。2.1.7 PWMPulse Width Modulation翻译脉宽调制器解释输出可变占空比的方波常用于控制风扇转速、屏幕背光亮度、LED 灯效​ 等。图中箭头双向表示 PWM 模块既可以输出控制信号也可能接收主机配置如设定频率/占空比。2.1.8 ADCAnalog-to-Digital Converter翻译模数转换器解释将模拟信号如电池电压、温度传感器电压转换为数字值供 EC/KBC 处理。例如监测电池剩余电量、CPU 温度是否过热。2.1.9 DACDigital-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 → 读取电池芯片 → 返回电量路径BKBC 自主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, DACKBC 内部功能模块绿色块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如 FnEsc 开机、FnF1 调亮度等组合键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分支标准服务循环
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门