當前位置: 首頁 > 工業電子產品 > 其他電子產品 > 開發板,套件,編程器 > 開發板
發布日期:2022-10-14 點擊率:56
MMPF0100是Freescale i.MX6Q SABRESD參考設計中使用的PMIC,集成了完善的系統級電源管理功能,簡化了系統設計,減少設計復雜性并節省物料成本。其優化的性能架構為消費電子、工業和汽車等應用帶來更高的效率和更先進的功能。MMPF0100適合所有i.MX6應用處理器,包括:i.MX6QuadPlus、i.MX6DualPlus、i.MX6SoloLite、i.MX6Solo、i.MX6DualLite、i.MX6Dual和i.MX6Quad。
![]()
如果不是經過特別仔細的調研,硬件工程師一定會忽略一個問題,i.MX6Q SABRESD參考設計中使用的MMPF0100NPEP是已編程的,即輸出電壓及上電時序已經過調整。按照MMPF0100 Datasheet中所描述的,如下圖,MMPF0100F0EP才適配i.MX6 SABRESD參考設計。如果硬件工程師忽略這一問題,就會選用未編程的MMPF0100NPEP,并導致PMIC無法輸出正確的電壓值。
![]()
配合 筆者手上的板卡,F0與NP影響最大的是SW2的輸出電壓,F0情況下SW2輸出電壓為3.3V,NP情況下SW2輸出電壓為3.0V,這足以引起板上某些器件工作異常。以筆者手上的板卡為例,WiFi芯片Qualcomm Atheros AR9582就存在不穩定的情況。
![]()
為了最大限度地改善這一情況,需要通過i.MX6調節MMPF0100輸出電壓值達到預期。通過一段時間的摸索,發現可以通過更改以下文件實現:
ltib/rpm/BUILD/u-boot-2009.08/board/freescale/mx6q_sabresd/mx6q_sabresd.c
其中setup_pmic_voltages()函數用于調整MMPF0100的輸出電壓,原代碼中已經具備調節VGEN3與VGEN5的能力,那么照葫蘆畫瓢,我將setup_pmic_voltages()變更為如下形式:
| 1 | static int setup_pmic_voltages(void) |
| 2 | { |
| 3 | unsigned char value, rev_id = 0 ; |
| 4 | i2c_init(CONFIG_SYS_I2C_SPEED, CONFIG_SYS_I2C_SLAVE); |
| 5 | if (!i2c_probe(0x8)) { |
| 6 | if (i2c_read(0x8, 0, 1, &value, 1)) { |
| 7 | printf("Read device ID error!n"); |
| 8 | return -1; |
| 9 | } |
| 10 | if (i2c_read(0x8, 3, 1, &rev_id, 1)) { |
| 11 | printf("Read Rev ID error!n"); |
| 12 | return -1; |
| 13 | } |
| 14 | printf("Found PFUZE100! deviceid=%x,revid=%xn", value, rev_id); |
| 15 | /*For camera streaks issue,swap VGEN5 and VGEN3 to power camera. |
| 16 | *sperate VDDHIGH_IN and camera 2.8V power supply, after switch: |
| 17 | *VGEN5 for VDDHIGH_IN and increase to 3V to align with datasheet |
| 18 | *VGEN3 for camera 2.8V power supply |
| 19 | */ |
| 20 | /*increase VGEN3 from 2.5 to 2.8V*/ |
| 21 | if (i2c_read(0x8, 0x6e, 1, &value, 1)) { |
| 22 | printf("Read VGEN3 error!n"); |
| 23 | return -1; |
| 24 | } |
| 25 | value &= ~0xf; |
| 26 | value |= 0xa; |
| 27 | if (i2c_write(0x8, 0x6e, 1, &value, 1)) { |
| 28 | printf("Set VGEN3 error!n"); |
| 29 | return -1; |
| 30 | } |
| 31 | /*increase VGEN5 from 2.8 to 3V*/ |
| 32 | if (i2c_read(0x8, 0x70, 1, &value, 1)) { |
| 33 | printf("Read VGEN5 error!n"); |
| 34 | return -1; |
| 35 | } |
| 36 | value &= ~0xf; |
| 37 | value |= 0xc; |
| 38 | if (i2c_write(0x8, 0x70, 1, &value, 1)) { |
| 39 | printf("Set VGEN5 error!n"); |
| 40 | return -1; |
| 41 | } |
| 42 | //Modified by 筆者 |
| 43 | if (i2c_read(0x8, 0x35, 1, &value, 1)) { |
| 44 | printf("Read SW2 error!n"); |
| 45 | return -1; |
| 46 | } |
| 47 | |
| 48 | value &= ~0x3f; |
| 49 | value |= 0x32; |
| 50 | if (i2c_write(0x8, 0x35, 1, &value, 1)) { |
| 51 | printf("Set SW2 error!n"); |
| 52 | return -1; |
| 53 | } |
| 54 |
編譯并下載u-boot至板卡中,發現SW2在u-boot啟動一段時間后,便可以輸出正確的3.3V,提高了系統穩定性。
下一篇: PLC、DCS、FCS三大控
上一篇: TDD模式下Rx對Tx的影