1、假设现有 正数 linear11 数据为 0xE850,通过如下转换过程可以得到 real word 值为 10 :
0xE850 = 0b1110 1000 0101 0000 , 则 N = 0b1110 1,Y = 0b000 0101 0000
= -3d
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 数据格式:
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 格式如下:
通常可设 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
写在最后:写作不易,可以的话请帮忙点个赞,谢谢大家!