PMBUS Linear11 与 Linear16 数据格式转换过程详解

 

一、Linear11 数据格式:

 

7a00040a341042d1b904e9241023ac75.png

Linear11 数据格式如上图由 2 个 byte 组成: 

 

1、其中前面 11 bit Y 为 2's 补码

 

2、剩下 5 bit N 为 2's 补码指数幂

 

Y,N 和 real word “X” 之间关系式为 :X = Y * 2^N 

 

举例:

 

1、假设现有 正数 linear11 数据为 0xE850,通过如下转换过程可以得到 real word 值为 10 :

0xE850 = 0b1110 1000 0101 0000 ,  则 N = 0b1110 1,Y = 0b000 0101 0000

由于 N 和 Y 都为 2's 补码,需要转换为原码才能计算得到其真实值: 

 

★ N = 0b1110 1 ( 2's 补码 ) = 0b1001 0 + 1 (负数原码等于符号位不变,其余位取反加 1)

 = -3d

 

★ Y  = 0b000 0101 0000 ( 2's 补码 ) = 0b000 0101 0000( 正数原码等于 2'S 补码 ) = 80d

 

结果: X (real word) = Y * 2^N = 80 * 2^-3 = 10d,即 linear11 数据 0xE850 转换为十进制数为
 
10,反过来,十进制的 10 对应 linear 11 数据可为 0xE850,但不一定只有 0xE850 ,也可对应
 
0x00A0....,具体需要看 N 的取值,N 的取值一般由电源厂商软体设计者在电源程式上面设定,设
 
定值具体会提现在回报值的高5bit(也就是N值)。

 

2、假设现有 负数  linear11 格式数据为 0x07F6,如下转换过程可得到 real word 值为 -10:

0x07F6 = 0b0000 0111 1111 0110


则 N = 0b0000 0,Y = 0b111 1111 0110


由于 N 和 Y 都为 2's 补码,需要转换为原码才能计算得到其 real value: 


★ N = 0b0000 0 ( 2's 补码 ) = 0b0000 0 ( 正数原码等于 2'S 补码 ) = 0d


★ Y  = 0b111 1111 0110 ( 2's 补码 ) = 0b100 0000 1001 + 1 ( 负数原码等于符号位不变,其余位取

反加 1 ) = 0b100 0000 1010 = -10d


结果: X (real word) = Y * 2^N = -10 * 2^0 = -10d ,即 linear11 数据 0x07F6 转换为十进制数为

-10 ,反过来,十进制的 -10 对应 linear11 数据为 0x07F6,也可对应 0xEFB0....,具体需要看 N

的取值,N 的取值由电源厂商软体设计者在程式上设定,设定值具体会提现在回报值的高5bit(也

就是N值)。

 

二、Linear16 数据格式:

bf04ab99a18641228bb84e9c6dafefc3.png

 

Linear16 数据格式由 3 个 byte 组成:

1、其中 1byte 为 VOUT_MODE(20h command),上图左边部分 

2、另外 2byte 为VOUT_COMMAND(21h command),上图右边部分,但 VOUT_COMMAND 一

般用 READ_VOUT(8Bh) 读值来代替,故以下实例均以8Bh读值作为 VOUT_COMMAND 来计算 


转换公式:

Voltage = V * 2^N

V 是一个 16 bit 无符号数,即图中 VOUT_COMMAND  的 bits [15:0]

N 是一个 5 bit 2's 补码, 即图中 VOUT_MODE 的 bits [4:0]

说明:

PMBUS 中通常与 "输出电压" 相关的转换使用  Linear16 格式,相对于Linear11 不同的是,

Linear16 的组成由 VOUT_MODE 和 VOUT_COMMAND 组成。

其中VOUT_MODE(20h command) data byte 格式如下:

d5457649a86a4971a29e48f094e25584.png

通常可设 VOUT_MODE(20h command) = 0x17 = 0b0001 0111, 即 bits[7:5]= 000b(选用linear格

式),bits[4:0] = 10111b( 即 N = 10111b),N = 0b10111(2's 补码) = 0b11000 + 1 (负数原码等于符

号位不变,其余位取反加1) = 0b11001 = -9d

举例:

假设从 8Bh command 读取到 0x1800

则 V = 0x1800 = 6144d

其中 N = -9d

结果: Voltage = V * 2^N = 6144 * 2^-9 = 12V

 

写在最后:写作不易,可以的话请帮忙点个赞,谢谢大家!

 

最后来学习下 "原码","1’s 反码" 和 "2’s 补码" 相关知识:
 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 32
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 41
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 41
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值