I want to find if USB IN is powered or not from the Firmware. Is that possible. Please help.
I’ll assume you’re talking about the Electron. This is not possible on the Photon or Core because they don’t have a power management chip (PMIC). Also, I may not have done this in the preferred manner; I tried it for fun because I’d never done it before and was curious. It seems to work for me.
The docs are here, sort of:
https://docs.particle.io/reference/firmware/electron/#input-source-control-register
#include "Particle.h"
bool isUsbPowered(); // forward declaration
PMIC pmic;
bool lastPowerState = false;
void setup() {
pmic.begin();
}
void loop() {
bool powerState = isUsbPowered();
if (powerState != lastPowerState) {
Particle.publish("usbPowered", (powerState ? "true" : "false"), 60, PRIVATE);
lastPowerState = powerState;
}
delay(2000);
}
bool isUsbPowered() {
byte systemStatus = pmic.getSystemStatus();
return ((systemStatus & 0xc0) == 0x40);
}
/*
//System Status Register
//NOTE: This is a read-only register
REG08
BIT
--- VBUS status
7: VBUS_STAT[1] | 00: Unknown (no input, or DPDM detection incomplete), 01: USB host
6: VBUS_STAT[0] | 10: Adapter port, 11: OTG
--- Charging status
5: CHRG_STAT[1] | 00: Not Charging, 01: Pre-charge (<VBATLOWV)
4: CHRG_STAT[0] | 10: Fast Charging, 11: Charge termination done
3: DPM_STAT 0: Not DPM
1: VINDPM or IINDPM
2: PG_STAT 0: Power NO Good :(
1: Power Good :)
1: THERM_STAT 0: Normal
1: In Thermal Regulation (HOT)
0: VSYS_STAT 0: Not in VSYSMIN regulation (BAT > VSYSMIN)
1: In VSYSMIN regulation (BAT < VSYSMIN)ault is 3.5V (101)
0: Reserved
*/
@peekay123 For photon. I understand that it doesnot come with a power management chip. I am building a product on photon in which I have a MCP73831 for charging. No special IC for management. I have replied to you in detail on the same in the other related question that I have raised in the forum.
@rickkas7 Its for photon.
@manihk, I answered you in the other topic. Let’s not have two topics going on this to reduce confusion.