Bios工程师手边事—battery

浪潮PM8222-SHBA与PM804热备盘配置实战指南 RAID热备盘是保障存储高可用的核心机制,其原理在于故障时自动接管数据重建,技术价值体现在零人工干预、业务不中断与数据零丢失。但实际部署中,热备盘并非简单勾选即可生效,而是深度耦合于阵列卡硬件架构、物理槽位绑定、精确容量校验及缓存策略协同。尤其在浪潮服务器场景下,PM8222-SHBA依赖Slot 0/1物理槽位识别,PM8204则严格校验LBA级容量匹配——二者均突破通用RAID认知,要求运维人员从BIOS底层、固件版本、线缆质量到SMART健康度进行全栈验证。本文聚焦浪潮信息平台真实环境,详解热备盘‘能 阅读详情

公司的电池又出问题了。对于电池,只是解决问题的话,不会困难。但将整个电池的知识点串连起来,却不是件轻松的事。

电池部分可以分成二块来看待:

1,ECBIOS读取电池,并处理

2,SYSTEMBIOS写ASL代码,提供给驱动

附:驱动和EC沟通,报给内核

 

嵌入式BIOS部分

嵌入式BIOS工程师做电池,手边的事情一般有:

1,侦测电池插拔动作

一般有两种方式来作这个功能:

(1)通过一根GPIO PIN的电平高低来检测,需要提前去抖;

(2)通过ADC控制器来侦测电池温度,其实在软件的眼中,不管温度还是阻值或者其它什么东西,都是电压。我们可以通过电压是否在一定的范围内来确定电池是否存在。

 

2,获取电池信息

EC获取电池信息,要通过读SMART BATTERY IC的寄存器来获取。比较重要的寄存器有:

BatteryCurrent

电池电流

BatteryVoltage

电池电压

DesignCapacity

电池设计容量

RemainingCapacity

电池现有容量

FullChargeCapacity

电池满充容量

RSOC

电池现有容量百分比

CycleCount

电池跑的CYCLE数

BatteryStatus

电池状态

 

CycleCount的值代表了电池使用的程度;RemainingCapacity和FullChargeCapacity的比值就是WINDOWS显示的百分比,由于算法的原因,可能和RSOC不一致;而电池剩余时间可以通过BatteryCurrent和RemainingCapacity的比值得到。

读取这些寄存器需要遵循SMBUS协议。

 

3,电池充放电

(1)当AC和电池均存在,而batteryStatus的FULLY_CHARGED位没置1时,要充电。充电IC一般接受DAC或SMBUS的通信方式。

(2)其余情况下,不应充电。

(3)电池充放电过程中,要点亮一些指示灯给终端用户使用。

 

4,通知ACPI驱动更新电池信息

电池信息的传递需要通过62/66端口来实现。EC代码的一般做法是用256 BYTE的内存来作为ECRAM或ECSpace,HOST端驱动或应用会通过约定的时序来读取。

当电池拔出时,我们应该将ECRAM有关电池部分清0,然后通过SCI中断发送Q事件号来通知电池驱动来读取电池信息。

当电池插入时,我们不应立即通知电池驱动来获取电池信息,因为此时还没有读电池信息,我们最好要第一次读完电池信息后,再通知驱动来更新电池信息。如果不这样做,电池图标就会指示错误。SYSTEM BIOS为了避免这种情况出现,也可以利用线程SLEEP的方式来绕过这段时间。

在电池充放电过程中,我们可以实时读取RSOC的值,一旦RSOC值有变化,我们就可以通知电池驱动更新电池信息。

 

5,电池Learning功能的辅助性设计

一般来讲,主板都会设计留出电源开关来给EC使用,EC利用这些开关来决定当前系统使用交流电或是电池,EC不会主动调用这些开关,而是把它们封装做成接口提供给HOST端使用。

这种灵活的设计主要为电池Learning功能使用。我们可以通过操作系统层面上应用调用EC的接口,或是直接在BIOS层面调用EC的接口来做电池 Learning功能。

 

6,电池保护功能

电池在充放电过程中,有时会产生过压过流或过温现象,这种现象会对电池造成危害。EC工程师可以在电源工程师的设定规则下,来做一些保护功能,当达到临界点时,要停些充电或关机。

 

 

 

 

 

SYSTEM BIOS部分

SystemBIOS工程师做电池,手边的事情一般有:

1, 在DeviceEC ASL中加入电池相产信息的字段。然后在QEvent加三个事件来通知电池驱动更新电池信息。这三个事件通知的时机分别是:

(1)   电池插入

(2)   电池拔出

(3)   电池百分比改变

(4)   AC插入和拔出

电池插入和拔出的事件:

Method(_QXX)

{

     Sleep(5)        //此处防止EC BIOS代码考虑不全面

     Notify(BATT,0x80)

     Sleep(5)        //此处防止读取数据时,时序错乱

Notify(BATT,0x81)

}

电池百分比改变事件:

Method(_QYY)

{

     Notify(BATT,0x80)

}

AC插拔事件:

Method(_QZZ)

{

     Notify(ACAD,0x80)   //通知AC状态改变

     Sleep(5)       

     Notify(BATT,0x80)

     Sleep(5)       

Notify(BATT,0x81)

     Notify(EveryCPU)    //_CST,让操作系统重新决定CPU省电策略

}

2, 添加DeviceBattery ASL代码。

里面主要注意两个Method:_BIF和_BST

我们可以看到,_BST的package里有Battery Remaining Capacity字段,根据_QYY事件中的代码,我们可以推断出电池的Notify Value 0x80就是更新_BST的package。

这个需要细心和耐心,对照ACPI SPEC和EC SPACE空间,一点点地给电池驱动报数据。

值得一提的是,和SLEEP一样,为了防止数据读取错误,我们也可以在此添加Mutex。Sleep是通过线程休眠来达到延时的目的,而Mutex则是通过互斥量来阻止两段代码争资源。我也分不清谁优谁劣,不过为了防止错误发生,做项目中尽量两者兼用。

 

 

附:驱动部分

    为了搞明白我们的接口怎么被操作系统获取的,我特地读了下Linux3.18.2驱动。由于不专业,所以还请各位同仁斧正。

    有关battery部分的驱动,有两个比较重要的文件:

    Drivers\acpi\sbs.c

    Drivers\acpi\battery.c

 

    首先在sbs.c中:

我们可以看到驱动入品函数为:acpi_sbs_init(void)调用acpi_bus_register_driver(&acpi_sbs_driver),Acpi_sbs_driver.ops.add = acpi_sbs_add,Acpi_sbs_add会调用acpi_battery_add(sbs, id),acpi_battery_add调用power_supply_register(&sbs->device->dev,&battery->bat),

battery->bat.get_property= acpi_sbs_battery_get_property;

    我们知道,Linux系统中,power_supply_regiter会注册Power设备,而根文件系统显示电池相关信息是由acpi_sbs_battery_get_property()提供的,所以我们就需要在硬件相关部分,将我们读取到的信息提供给acpi_sbs_battery_get_property()所需的变量。而读取硬件信息相关代码就在battery.c中。

 

    在battery.c文件中:

    入口函数为acpi_battery_init(),调用async_schedule(acpi_battery_init_async, NULL),acpi_battery_init_async()调用acpi_bus_register_driver(&acpi_battery_driver),acpi_battery.driver.ops.add= acpi_battery_add,acpi_battery_add()中赋值battery->pm_nb.notifier_call =battery_notify,battery_notify()调用acpi_battery_get_info()和

acpi_battery_get_state(),而这两个函数会通过acpi_evaluate_object(battery->device->handle,"_BST",NULL, &buffer)和

acpi_evaluate_object(battery->device->handle,name,NULL, &buffer)将读到的电池信息放到acpi_battery结构体变量中,而该结构体变量会被sbs.c的acpi_sbs_battery_get_property()使用。至于怎么读到电池信息,这部分内容会涉及到ec.c中的内容,就不再展开了。

    对于Linux驱动实在太不专业,去描述这些的时候让我想到《圣经》的马太福音第一章前几节,我就用这几节内容来结束battery内容吧。

1:1 亚伯拉罕的后裔,大卫的子孙,耶稣基督的家谱,

1:2 亚伯拉罕生以撒,以撒生雅各,雅各生犹大和他的弟兄,
1:3 犹大从她玛氏生法勒斯和谢拉,法勒斯生希斯仑,希斯仑生亚兰,
1:4 亚兰生亚米拿达,亚米拿达生拿顺,拿顺生撒门,
1:5 撒门从喇合氏生波阿斯,波阿斯从路得氏生俄备得,俄备得生耶西,
1:6 耶西生大卫王。大卫从乌利亚的妻子生所罗门,
1:7 所罗门生罗波安,罗波安生亚比雅,亚比雅生亚撒,
1:8 亚撒生约沙法,约沙法生约兰,约兰生乌西亚,
1:9 乌西亚生约坦,约坦生亚哈斯,亚哈斯生希西家,
1:10 希西家生玛拿西,玛拿西生亚们,亚们生约西亚。
1:11 百姓被迁到巴比伦的时候,约西亚生耶哥尼雅和他的弟兄。
1:12 迁到巴比伦之后,耶哥尼雅生撒拉铁,撒拉铁生所罗巴伯,
1:13 所罗巴伯生亚比玉,亚比玉生以利亚敬,以利亚敬生亚所,
1:14 亚所生撒督,撒督生亚金,亚金生以律,
1:15 以律生以利亚撒,以利亚撒生马但,马但生雅各,
1:16 雅各生约瑟,就是马利亚的丈夫。那称为基督的耶稣,是从马利亚生的。
IBM x3650 M4主板更换:硬盘不插电首启与阵列卡清配置实操指南 RAID阵列卡是服务器存储系统的核心控制器,其配置元数据一致性直接决定系统能否正常启动。当更换IBM x3650 M4主板时,ServeRAID M5110e阵列卡因默认启用FastPath和CacheVault机制,会自动加载硬盘残留的旧配置,极易引发‘Invalid configuration’、虚拟盘识别失败或开机卡死等问题。技术本质在于BIOS初始化流程与阵列卡固件间的数据协同逻辑——只有先隔离硬盘、清除全部配置、再按SAS Address顺序复位,才能重建可信元数据链。该方法广泛适用于老旧Xeon 阅读详情

相关推荐

DELL服务器RAID制作与系统安装实战指南

在数据中心运维中,磁盘阵列(RAID)是保障数据可用性与性能的核心技术,而服务器系统安装则是交付业务的基础环节。理解RAID级别(如RAID 0/1/5/10)的容量、容错与性能权衡,掌握PERC控制器的配置逻辑,是服务器工程师必备的技能。RAID通过将多块物理磁盘组合为虚拟磁盘,为操作系统提供统一的存储视图;合理配置热备盘与写策略,能够显著提升阵列的可靠性与抗风险能力。在DELL PowerEdge系列服务器上,从进入PERC配置界面、创建虚拟磁盘,到针对ESXi、Ubuntu或Windows注入驱动并完

weixin_34122604的博客 456

windows10电源状态查询

windows10查询电源状态

qq_43604945的博客 2565

别再只用GWR了!用Python的mgtwr包搞定时空地理加权回归(GTWR)实战

本文详细介绍了如何使用Python的mgtwr包进行时空地理加权回归(GTWR)实战,突破传统GWR模型的局限。通过核心差异解析、实战全流程演示和进阶技巧,帮助读者掌握GTWR在房价波动、污染物扩散等时空数据分析中的应用,提升模型预测精度。

weixin_30899023的博客 342

BIOS工程师需要掌握的知识

素 质 要 求 强烈的责任心和敬业精神 项目的BIOS工作,与独立的软件工作有一个重要的区别就是,BIOS工作配合硬件、电源、Layout、测试、EMI、测试等部分紧密工作,如果由于BIOS的Delay,那么可能造成这个项目的严重Delay,这样不但拖住产品上市,而且拖住整个项目的资源,造成资源的严重浪费。所以,BIOS工程师必须有十分强烈的时间观念,这种的较强的时间观念不仅仅表现在整个项目...

anqi8955的专栏 2万+

HTB_Bike靶机之模板注入

船到桥头自然直 文章目录信息收集模板引擎SSIT 模板注入后放答案 信息收集 日常 A 扫描,两个端口 22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.4 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: | 3072 48:ad:d5:b8:3a:9f:bc:be:f7:e8:20:1e:f6:bf:de:ae (RSA) | 256 b7:89:6c:0b:20:ed:49:b2:c1:86:7c:.

网络安全学习 798

SAP-ABAP:SAP中如何查看系统表之间的关联关系?

在业务逻辑开发或者ALV开发过程中,我们通常要从系统中找出几个标准表之间的关联关系,有的是head与item,通过外键进行关联的关系。那么怎么去找到呢?以上就是具体如何产看系统表之间的关联关系的步骤,对于不同代码的业务顾问,也是必须要掌握的。

LinkStar的博客 2430

对笔记本电池的研究

设计容量&完全充电容量 为什么会有这种设计? 电池损耗 正确做法 查看笔记本的电池使用报告方法 第一步:Win+R键输入cmd,打开命令提示符窗口 第二步:输入powercfg /batteryreport,然后敲回车键 第三步:将报告的文件路径复制,在文件管理器搜索框中进行搜索打开 电池使用报告中的关键参数 Installed batteries Recent usage Battery usage Usage history Battery capacity history Battery life e

缘友一世的博客 1万+

Theil-Sen Median斜率估计和Mann-Kendall趋势分析:以多年NPP数据为例

一、理论 Theil-Sen Median方法又称为Sen斜率估计,是一种稳健的非参数统计的趋势计算方法。该方法计算效率高,对于测量误差和利群数据不敏感,适用于长时间序列数据的趋势分析。其计算公式为: Mann-Kendall(MK)检验是一种非参数的时间序列趋势性检验方法,其不需要测量值服从正太分布,不受缺失值和异常值的影响,适用于长时间序列数据的趋势显著检验。其过程如下:对 于 序 列Xt = x1,x2,⋯xn,先确定所有对偶值( xi , xj ,...

丑唐的修炼之旅 8万+

Linux battery 移植的相关概念

FullChargeCapacity(FCC): 充满后的电量,由于环境,温度,重点次数的影响,一般都比DesignCapacity 小。绝对充电状态可能,永远达不到100%,因为Design Capacity 是一个固定值,因为FCC 总会随着时间等因素缩减。相对充电状态总是从0% 到 100%, FCC 会随着充电次数,环境等因素逐渐递减。RelativeStateOfChage (RSOC): 相对充电状态。DesignCapacity: 设计电量,就是理论最大电量。

Qing的专栏 3490

常见的电容有哪些

电容在电路板中非常常见,类别纷繁复杂,本文化繁为简,主要介绍下常见电容。

qq_40170041的博客 768

智能车竞赛独轮组信标灯系统全解析:从硬件选型到实战调试

本文全面解析了智能车竞赛独轮组信标灯系统的核心原理与实战应用。从硬件架构(灯板、灯罩、控制器)的深度剖析,到红外信号(特别是40kHz调制信号)的接收与解码策略,再到车模的灭灯机构设计与路径规划,提供了从硬件选型到软件调试的全链路指南。文章重点分享了实战调试技巧与常见问题排查方法,旨在帮助参赛队伍深入理解系统,提升车模的识别精度与比赛表现。

e4f5g6h的博客 1124

我是BIOS工程师,我不是解Bug工程师……

近来,一直在思考这样一个问题:何为BIOS工程师?或者说BIOS工程师的工作职责和工作范围究竟如何界定?因为实际工作中,作为BIOS工程师的我们经常会发现自己会作出一些越界的事情——这些事情严格来说根本不属于BIOS工程师的工作范畴。 还记得最初做BIOS那时给我的感觉就是整天解bug,一旦发现什么bug,不论是谁发现的bug,我周围那些人都喜欢先去判断是不是BIOS问题,如果他们得出结论

wj0225的专栏 7599

数据仓库数据质量监控和处理方法最佳实践

指的是检查数据是否存在反常或者错误的情况,例如数值反常地过大或者过小,或者超过记录的波动值,对应的规则包括数值波动检查,最大值、最小值检查,跨表准确性等。指的是检查数据是否存在缺失的情况,这里的缺失可以是整个数据集的记录缺失,也可以是某个字段记录的缺失,对应的规则包括空值检查,表总行数检查。指的是检查数据是否符合规范,是否按照规定的格式存储,对应的规则包括正则表达式检查,字段长度检查,枚举集合检查,数值范围等。指的是检查哪些数据是重复数据或者数据的哪些属性是重复的,对应的规则例如主键唯一性检查。

大模型大数据攻城狮的专栏 899

BIOS工程师手边事-题前话

先感叹一下:“BIOS这个行业真是太窄了!”我刚入行的时候,我老大太忙了,我都不好意思占用我老大太多时间,只好在网上找教程。但网上谈这个的寥寥无几,幸好看到BINI大侠发的一系列文章,作为我入行的切入点。首先向BINI表示感谢,上个月我见到了BINI,但慑于BINI大侠阿甘似的气场,我只有点头示意,没敢过多地攀谈。其实在我心中,BINI算是我半个老师。写BIOS相关的博客,也算是向BINI致敬。

zhao_longwei的专栏 3893

ESP32 双雷达融合盲区车辆接近预警系统设计与实现

/ 超声波传感器引脚// 触发引脚// 回声引脚// 预警模块引脚// 蜂鸣器引脚// LED引脚// 串口配置(毫米波雷达用UART2)#define BAUD_RATE 115200 // 雷达串口波特率(IWR6843默认配置)// 预警阈值(可根据实际需求调整)// 高危区阈值(3m)// 预警区阈值(10m)// 传感器数据存储// 毫米波雷达距离(m)// 毫米波雷达速度(km/h)// 超声波距离(m)// 融合后距离(m)

weixin_42300449的博客 745

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

BIOS工程师需要掌握的技术知识

BIOS工程师需要掌握的技术知识广泛且深入,主要包括以下几个方面: 一、硬件与体系结构 处理器架构 熟悉ARM、X86、PowerPC等一种或以上处理器体系架构与工作原理。了解处理器的指令集、缓存机制、总线接口等,这是BIOS开发的基础。 硬件接口与协议 了解并熟悉I2C、SPI、LPC、UART、USB、PCI、PCIe、Network、SAS、SATA、GPIO、VGA、Flash、DDR等设备的开发流程和技术细节。这些接口和协议在BIOS中与硬件设备进行通信和数据传输时至关重要。

m0_57850928的博客 2136

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

EC智能电池信息读取

最近在做EC方面的项目,客户需求带电池的方案。EC芯片用的是ITE的IT5571。本人刚毕业,对EC方面很多都不懂,以下内容是我在网上找的各种资料经过自己的理解所总结。

weissness的博客 7366

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

BIOS工程师手边事--SMM模式

一,SMM概念及特色      1,基本概念        SMM是Intel在386SL之后引入x86体系结构的一种CPU的执行模式。加上SMM,X86 CPU支持四种工作模式。分别是:实模式,保护模式,虚拟8086模式和SMM模式。SMM是一种特殊的工作模式,它不依赖于具体的操作系统,完全由固件来控制。     SMM模式只能通过系统管理中断SMI进入,并只能通过执行RSM指令退出。

zhao_longwei的专栏 1万+

ACPI相关(5)- PCI热插拔(二)

ACPI热插拔在系统中的实现 1、系统初始化阶段 在上电阶段PCI设备的扫描节点,ACPI模式根节点(主桥)被PCI总线驱动枚举,从驱动程序的角度上来看可以把root看作一个PCI桥,包含4个地址区间用于描述PCI桥下次一级的总线的地址分配情况,通过扫描PCI root得到root,把从ACPI BIOS获得的资源(中断,总线号)绑定在PCI的root的描述结构acpi_pci_root上。 1.初始化root :acpi_pci_root_init是初始化root的第一步,在这里首先调用注册函数ac

qq_21186033的博客 3702

Bios工程师手边事—IGD VBIOS

现代社会,是计算机技术高速发展的时代。计算机的发展,总是以人们生活的方便为目的。早期的计算机要想看到计算机的计算结果,要根据打孔的卡片来计算输出结果。而现在想看计算机的输出,就方便多了,一台显示器,男女老少皆能看懂。     显示器只是一个输出终端,计算机的核心输出设备是显卡。显卡厂商为了使自己的产品更容易销售,便做了一个叫做VBIOS的东西。它使得我们底层系统BIOS开发者可以不必知道显卡的具

zhao_longwei的专栏 1万+

BIOS工程师的平凡之路

ACPI规范: ACPI Specification 概述(基于ACPI_Spec_6_4_Jan22)_anqi8955的专栏-优快云博客 ​​​​​​ACPI Specification 第一章 介绍_anqi8955的专栏-优快云博客 ACPI Specification 第二章 条款的定义_anqi8955的专栏-优快云博客 ACPI Specification 第三章 AC

weixin_44041504的博客 1313

BIOS工程师手边事—Keyboard

键盘作入计算机系统中的人机交互输入设备,其重要性不言而喻。USB键盘驱动较为复杂,需要USB控制器驱动,USB总线驱动和USB键盘驱动,内容比较繁杂。以后有空再来整理这方面的内容。今天重点整理一下笔记本中的矩阵键盘相关知识。 嵌入式BIOS部分: 1,配置矩阵键盘表: 查看如上图所示的矩阵键盘丝印图,对照键盘接口配置矩阵键盘表。虽然各个EC厂商代码的矩阵键盘表配置方式都不一样,但

zhao_longwei的专栏 6212

我所知道的EC====>Battery

我所知道的EC====>Battery Battery Information  探测Battery的信息是EC一个重要的工作,OS也要通过读取ECRAM中的内容获取电池电量、温度、电压、充、放电电流、Battery是否存在的信息。那么EC如何获得这些信息呢?Battery通常是一个smbus device所以它会接在EC的一组smbus上,而Battery的spec上会给

Dig into computer system. 1万+

【BIOS测试流程介绍】

BIOS测试流程介绍

华为奋斗者精神 7758

acpi bus 的scan

在acpi子系统中一般我们首先通过下面的方式来注册handler static struct acpi_scan_handler amba_handler = {     .ids = amba_id_list,     .attach = amba_handler_attach, }; void __init acpi_amba_init(void) {     amba_re

jason的笔记 1220
上一篇: BIOS工程师手边事-题前话
下一篇: BIOS工程师手边事—Keyboard
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值