
PMBus(Power Management Bus
小编所在的公司最近就对这样的可编程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
l When data is transmitted, the lowest order byte is sent first and the highest order byte is sent last.
l 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硬件平台。