【ATU Book-i.MX 系列】i.MX8MP 如何在 SPL 期間讀取 PMIC 的值

簡介

有時候開發板會有些過熱的問題,此時可能會懷疑是否 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 團隊

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

評論