MPS 电源芯片调试文档
目前需要整版调试,其中一点需要实时监测 MPS 电源芯片的Vddn Vddp 电流 & Power consumption(功耗).
通信机制:SMBUS 原理
MPS电源芯片手册: https://download.csdn.net/download/weixin_45384176/21847403
快速整理
既然是基于SM-bus通信原理,那I2c的基础知识就不介绍了, 他的特性请参考手册仔细阅读,我们用软件的角度去查看访问MPS获取我们想要的信息。
- 1 )硬件确定MPS 地址, 即通过硬件连接方式确定I2c设备地址. MPS_ADDR
- 2 )Mps Support PMBUS Commands/Registers (Page0/1). : 有两套命令操作,通过Page0 or Page1 切换.
- 3 )Page0 控制Rail1 , Page1 控制Rail2. Rail在我看来就是通道的意思,硬件连接分别控制Vddn & Vddp 的操作.
在用寄存器
- VOUT_COMMAND (Reg0x21) : 设置对应Rail的参考voltage VID . (我们用来调压)
- READ_VOUT (Reg0x8B) : 读取Rail的 VOSEN-VORTN voltage. (我们可以获取我们写进Reg21的一定换算的数据).
- READ_IOUT (Reg0x8c) : 读取目前Rail的输出电流, 该值是一个实时变化的数据, 我们在加大CPU负载时,电流会加大.
- READ_PIN (Reg0x97) : 读取Rail的输入功耗.
- 重要的Page Reg0: 控制切换Page的操作,即 控制Rail1/Rail2.
Code
72 I2cInitSetFreq (I2cRegBaseAddr, I2C_CTL_CLK, I2C_BUS_RATE, ALGORITHM_3A); //Lock Freq
73
74 Val16 = 0x0; //Page select 0
77 I2cCtlWrite (I2cRegBaseAddr, MPS_ADDR, 0/*Page Reg*/, 0x1, &Val16);
79
81 //Vddn IOUT /*读取Rail1的 输出电流*/
82 I2cCtlRead (I2cRegBaseAddr, MPS_ADDR, 0x8c/*READ_IOUT*/, 0x2, &Val16);
83 DbgPrint (DEBUG_INFO, "CpuVddpVoltageCtrl. QDY Vddn IOUT %lx \n",Val16);
84
85 Val16 = 0x0;
87 I2cCtlWriteNostop (I2cRegBaseAddr, MPS_ADDR, 0x0, 0x1, &Val16);
89 DbgPrint (DEBUG_INFO, "CpuVoltageCtrl..3\n");
90 }
以上为读取Rail1的输出电流,同理切换Page为1可操作Rail2.
协议简单理解为:发MPS地址MPS_ADDR -> 发Command/Register -> 读取数据或写入数据, 其中上下文操作需要有一个整体Index逻辑来作选择。