167 lines
No EOL
6.1 KiB
C++
167 lines
No EOL
6.1 KiB
C++
/**
|
|
* @file power.cpp
|
|
* @author Lewis He (lewishe@outlook.com)
|
|
* @license MIT
|
|
* @copyright Copyright (c) 2022
|
|
* @date 2022-10-25
|
|
*
|
|
*/
|
|
|
|
|
|
#ifdef LILYGO_TBEAM_SUPREME_V3_0
|
|
#include <Wire.h>
|
|
#include "XPowersLib.h"
|
|
|
|
|
|
|
|
|
|
#define I2C_SDA 42
|
|
#define I2C_SCL 41
|
|
#define PMU_IRQ 40
|
|
|
|
XPowersLibInterface *PMU = NULL;
|
|
|
|
bool setupPower()
|
|
{
|
|
Serial.println("setupPower");
|
|
|
|
if (!PMU) {
|
|
PMU = new XPowersAXP2101(Wire, I2C_SDA, I2C_SCL);
|
|
if (!PMU->init()) {
|
|
Serial.println("Warning: Failed to find AXP2101 power management");
|
|
delete PMU;
|
|
PMU = NULL;
|
|
} else {
|
|
Serial.println("AXP2101 PMU init succeeded, using AXP2101 PMU");
|
|
}
|
|
}
|
|
|
|
if (!PMU) {
|
|
return false;
|
|
}
|
|
|
|
if (PMU->getChipModel() == XPOWERS_AXP2101) {
|
|
|
|
#if defined(LILYGO_TBEAM_V1_2)
|
|
|
|
PMU->setProtectedChannel(XPOWERS_DCDC1);
|
|
|
|
PMU->disablePowerOutput(XPOWERS_DCDC2);
|
|
PMU->disablePowerOutput(XPOWERS_DCDC3);
|
|
PMU->disablePowerOutput(XPOWERS_DCDC4);
|
|
PMU->disablePowerOutput(XPOWERS_DCDC5);
|
|
|
|
// PMU->disablePowerOutput(XPOWERS_ALDO1);
|
|
// PMU->disablePowerOutput(XPOWERS_ALDO2);
|
|
// PMU->disablePowerOutput(XPOWERS_ALDO3);
|
|
PMU->disablePowerOutput(XPOWERS_ALDO4);
|
|
|
|
PMU->disablePowerOutput(XPOWERS_BLDO1);
|
|
PMU->disablePowerOutput(XPOWERS_BLDO2);
|
|
|
|
PMU->disablePowerOutput(XPOWERS_DLDO1);
|
|
PMU->disablePowerOutput(XPOWERS_DLDO2);
|
|
|
|
PMU->enablePowerOutput(XPOWERS_VBACKUP);
|
|
PMU->enablePowerOutput(XPOWERS_ALDO1);
|
|
PMU->enablePowerOutput(XPOWERS_ALDO2);
|
|
PMU->enablePowerOutput(XPOWERS_ALDO3);
|
|
|
|
PMU->setChargeTargetVoltage(XPOWERS_AXP2101_CHG_VOL_4V4);
|
|
|
|
#elif defined(LILYGO_TBEAM_SUPREME_V3_0)
|
|
|
|
//t-beam m.2 inface
|
|
//gps
|
|
PMU->setPowerChannelVoltage(XPOWERS_ALDO4, 3300);
|
|
PMU->enablePowerOutput(XPOWERS_ALDO4);
|
|
|
|
// lora
|
|
PMU->setPowerChannelVoltage(XPOWERS_ALDO3, 3300);
|
|
PMU->enablePowerOutput(XPOWERS_ALDO3);
|
|
|
|
// Sensor
|
|
PMU->setPowerChannelVoltage(XPOWERS_ALDO1, 3300);
|
|
PMU->enablePowerOutput(XPOWERS_ALDO1);
|
|
|
|
PMU->setPowerChannelVoltage(XPOWERS_ALDO2, 3300);
|
|
PMU->enablePowerOutput(XPOWERS_ALDO2);
|
|
|
|
//Sdcard
|
|
PMU->setPowerChannelVoltage(XPOWERS_BLDO1, 3300);
|
|
PMU->enablePowerOutput(XPOWERS_BLDO1);
|
|
|
|
//face m.2
|
|
PMU->setPowerChannelVoltage(XPOWERS_DCDC3, 3300);
|
|
PMU->enablePowerOutput(XPOWERS_DCDC3);
|
|
|
|
PMU->setPowerChannelVoltage(XPOWERS_DCDC4, XPOWERS_AXP2101_DCDC4_VOL2_MAX);
|
|
PMU->enablePowerOutput(XPOWERS_DCDC4);
|
|
|
|
PMU->setPowerChannelVoltage(XPOWERS_DCDC5, 3300);
|
|
PMU->enablePowerOutput(XPOWERS_DCDC5);
|
|
|
|
|
|
//not use channel
|
|
PMU->disablePowerOutput(XPOWERS_DCDC2);
|
|
// PMU->disablePowerOutput(XPOWERS_DCDC4);
|
|
// PMU->disablePowerOutput(XPOWERS_DCDC5);
|
|
PMU->disablePowerOutput(XPOWERS_DLDO1);
|
|
PMU->disablePowerOutput(XPOWERS_DLDO2);
|
|
PMU->disablePowerOutput(XPOWERS_VBACKUP);
|
|
|
|
#endif
|
|
}
|
|
|
|
PMU->enableSystemVoltageMeasure();
|
|
PMU->enableVbusVoltageMeasure();
|
|
PMU->enableBattVoltageMeasure();
|
|
PMU->disableTSPinMeasure();
|
|
|
|
Serial.printf("=========================================\n");
|
|
if (PMU->isChannelAvailable(XPOWERS_DCDC1)) {
|
|
Serial.printf("DC1 : %s Voltage: %04u mV \n", PMU->isPowerChannelEnable(XPOWERS_DCDC1) ? "+" : "-", PMU->getPowerChannelVoltage(XPOWERS_DCDC1));
|
|
}
|
|
if (PMU->isChannelAvailable(XPOWERS_DCDC2)) {
|
|
Serial.printf("DC2 : %s Voltage: %04u mV \n", PMU->isPowerChannelEnable(XPOWERS_DCDC2) ? "+" : "-", PMU->getPowerChannelVoltage(XPOWERS_DCDC2));
|
|
}
|
|
if (PMU->isChannelAvailable(XPOWERS_DCDC3)) {
|
|
Serial.printf("DC3 : %s Voltage: %04u mV \n", PMU->isPowerChannelEnable(XPOWERS_DCDC3) ? "+" : "-", PMU->getPowerChannelVoltage(XPOWERS_DCDC3));
|
|
}
|
|
if (PMU->isChannelAvailable(XPOWERS_DCDC4)) {
|
|
Serial.printf("DC4 : %s Voltage: %04u mV \n", PMU->isPowerChannelEnable(XPOWERS_DCDC4) ? "+" : "-", PMU->getPowerChannelVoltage(XPOWERS_DCDC4));
|
|
}
|
|
if (PMU->isChannelAvailable(XPOWERS_DCDC5)) {
|
|
Serial.printf("DC5 : %s Voltage: %04u mV \n", PMU->isPowerChannelEnable(XPOWERS_DCDC5) ? "+" : "-", PMU->getPowerChannelVoltage(XPOWERS_DCDC5));
|
|
}
|
|
if (PMU->isChannelAvailable(XPOWERS_LDO2)) {
|
|
Serial.printf("LDO2 : %s Voltage: %04u mV \n", PMU->isPowerChannelEnable(XPOWERS_LDO2) ? "+" : "-", PMU->getPowerChannelVoltage(XPOWERS_LDO2));
|
|
}
|
|
if (PMU->isChannelAvailable(XPOWERS_LDO3)) {
|
|
Serial.printf("LDO3 : %s Voltage: %04u mV \n", PMU->isPowerChannelEnable(XPOWERS_LDO3) ? "+" : "-", PMU->getPowerChannelVoltage(XPOWERS_LDO3));
|
|
}
|
|
if (PMU->isChannelAvailable(XPOWERS_ALDO1)) {
|
|
Serial.printf("ALDO1: %s Voltage: %04u mV \n", PMU->isPowerChannelEnable(XPOWERS_ALDO1) ? "+" : "-", PMU->getPowerChannelVoltage(XPOWERS_ALDO1));
|
|
}
|
|
if (PMU->isChannelAvailable(XPOWERS_ALDO2)) {
|
|
Serial.printf("ALDO2: %s Voltage: %04u mV \n", PMU->isPowerChannelEnable(XPOWERS_ALDO2) ? "+" : "-", PMU->getPowerChannelVoltage(XPOWERS_ALDO2));
|
|
}
|
|
if (PMU->isChannelAvailable(XPOWERS_ALDO3)) {
|
|
Serial.printf("ALDO3: %s Voltage: %04u mV \n", PMU->isPowerChannelEnable(XPOWERS_ALDO3) ? "+" : "-", PMU->getPowerChannelVoltage(XPOWERS_ALDO3));
|
|
}
|
|
if (PMU->isChannelAvailable(XPOWERS_ALDO4)) {
|
|
Serial.printf("ALDO4: %s Voltage: %04u mV \n", PMU->isPowerChannelEnable(XPOWERS_ALDO4) ? "+" : "-", PMU->getPowerChannelVoltage(XPOWERS_ALDO4));
|
|
}
|
|
if (PMU->isChannelAvailable(XPOWERS_BLDO1)) {
|
|
Serial.printf("BLDO1: %s Voltage: %04u mV \n", PMU->isPowerChannelEnable(XPOWERS_BLDO1) ? "+" : "-", PMU->getPowerChannelVoltage(XPOWERS_BLDO1));
|
|
}
|
|
if (PMU->isChannelAvailable(XPOWERS_BLDO2)) {
|
|
Serial.printf("BLDO2: %s Voltage: %04u mV \n", PMU->isPowerChannelEnable(XPOWERS_BLDO2) ? "+" : "-", PMU->getPowerChannelVoltage(XPOWERS_BLDO2));
|
|
}
|
|
Serial.printf("=========================================\n");
|
|
|
|
|
|
return true;
|
|
}
|
|
|
|
#endif |