OpenBMC开发笔记系列——(四)sdr配置

sensor.yaml文件配置

此文件主要是用作转换成IPMI sdr list格式的配置文件

配置参考:

 

配置信息解释:

153:Sensor Number。

bExp:上式中的k1。

interfaces: xyz.openbmc_project.Sensor.Value: Value:获取Value值的接口。

type: double:类型为double

multiplierM: 2:上式中的M值为2。

path: /xyz/openbmc_project/sensors/voltage/P3V3:该Sensor的Path。

rExp: -2:上式中的k2。

sensorType: 2:IPMI标准规范对应的SensorType,电压为0x02。

unit: xyz.openbmc_project.Sensor.Value.Unit.Volts:单位。

发送IPMI命令后获取到的信息如下图:

 

由于使用IPMI命令获取SDR信息时,它所传输的数据以1个字节进行存储,最大表示范围是[0,255],因此,我们需要根据IPMI文档对其进行一定的处理,需要根据以下公式进行转换。

在发送ipmitool sdr list命令后,会根据相应的Sensor名称,通过busctl call命令获取到相关Value值。之后将所获取数值作为y值代入上式,求出x值,作为传输的数据,要注意的是上式中x是一个无符号整型、占据1字节的数据。之后到达用户端,再将x值代入求得实际Value值。

例:

PSU_VIN : 最大阈值230V

multiplierM=(最大阈值 - offsetB10 ^bExp) /255向上取整数。

M最大255 得出offsetB=165  bExp = 3  rExp控制小数位 = -3

PSU_Vout:最大值 13V

offsetB = 0 bExp = 0 则 M=52 rExp控制小数位 = -3


参考下面说法:

multiplierM #ipmi协议中的算子,一般multiplierM*255 要稍大于可能的最大值,以保证精度
offsetB #偏移量
bExp #offsetB的指数,一般给0
unit #传感器单位,配置文件做了转换为字符串,具体见ipmi协议2.0中42.17小节
scale #缩放因子,是10的指数,一般温度电压等都是-3,即读取值是实际值的1000倍
rExp #和scale一样的指数,一般给0

1、scale是用于ipmid程序将从传感器中得到的值转化成实际值,一般hwmonz子系统中,传感器驱动创建的文件中存放的都是将实际值放大1000倍的值,因此sclae=-3 。如果自己写的驱动或者创建的文件中存放的值是实际值,则scale=0。

如hwmon子系统创建的文件 /sys/class/hwmon/hwmon1/temp1_input中的值是52000,则scal=-3。
如自己创建的文件/var/hwmon/hwmon0/temp1_input中值是52,则scale=0。

2、ipmi协议中一般阈值型传感器是有计算公式的(参见ipmi协议2.0的36.3小节),在ipmid程序中需要通过计算得到公式的中x值,并返回给发起者(netfn=04,cmd=0x21)。
3、配置文件中配置这些值会转化到ipmi协议数据中(multiplierM一个字节,offsetB一个字节,bExp(低4bits)和rExp(高4bits)一个字节,具体参见ipmi协议第43小节),命令发起者得到数据后,利用公式计算得到实际值,计算值的范围是[ offsetB * 10 ^bExp, multiplierM255 + offsetB * 10 ^bExp] * 10 ^rExp。在不考虑rExp和offsetB的情况下(rExp=bExp=0),计算值y的最大范围是[0,65025](此时 multiplierM=255)。
4、一般除了温度外,offsetB=0,rExp=-3,即计算值y的最大范围是[0, 65.25],为了保证精度,我们可以调小multiplierM值,尽量使最大值稍大于阈值中设置的最大值。快速计算:multiplierM=(最大阈值 - offsetB10 ^bExp) /255向上取整数。

例如例如12V的电压传感器,假设阈值中设置最大上限值是14V,则可以设置 multiplierM = 14000/255 ≈55(向上取整),即配置文件中内容如下:
multiplierM=55
offsetB=0
bExp=0
scale=-3
rExp=-3

5、 一般温度传感器multiplierM=1,offsetB=-127,scale =-3, bExp =0,rExp=0,计算的y值范围是[-127,128]基本满足正常使用情况。

一般温度下限可能到不了-127,我们可以调整offsetB为-100,这样取值范围是[-100, 155]。
如果想提高精度,可以給rExp=-2, bExp=2,multiplierM=100,offsetB=-100,这样取值范围是[-100,155],并且可以显示两位小数。

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值