簡介
有時候開發板會有些過熱的問題,此時可能會懷疑是否 PMIC 的供電有狀況,通常會由硬體工程師進行量測,搭配軟體工程師讀取 PMIC 暫存器的值,用來確定有無相符。本篇博文重點在提供方法給軟體工程師,於 SPL 期間讀取 PMIC 暫存器的值。
修改 spl.c 檔案
以 i.MX8MP 為例:// board/freescale/imx8mp_evk/spl.c
int power_init_board(void) {
struct udevice *dev;
int ret;
# Define a variable to read pmic value
int value;
ret = pmic_get("pca9450@25", &dev);
if (ret == -ENODEV) {
puts("No pca9450@25\n");
return 0;
}
if (ret != 0)
return ret;
# Read a value from signal PCA9450_XXX
value = pmic_reg_read(dev, PCA9450_XXX);
printf("WPI: PMIC: PCA9450_XXX: 0x%x\n", value);
...
}
power_init_board 是用來初始化開發板供電的 function,可以透過 pmic_reg_read 取得供電腳位的值,其對應電壓請直接參考 PMIC IC 的 Datasheet 。
其中以位址 0x11 的 BUCK1OUT_DVS0 為例(預設值是 0x14 = 0.85V):
Datasheet 上也可以參考 Hex 與電壓對應的值:
附註: 腳位變數可以查 include/power,以 i.MX8MP 來說就是 pca9450.h,位址 0x11 即代表 PCA9450 的 BUCK1OUT_DVS0。
// include/power/pca9450.h
enum {
PCA9450_REG_DEV_ID = 0x00,
PCA9450_INT1 = 0x01,
PCA9450_INT1_MSK = 0x02,
PCA9450_STATUS1 = 0x03,
PCA9450_STATUS2 = 0x04,
PCA9450_PWRON_STAT = 0x05,
PCA9450_SW_RST = 0x06,
PCA9450_PWR_CTRL = 0x07,
PCA9450_RESET_CTRL = 0x08,
PCA9450_CONFIG1 = 0x09,
PCA9450_CONFIG2 = 0x0A,
PCA9450_BUCK123_DVS = 0x0C,
PCA9450_BUCK1OUT_LIMIT = 0x0D,
PCA9450_BUCK2OUT_LIMIT = 0x0E,
PCA9450_BUCK3OUT_LIMIT = 0x0F,
PCA9450_BUCK1CTRL = 0x10,
PCA9450_BUCK1OUT_DVS0 = 0x11,
PCA9450_BUCK1OUT_DVS1 = 0x12,
PCA9450_BUCK2CTRL = 0x13,
PCA9450_BUCK2OUT_DVS0 = 0x14,
PCA9450_BUCK2OUT_DVS1 = 0x15,
...
}
ATU Support
如果你有任何需求,請聯絡 WPI 的 TW ATU 團隊
評論