PMBus(Power Management Bus)是一种电源管理总线一种控制电源转换器的开放的标准协议。它脱胎于基于I2C和SMBUS(System Management Bus),但是定义了很多和电源管理相关的命令。可以说是之前的I2C是物理层(具体Slave会有指令集,但只是怎么该slave,没有统一的指令集),而现在的PMbus却有了协议层,如果想用PMbus就必须遵守该规范,这就有了统一的协议,加速了它的推广和应用。现在很多可编程的PowerIC都引用了这个PMbus协议。
小编所在的公司最近就对这样的可编程IC“下手了”。我们把“第一次”给了TI公司的TPSXX(不做广告)电源管理芯片。
• PMBus 运行时控制和状态
–通过调整 VREF 实现运行时电压定位
–使能和禁用每个开关
–故障和状态监视
•用户可配置的 PMBus/I2C 选项,保存在 EEPROM中
–电源接通和关断排序
–可基于固定时间延迟或 PGOOD 实现电源排序
–通过 VREF 配置实现初始电压定位
–针对每个开关调节 PWM 频率
–针对每个开关单独进行 PWM 相位对齐以尽可能减小纹波和电容器尺寸
–可调节每个稳压器的电流限制以优化电感器的尺寸和成本
–软启动时间
一、硬件设计
1.1电感选择
根据电感选择公式
注:is the current ripple in the inductor通常取最大电流的0.1~0.3。Vin为12V±10%
我们需要的电压大概范围是2~6V,电流0.5~2A,为2.2MHZ。代入公式计算得到1.26uH~27.27uH。
选择通常用的值,,电流2A,为2.2MHZ,带入可得2.8uH。
1.2输出电容选择
纹波范围一般会在10mA~500mA,如果选择100mA得以得到输出容大约0.003uF~6.15uF。
选择完电感和输出电容,就可以根据不同的模式连接电路了这里可以自由参考datasheet设计。
二、代码设计
2、1数据格式
图1 Send Byte Protocol With PEC
图2Write Byte Protocol With PEC
When data is transmitted, the lowest order byte is sent first and the highest order byte is sent last.
Within any byte, the most significant bit (MSB) is sent first and the least significant bit (LSB) is sent last.
7位的Slaveaddress是根据I2CADDR上的电阻确定,不同的阻值地址不同。Wr指读写标志位,1指读;0指写。8位的Commandcode这里指器件的寄存器地址。Databyte是向寄存器写入的数值。TPSXX支持的PEC(Packet Error Checking)代码,该代码将在每次读写操作结束时进行验证。PEC计算的内容包括Salver address(包括Wr), Command code和Data bytes for。
2.2 PEC计算
由于TPSXX的PEC是默认使能的,平且该寄存器是只读寄存器。
图3 CAPABILITY COMMAND Data Byte Contents
在发送端和接收端都需要进行PEC的计算。PMbus的PEC计算是采用8-bit循环冗余校验码(cyclic redundancy check)CRC-8。
介绍一下CRC-8:
CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。
图3 参数模型
NAME:参数模型名称。
WIDTH:宽度,即CRC比特数。
POLY:生成项的简写,以16进制表示。例如:CRC-32即是0x04C11DB7,忽略了最高位的"1",即完整的生成项是0x104C11DB7。
INIT:这是算法开始时寄存器(crc)的初始化预置值,十六进制表示。
REFIN:待测数据的每个字节是否按位反转,True或False。
REFOUT:在计算后之后,异或输出之前,整个数据是否按位反转,True或False。
XOROUT:计算结果与此参数异或后得到最终的CRC值。
从上表可以看出CRC-8的生成项C(x) = x8 + x2 + x +1;INIT和XOROUT都是00;REFIN和REFOUT都是false。
具体的计算过程:
将多项式转化为二进制序列,由C(x) = x8+ x2 +x+1可知二进制一共有9位,第8位、第2位、第1位和第0位分别为1,则序列为100000111。
举个例子要计算的数据为24-bit数据da00ff(16进制),多项式的最高次为8,则在数据的后面加上8位0,数据变为da00ff00(16进制),然后使用模2除法(异或运算)除以除数100000111,最终得到的除不尽的余数,变为我们要求的CRC-8结果。
图4模2除法计算
为了得到并行输出的结果,需要把data分解一下。该电源的有效数据是24bits,我们就以24-dit数据为例。Data为D(x),生成项为C(x),Di为D(x)的第i位(0≤i≤23,整数),Dn为D(x)的第n位,且为“1”(0≤n≤23,整数), “^”为异或,“÷”为模二除法。
CRC(x)=D(x)÷C(x) ……………………………………………………①
D(x)= D23^D22^D21^D20^……^D0 ………………………………②
②代入①
CRC(x)=(D23÷C(x))^(D22÷C(x))^……^(D0÷C(x))
如果D(x)为24’hFFFFFF时,D23、D22、……D0都是定值,故他们与生成项C(x)的模二除法的结果是固定的,如表1。如果D(x)中有哪位是”0”,则它对应的模二除法结果就为00。就是说,如果Di为“1”时就按下表中Dn的CRC-8计算结果,如果是“0”那么此位的计算结果就是“00”,可以推出,Di与与Dn的CRC-8计算结果是“&”的关系,如果Dn的CRC-8计算结果相应位为零,此项就可以省区,又异或是按位计算则可并行得到需要的结果。
以CRC-8的第7位的计算为例。
从Dn的CRC-8的计算结果中,最高位为“1”的有D22、D20、d[18]、d[17]、 d[15] 、 d[13]、 d[11] 、d[7] 、 d[6] 、 d[5]。然后对这些位做异或,就可以得到crc[7]。
crc[7] = d[22] ^ d[20] ^ d[18] ^ d[17] ^ d[15] ^ d[13] ^ d[11] ^ d[7] ^ d[6] ^ d[5]
按上述方法可以得到:
crc[0] = d[23] ^ d[21] ^ d[19] ^ d[18] ^ d[16] ^ d[14] ^ d[12] ^ d[8] ^ d[7] ^ d[6] ^ d[0];
crc[1] = d[23] ^ d[22] ^ d[21] ^ d[20] ^ d[18] ^ d[17] ^ d[16] ^ d[15] ^ d[14] ^ d[13] ^ d[12] ^ d[9] ^ d[6] ^ d[1] ^ d[0];
crc[2] = d[22] ^ d[17] ^ d[15] ^ d[13] ^ d[12] ^ d[10] ^ d[8] ^ d[6] ^ d[2] ^ d[1] ^ d[0];
crc[3] = d[23] ^ d[18] ^ d[16] ^ d[14] ^ d[13] ^ d[11] ^ d[9] ^ d[7] ^ d[3] ^ d[2] ^ d[1];
crc[4] = d[19] ^ d[17] ^ d[15] ^ d[14] ^ d[12] ^ d[10] ^ d[8] ^ d[4] ^ d[3] ^ d[2];
crc[5] = d[20] ^ d[18] ^ d[16] ^ d[15] ^ d[13] ^ d[11] ^ d[9] ^ d[5] ^ d[4] ^ d[3];
crc[6] = d[21] ^ d[19] ^ d[17] ^ d[16] ^ d[14] ^ d[12] ^ d[10] ^ d[6] ^ d[5] ^ d[4];
crc[7] = d[22] ^ d[20] ^ d[18] ^ d[17] ^ d[15] ^ d[13] ^ d[11] ^ d[7] ^ d[6] ^ d[5];
数据代号 |
数据 |
Dn的CRC-8 |
D23 |
800000 |
0B |
D22 |
400000 |
86 |
D21 |
200000 |
43 |
D20 |
100000 |
A2 |
D19 |
080000 |
51 |
D18 |
040000 |
AB |
D17 |
020000 |
D6 |
D16 |
010000 |
6B |
D15 |
008000 |
B6 |
D14 |
004000 |
5B |
D13 |
002000 |
AE |
D12 |
001000 |
57 |
D11 |
000800 |
A8 |
D10 |
000400 |
54 |
D9 |
000200 |
2A |
D8 |
000100 |
15 |
D7 |
000080 |
89 |
D6 |
000040 |
C7 |
D5 |
000020 |
E0 |
D4 |
000010 |
70 |
D3 |
000008 |
38 |
D2 |
000004 |
1C |
D1 |
000002 |
0E |
D0 |
000001 |
07 |
表1 分式CRC-8计算结果
三、仿真结果
图5CRC-8程序仿真
图6PMBUS仿真
图5中d[23:0]为需要传输的有效位(需要计算PEC部分),newCRC_D24[7:0]为计算得到的PEC结果。
图6中i2c_scl_out1和i2c_sda1是PMBUS的两根传输线,link_data1是ack应答信号标志位。
总结一下,此次我们用PMbus协议对Power IC进行控制,主要是最PEC部分进行了说明,从最终的结果看,输出电压都在我的预想范围内,可以说取得了不错的效果。在此感谢紫光同创和黑金科技提供的PGL22G硬件平台。