73 #define USE_FAST_MATH 1 78 #define NOT_BUSY 1 << 6 79 #define NOT_TRANS 1 << 4 81 #define NOT_PENDING 1 << 5 169 is_ltc2978 = ((mfr_common & (1 << 2)) == 0);
180 void LT_PMBus::pmbusWriteByteWithPolling(uint8_t
address, uint8_t command, uint8_t
data)
197 uint8_t LT_PMBus::pmbusReadByteWithPolling(uint8_t
address, uint8_t command)
199 uint8_t return_value;
218 uint16_t LT_PMBus::pmbusReadWordWithPolling(uint8_t
address, uint8_t command)
220 uint16_t return_value;
248 vout = Float_to_L16(address, voltage);
283 vout = Float_to_L16(address, voltage);
288 data[2] = 0xFF &
vout;
308 old_vout =
readVout(address,
false);
310 if (voltage >= old_vout)
345 float margin_percent,
float warn_percent,
float fault_percent, uint8_t
page)
364 float margin_percent,
float warn_percent,
float fault_percent, uint8_t
page)
370 if (voltage >= old_vout)
408 vout = Float_to_L16(address, voltage);
443 vout = Float_to_L16(address, voltage);
448 data[2] = 0xFF &
vout;
467 time = Float_to_L11(delay);
486 time = Float_to_L11(rise);
505 time = Float_to_L11(max);
524 time = Float_to_L11(delay);
543 time = Float_to_L11(fall);
562 time = Float_to_L11(max);
583 vout = Float_to_L16(address, voltage);
618 vout = Float_to_L16(address, voltage);
623 data[2] = 0xFF &
vout;
643 vout = Float_to_L16(address, voltage);
678 vout = Float_to_L16(address, voltage);
683 data[2] = 0xFF &
vout;
703 vout = Float_to_L16(address, voltage);
738 vout = Float_to_L16(address, voltage);
743 data[2] = 0xFF &
vout;
763 vout = Float_to_L16(address, voltage);
798 vout = Float_to_L16(address, voltage);
803 data[2] = 0xFF &
vout;
823 vout = Float_to_L16(address, voltage);
858 vout = Float_to_L16(address, voltage);
863 data[2] = 0xFF &
vout;
883 vout = Float_to_L16(address, voltage);
918 vout = Float_to_L16(address, voltage);
923 data[2] = 0xFF &
vout;
941 iout = Float_to_L11(current);
975 iout = Float_to_L11(current);
980 data[2] = 0xFF & iout;
998 iout = Float_to_L11(current);
1032 iout = Float_to_L11(current);
1037 data[2] = 0xFF & iout;
1038 data[3] = iout >> 8;
1055 vin = Float_to_L11(voltage);
1074 vin = Float_to_L11(voltage);
1093 vin = Float_to_L11(voltage);
1112 vin = Float_to_L11(voltage);
1131 iin = Float_to_L11(current);
1150 temp = Float_to_L11(temperature);
1170 temp = Float_to_L11(temperature);
1201 temp = Float_to_L11(temperature);
1207 data[2] = 0xFF & temp;
1208 data[3] = temp >> 8;
1227 temp = Float_to_L11(temperature);
1259 temp = Float_to_L11(temperature);
1264 data[2] = 0xFF & temp;
1265 data[3] = temp >> 8;
1283 temp = Float_to_L11(temperature);
1315 temp = Float_to_L11(temperature);
1320 data[2] = 0xFF & temp;
1321 data[3] = temp >> 8;
1352 temp = Float_to_L11(temperature);
1357 data[2] = 0xFF & temp;
1358 data[3] = temp >> 8;
1401 temp = Float_to_L11(offset);
1422 return L11_to_Float(temp);
1441 return L11_to_Float(temp);
1467 uint8_t data_out[2];
1472 temp_L11 = (data_in[1] << 8) | data_in[0];
1476 return L11_to_Float(temp_L11);
1493 vin_L11 = pmbusReadWordWithPolling(address,
READ_VIN);
1501 return L11_to_Float(vin_L11);
1538 return L16_to_Float_with_polling(address, vout_L16);
1543 return L16_to_Float(address, vout_L16);
1575 uint8_t data_out[2];
1582 vout_L16 = (data_in[1] << 8) | data_in[0];
1587 return L16_to_Float(address, vout_L16);
1607 vout_L16 = pmbusReadWordWithPolling(address,
READ_VOUT);
1621 vout_L16 = pmbusReadWordWithPolling(address,
READ_VOUT);
1623 return L16_to_Float_mode(address, vout_L16);
1629 return L16_to_Float_mode(vout_mode, vout_L16);
1643 vout_L16 = pmbusReadWordWithPolling(address,
VOUT_COMMAND);
1657 vout_L16 = pmbusReadWordWithPolling(address,
VOUT_COMMAND);
1659 return L16_to_Float_mode(address, vout_L16);
1665 return L16_to_Float_mode(vout_mode, vout_L16);
1696 uint8_t data_out[2];
1703 vout_L16 = (data_in[1] << 8) | data_in[0];
1708 return L16_to_Float(address, vout_L16);
1745 return L16_to_Float_with_polling(address, vout_L16);
1750 return L16_to_Float(address, vout_L16);
1781 uint8_t data_out[2];
1788 vout_L16 = (data_in[1] << 8) | data_in[0];
1793 return L16_to_Float(address, vout_L16);
1815 iin_L11 = pmbusReadWordWithPolling(address, command);
1817 iin_L11 = smbus_->
readWord(address, command);
1823 return L11_to_Float(iin_L11);
1848 return L11_to_Float(iout_L11);
1878 uint8_t data_out[2];
1883 iout_L11 = (data_in[1] << 8) | data_in[0];
1887 return L11_to_Float(iout_L11);
1904 iout_L11 = pmbusReadWordWithPolling(address,
READ_IOUT);
1912 return L11_to_Float(iout_L11);
1943 uint8_t data_out[2];
1948 iout_L11 = (data_in[1] << 8) | data_in[0];
1952 return L11_to_Float(iout_L11);
1969 pout_L11 = pmbusReadWordWithPolling(address,
READ_POUT);
1977 return L11_to_Float(pout_L11);
2005 uint8_t data_out[2];
2011 pout_L11 = (data_in[1] << 8) | data_in[0];
2015 return L11_to_Float(pout_L11);
2033 iout_L11 = pmbusReadWordWithPolling(address,
READ_PIN);
2041 return L11_to_Float(iout_L11);
2058 temp_L11 = pmbusReadWordWithPolling(address,
READ_OTEMP);
2066 return L11_to_Float(temp_L11);
2083 temp_L11 = pmbusReadWordWithPolling(address,
READ_ITEMP);
2091 return L11_to_Float(temp_L11);
2116 return L11_to_Float(dc_L11);
2138 return L11_to_Float(temp_L11);
2155 uint8_t data_out[2];
2160 temp_L11 = (data_in[1] << 8) | data_in[0];
2164 return L11_to_Float(temp_L11);
2186 return L11_to_Float(temp_L11);
2240 uint8_t data_out[1];
2252 uint8_t data_out[1];
2264 uint8_t data_out[1];
2276 uint8_t data_out[1];
2288 uint8_t data_out[1];
2300 uint8_t data_out[1];
2312 uint8_t status_byte;
2320 uint8_t status_byte;
2328 uint8_t status_byte;
2336 uint8_t status_byte;
2344 uint8_t status_byte;
2352 uint8_t status_byte;
2360 uint8_t status_byte;
2368 uint16_t status_word;
2399 memcpy(revision, buffer, 7);
2414 model[block_size] =
'\0';
2425 uint8_t status_byte;
2454 uint8_t data_out[2];
2455 uint8_t status_byte;
2460 status_byte = data_in[0];
2472 uint16_t status_word;
2501 uint8_t data_out[2];
2502 uint8_t status_word;
2507 status_word = (data_in[1] << 8) | data_in[0];
2519 uint8_t status_byte;
2582 for (page = 0x00; page <= 0x03; page++)
2590 for (page = 0x00; page <= 0x07; page++)
2633 time = Float_to_L11(delay);
2652 time = Float_to_L11(delay);
2676 for (index = 0; index < no_addresses; index++)
2696 for (index = 0; index < no_addresses; index++)
2711 Serial.print(F(
"Unlock failed during lock on address "));
2712 Serial.println(address, HEX);
2759 return ((status & 0x02) != 0);
2771 uint8_t *data_bytes;
2774 commands =
new uint8_t [no_addresses];
2775 for (index = 0; index < no_addresses; index++)
2776 commands[index] =
PAGE;
2778 data_bytes =
new uint8_t [no_addresses];
2779 for (index = 0; index < no_addresses; index++)
2780 data_bytes[index] = 0xFF;
2782 smbus_->
writeBytes(addresses, commands, data_bytes, no_addresses);
2785 delete [] data_bytes;
2797 uint8_t *data_bytes;
2802 commands =
new uint8_t [no_addresses];
2803 for (index = 0; index < no_addresses; index++)
2806 data_bytes =
new uint8_t [no_addresses];
2807 for (index = 0; index < no_addresses; index++)
2808 data_bytes[index] = 0x80;
2810 smbus_->
writeBytes(addresses, commands, data_bytes, no_addresses);
2813 delete [] data_bytes;
2825 uint8_t *data_bytes;
2830 commands =
new uint8_t [no_addresses];
2831 for (index = 0; index < no_addresses; index++)
2834 data_bytes =
new uint8_t [no_addresses];
2835 for (index = 0; index < no_addresses; index++)
2836 data_bytes[index] = 0x00;
2838 smbus_->
writeBytes(addresses, commands, data_bytes, no_addresses);
2841 delete [] data_bytes;
2853 uint8_t *data_bytes;
2858 commands =
new uint8_t [no_addresses];
2859 for (index = 0; index < no_addresses; index++)
2862 data_bytes =
new uint8_t [no_addresses];
2863 for (index = 0; index < no_addresses; index++)
2864 data_bytes[index] = 0x40;
2866 smbus_->
writeBytes(addresses, commands, data_bytes, no_addresses);
2869 delete [] data_bytes;
2927 uint8_t *data_bytes;
2931 addrs =
new uint8_t [2*no_addresses];
2932 commands =
new uint8_t [2*no_addresses];
2934 for (index = 0; index < 2*no_addresses; index+=2)
2937 addrs[index+1] = addresses[
pos];
2943 data_bytes =
new uint8_t [2*no_addresses];
2945 for (index = 0; index < 2*no_addresses; index+=2)
2948 data_bytes[index+1] = 0xA8;
2952 smbus_->
writeBytes(addrs, commands, data_bytes, 2*no_addresses);
2956 delete [] data_bytes;
2969 uint8_t *data_bytes;
2973 addrs =
new uint8_t [2*no_addresses];
2974 commands =
new uint8_t [2*no_addresses];
2976 for (index = 0; index < 2*no_addresses; index+=2)
2979 addrs[index+1] = addresses[
pos];
2985 data_bytes =
new uint8_t [2*no_addresses];
2987 for (index = 0; index < 2*no_addresses; index+=2)
2990 data_bytes[index+1] = 0x98;
2994 smbus_->
writeBytes(addrs, commands, data_bytes, 2*no_addresses);
2998 delete [] data_bytes;
3005 uint8_t *data_bytes;
3009 addrs =
new uint8_t [2*no_addresses];
3010 commands =
new uint8_t [2*no_addresses];
3012 for (index = 0; index < 2*no_addresses; index+=2)
3015 addrs[index+1] = addresses[
pos];
3021 data_bytes =
new uint8_t [2*no_addresses];
3023 for (index = 0; index < 2*no_addresses; index+=2)
3026 data_bytes[index+1] = 0x80;
3030 smbus_->
writeBytes(addrs, commands, data_bytes, 2*no_addresses);
3034 delete [] data_bytes;
3133 uint8_t rail_address;
3135 return rail_address;
3147 pmbusWriteByteWithPolling(address,
PAGE, page);
3259 while (timeout-- > 0)
3263 if (mfr_common == 0xFF)
3281 uint8_t mfr_eeprom_status;
3283 while (timeout-- > 0)
3287 if (mfr_eeprom_status == 0xFF)
3289 if ((mfr_eeprom_status & 0xC0) == 0)
3302 uint8_t *addresses_on_bus = smbus_->
probe(0x00);
3303 for (len=0; addresses_on_bus[len]!=
'\0'; ++len);
3306 for (i = 0; i < no_addresses; i++)
3310 for (j = 0; j < len; j++)
3313 if (addresses[i] == addresses_on_bus[j])
3325 addresses[i] = 0x00;
3331 while (i < no_addresses)
3333 if (addresses[i] == 0x00)
3336 while (addresses[i] == 0x00 && j < no_addresses)
3338 addresses[
i] = addresses[j];
3339 addresses[j] = 0x00;
3375 float LT_PMBus::L16_to_Float_with_polling(uint8_t
address, uint16_t input_val)
3378 uint8_t vout_mode = (uint8_t)(pmbusReadByteWithPolling(
address,
VOUT_MODE) & 0x1F);
3380 return L16_to_Float_mode(vout_mode, input_val);
3392 float LT_PMBus::L16_to_Float(uint8_t
address, uint16_t input_val)
3397 return L16_to_Float_mode(vout_mode, input_val);
3409 uint16_t LT_PMBus::Float_to_L16(uint8_t
address,
float input_val)
3414 return Float_to_L16_mode(vout_mode, input_val);
3426 float LT_PMBus::L16_to_Float_mode(uint8_t vout_mode, uint16_t input_val)
3429 int8_t exponent = (int8_t) vout_mode & 0x1F;
3432 if (exponent > 0x0F) exponent |= 0xE0;
3435 float mantissa = (float)input_val;
3437 float value = mantissa * pow(2.0, exponent);
3451 uint16_t LT_PMBus::Float_to_L16_mode(uint8_t vout_mode,
float input_val)
3454 int8_t exponent = vout_mode & 0x1F;
3457 if (exponent > 0x0F) exponent |= 0xE0;
3460 uint16_t mantissa = (uint16_t)(input_val / pow(2.0, exponent));
3472 float LT_PMBus::L11_to_Float(uint16_t input_val)
3475 int8_t exponent = (int8_t) (input_val >> 11);
3478 int16_t mantissa = input_val & 0x7ff;
3481 if (exponent > 0x0F) exponent |= 0xE0;
3484 if (mantissa > 0x03FF) mantissa |= 0xF800;
3487 return mantissa * pow(2.0,(
float)exponent);
3495 uint16_t LT_PMBus::Float_to_L11(
float input_val)
3504 int mantissa = (int)(input_val / pow(2.0, exponent));
3509 if ((mantissa >= -1024) && (mantissa <= +1023))
3514 mantissa = (int)(input_val / pow(2.0, exponent));
3516 while (exponent < +15);
3519 uExponent = exponent << 11;
3520 uMantissa = mantissa & 0x07FF;
3523 return uExponent | uMantissa;
void storeToNvmAll(uint8_t *addresses, uint8_t no_addresses)
Store RAM to NVM for list of devices.
void setCmlStatusMask(uint8_t address, uint8_t mask)
Get the CML status mask.
uint8_t waitForNvmDone(uint8_t address)
Read MFR_EEPROM_STATUS until done (LTC388X only)
float readIoutWithPagePlus(uint8_t address, uint8_t page)
Get the measured output current.
void sequenceOff(uint8_t *addresses, uint8_t no_addresses)
Sequence off a list of addresses.
lin16_t float_to_lin16(float xin, lin16m_t vout_mode)
void setMfrStatusMask(uint8_t address, uint8_t mask)
Get the MFR status mask.
void sequenceOn(uint8_t *addresses, uint8_t no_addresses)
Sequence on a list of devices.
void setPageWithPolling(uint8_t address, uint8_t page)
Set the page and poll the busy bit.
float getOtWarnLimitWithPagePlus(uint8_t address, uint8_t page)
Get the over temperature warning limit.
float getOtWarnLimitWithPage(uint8_t address, uint8_t page)
Get the over temperature warning limit.
float readPout(uint8_t address, bool polling)
Get the measured output power.
uint8_t readByte(uint8_t address, uint8_t command)
SMBus read byte command.
uint8_t getPage(uint8_t address)
Get the page.
uint8_t getInputStatusMask(uint8_t address)
Get the input status mask.
#define IOUT_OC_WARN_LIMIT
uint8_t readIoutStatusByte(uint8_t address)
Get the output current status byte.
bool compareRamWithNvm(uint8_t address)
Compare RAM to NVM for device.
#define VOUT_OV_WARN_LIMIT
#define TOFF_MAX_WARN_LIMIT
float getOtWarnLimit(uint8_t address)
Get the over temperature warning limit.
float readOtemp(uint8_t address)
Get the external measured temperature.
bool isLtc2974(uint8_t address)
Determine if the device is from the LTC2974 family, by using the product id in MFR_SPECIAL_ID.
void marginOff(uint8_t address)
Margin rails off.
float readVoutWithPagePlus(uint8_t address, uint8_t page)
Get the measured output voltage.
void marginOffAll(uint8_t *addresses, uint8_t *pages, uint8_t no_addresses)
Margin off a list of rails low.
void setIoutOcWarnLimit(uint8_t address, float current)
Set the over current warning limit.
#define IOUT_OC_FAULT_LIMIT
void setOtWarnLimit(uint8_t address, float temperature)
Set the over temperature warning limit.
uint8_t * probe(uint8_t command)
SMBus bus probe.
void setVoutMarginHigh(uint8_t address, float voltage)
Set the margin high.
void reset(uint8_t address)
Issue reset to one device.
float lin16_to_float(lin16_t lin16_mant, lin16m_t vout_mode)
String status(void)
Returns a descriptive string based on status of pins.
void setVinUvFaultLimit(uint8_t address, float voltage)
Set the input under voltage fault limit.
uint8_t readStatusByte(uint8_t address)
Get the status byte.
void setVoutOvWarnLimit(uint8_t address, float voltage)
Set the over voltage supervisor warning limit.
uint8_t * bricks(uint8_t *addresses, uint8_t no_addresses)
Find bricked devices.
void disableWriteProtectGlobal(void)
Disable the write protect.
float getVoutUvWithPagePlus(uint8_t address, uint8_t page)
Get the under voltage limit.
void setVoutUvFaultLimitWithPagePlus(uint8_t address, float voltage, uint8_t page)
Set the under voltage fault limit.
void setVoutUvWarnLimitWithPagePlus(uint8_t address, float voltage, uint8_t page)
Set the under voltage supervisor warning limit.
void setVoutMax(uint8_t address, float voltage)
Set the maximum output voltage.
uint8_t writeReadBlock(uint8_t address, uint8_t command, uint8_t *block_out, uint16_t block_out_size, uint8_t *block_in, uint16_t block_in_size)
SMBus write then read block command.
Header File for Linduino Libraries and Demo Code.
void storeToNvmGlobal(void)
Store RAM to NVM for all devices.
void storeToNvm(uint8_t address)
Store RAM to NVM.
void setVoutWithPage(uint8_t address, float voltage, uint8_t page)
Set output voltage.
void setIoutStatusMask(uint8_t address, uint8_t mask)
Get the output current status mask.
void enablePec(uint8_t address)
Enable pec for all transactions.
void setOtWarnLimitWithPage(uint8_t address, float temperature, uint8_t page)
Set the over temperature warning limit.
float readItemp(uint8_t address)
Get the internal measured temperature.
void setVoutWithSupervisionWithPagePlus(uint8_t address, float voltage, float margin_percent, float warn_percent, float fault_percent, uint8_t page)
Set output voltage and supervisors.
uint8_t getTemperatureStatusMask(uint8_t address)
Get the temperature status mask.
void setMfrWatchdogFirst(uint8_t address, float delay)
Set the first watchdog timer.
void disableWriteProtect(uint8_t address)
Disable the write protect.
void setUtFaultLimit(uint8_t address, float temperature)
Set the under temperature fault limit.
void beginStoring()
Group Protocol Begin.
void setTonDelay(uint8_t address, float delay)
Set delay before rail turns on.
void setUtWarnLimitWithPagePlus(uint8_t address, float temperature, uint8_t page)
Set the under temperature warning limit.
uint16_t readStatusWord(uint8_t address)
Get the status word.
float readIout(uint8_t address, bool polling)
Get the measured output current.
#define VOUT_OV_FAULT_LIMIT
void readModel(uint8_t address, uint8_t *model)
Get the model.
void execute()
Group Protocol Execute queued commands.
void writeByte(uint8_t address, uint8_t command, uint8_t data)
SMBus write byte command.
void setVoutWithSupervisionWithPage(uint8_t address, float voltage, float margin_percent, float warn_percent, float fault_percent, uint8_t page)
Set output voltage and supervisors.
void clearFaults(uint8_t address)
Clear the faults of the existing page.
void setVoutWithSupervision(uint8_t address, float voltage, float margin_percent, float warn_percent, float fault_percent)
Set output voltage and supervisors.
void setVoutOvFaultLimitWithPage(uint8_t address, float voltage, uint8_t page)
Set the over voltage supervisor fault limit.
void disablePec(uint8_t address)
Disable pec for all transactions.
void setVoutOvWarnLimitWithPage(uint8_t address, float voltage, uint8_t page)
Set the over voltage supervisor warning limit.
float lin11_to_float(lin11_t xin)
float getVoutOvWithPagePlus(uint8_t address, uint8_t page)
Get the output over voltage limit.
void setVoutMarginHighWithPagePlus(uint8_t address, float voltage, uint8_t page)
Set the margin high.
#define MFR_WATCHDOG_T_FIRST
float getVoutUvWithPage(uint8_t address, uint8_t page)
Get the under voltage limit.
void setIoutOcFaultLimitWithPage(uint8_t address, float current, uint8_t page)
Set the over current fault limit.
uint16_t getTemp1Gain(uint8_t address)
Get the temperature 1 gain.
uint8_t readPmbusRevision(uint8_t address)
Get the pmbus revision.
void marginOffGlobal(void)
Margin all rails off.
uint8_t getVoutStatusMask(uint8_t address)
Get the output voltage status mask.
void marginHigh(uint8_t address)
Margin rail high.
void setVoutUvFaultLimit(uint8_t address, float voltage)
Set the under voltage fault limit.
union LT_union_int32_4bytes data
uint8_t waitForNotBusy(uint8_t address)
Read MFR_COMMON until not Busy.
void writeBlock(uint8_t address, uint8_t command, uint8_t *block, uint16_t block_size)
SMBus write block command.
void setVoutUvWarnLimit(uint8_t address, float voltage)
Set the under voltage supervisor warning limit.
void setOtFaultLimitWithPage(uint8_t address, float temperature, uint8_t page)
Set the over temperature fault limit.
void setUtWarnLimitWithPage(uint8_t address, float temperature, uint8_t page)
Set the under temperature warning limit.
#define VOUT_UV_WARN_LIMIT
uint8_t getMfrStatusMask(uint8_t address)
Get the MFR status mask.
uint8_t readStatusByteWithPagePlus(uint8_t address, uint8_t page)
Get the status byte.
float readPin(uint8_t address, bool polling)
Get the measured input power.
void startGroupProtocol(void)
starts group protocol
void setVoutMarginLowWithPage(uint8_t address, float voltage, uint8_t page)
Set the margin low.
void enableWriteProtect(uint8_t address)
Enable the write protect.
#define MFR_TEMP_1_OFFSET
float readVout(uint8_t address, bool polling)
Get the measured output voltage.
void setVoutOvWarnLimitWithPagePlus(uint8_t address, float voltage, uint8_t page)
Set the over voltage supervisor warning limit.
void setVinUvWarnLimit(uint8_t address, float voltage)
Set the input under voltage warning limit.
void setToffMaxWarnLimit(uint8_t address, float max)
Set the maximum time allow to turn off.
float getVoutOvWithPage(uint8_t address, uint8_t page)
Get the output over voltage limit.
uint8_t readMfrStatusByte(uint8_t address)
Get the MFR status byte.
float getVoutOv(uint8_t address, bool polling)
Get the output over voltage limit.
uint8_t readTemperatureStatusByte(uint8_t address)
Get the temperature status byte.
void setVoutStatusMask(uint8_t address, uint8_t mask)
Get the output voltage status mask.
void immediateOffGlobal(void)
Turn off all rails immediately.
uint8_t readInputStatusByte(uint8_t address)
Get the input status byte.
void writeWord(uint8_t address, uint8_t command, uint16_t data)
SMBus write word command.
float readOtempWithPage(uint8_t address, uint8_t page)
Get the external measured temperature.
void writeBytes(uint8_t *addresses, uint8_t *commands, uint8_t *data, uint8_t no_addresses)
SMBus write byte command for a list of addresses.
#define VIN_UV_FAULT_LIMIT
float readPoutWithPage(uint8_t address, uint8_t page)
Get the measured output power.
uint16_t getUserData04(uint8_t address)
Get user data 4.
void resetGlobal(void)
Issue reset to all devices.
float getIoutOcWithPage(uint8_t address, uint8_t page)
Get the over current limit.
#define VIN_OV_FAULT_LIMIT
void setVoutMaxWithPage(uint8_t address, float voltage, uint8_t page)
Set the maximum output voltage.
void setVoutMaxWithPagePlus(uint8_t address, float voltage, uint8_t page)
Set the maximum output voltage.
bool unlockNVM(uint8_t address)
Unlock NVM.
void setOtFaultLimit(uint8_t address, float temperature)
Set the over temperature fault limit.
uint8_t readVoutStatusByte(uint8_t address)
Get the output voltage status byte.
void setVoutMarginLowWithPagePlus(uint8_t address, float voltage, uint8_t page)
Set the margin low.
void setIoutOcFaultLimit(uint8_t address, float current)
Set the over current fault limit.
bool isLtc297x(uint8_t address)
Determine if the device is from the LTC297X family, by using the product id in MFR_SPECIAL_ID.
void setVoutUvWarnLimitWithPage(uint8_t address, float voltage, uint8_t page)
Set the under voltage supervisor warning limit.
void setPage(uint8_t address, uint8_t page)
Set the page.
bool lockNVM(uint8_t address)
Lock NVM.
float getIoutOc(uint8_t address, bool polling)
Get the over current limit.
void marginLowGlobal(void)
Margin all rails low.
float readExternalTemperature(uint8_t address, bool polling)
Get the measured external temperature.
void setInputStatusMask(uint8_t address, uint8_t mask)
Get the input status mask.
#define MFR_COMPARE_USER_ALL
#define TON_MAX_FAULT_LIMIT
uint8_t readStatusCml(uint8_t address)
Get the status CML byte.
void setIoutOcFaultLimitWithPagePlus(uint8_t address, float current, uint8_t page)
Set the over current fault limit.
void restoreFromNvmAll(uint8_t *addresses, uint8_t no_addresses)
Restore list of devices from NVM.
void setUserData03(uint8_t address, uint16_t data)
Set user data 3.
#define MFR_FAULT_LOG_STATUS
void page(uint8_t *addresses, uint8_t no_addresses)
Set the page.
void sequenceOnGlobal(void)
Sequence on all rails.
void marginLowAll(uint8_t *addresses, uint8_t *pages, uint8_t no_addresses)
Margin a list of rails low.
void clearAllFaults(uint8_t address)
Clear all the faults for all pages.
uint16_t readWord(uint8_t address, uint8_t command)
SMBus read word command.
void setVinOvFaultLimit(uint8_t address, float voltage)
Set the input over voltage fault limit.
LT_PMBus(LT_SMBus *smbus)
Construct a LT_PMBus.
void setVoutOvFaultLimit(uint8_t address, float voltage)
Set the over voltage supervisor fault limit.
uint8_t readStatusByteWithPage(uint8_t address, uint8_t page)
Get the status byte.
uint16_t getSpareData0(uint8_t address)
Get spare data 0.
uint8_t getIoutStatusMask(uint8_t address)
Get the output current status mask.
void marginLow(uint8_t address)
Margin rails low.
void setToffFall(uint8_t address, float fall)
Set the turn off fall time.
void setVoutMarginHighWithPage(uint8_t address, float voltage, uint8_t page)
Set the margin high.
void sendByte(uint8_t address, uint8_t command)
SMBus send byte command.
uint8_t readMfrFaultLogStatusByte(uint8_t address)
Get the fault log status byte.
float getVoutUv(uint8_t address, bool polling)
Get the under voltage limit.
float getIoutOcWithPagePlus(uint8_t address, uint8_t page)
Get the over current limit.
#define VIN_UV_WARN_LIMIT
float readInternalTemperature(uint8_t address, bool polling)
Get the measured internal temperature.
void setVoutOvFaultLimitWithPagePlus(uint8_t address, float voltage, uint8_t page)
Set the over voltage supervisor fault limit.
float readIin(uint8_t address, bool polling)
Get the input current.
#define IIN_OC_WARN_LIMIT
void setUserData04(uint8_t address, uint16_t data)
Set user data 4.
virtual LT_I2CBus * i2cbus(void)=0
void setVoutWithPagePlus(uint8_t address, float voltage, uint8_t page)
Set output voltage.
void setIoutOcWarnLimitWithPagePlus(uint8_t address, float current, uint8_t page)
Set the over current warning limit.
float getTemp1Offset(uint8_t address)
Get the temperature 1 offset.
void setTemp1Offset(uint8_t address, float offset)
Set the temperature 1 offset.
void setIinOcWarnLimit(uint8_t address, float current)
Set the input over current warning limit.
void setVinOvWarningLimit(uint8_t address, float voltage)
Set the input over voltage warning limit.
#define STATUS_MFR_SPECIFIC
uint8_t readCmlStatusByte(uint8_t address)
Get the CML status byte.
bool isLtc2978(uint8_t address)
Determine if the device is a LTC2978/A by looking at bit 2 (RESERVED2) in the MFR_COMMON.
void sequenceOffGlobal(void)
Sequence off all rails.
void setOtWarnLimitWithPagePlus(uint8_t address, float temperature, uint8_t page)
Set the over temperature warning limit.
void setUtWarnLimit(uint8_t address, float temperature)
Set the under temperature warning limit.
float readVin(uint8_t address, bool polling)
Get the input voltage.
void setRailAddress(uint8_t address, uint8_t rail_address)
Set rail address of a Controller.
uint32_t getSpeed()
Get the speed of the bus.
void setToffDelay(uint8_t address, float delay)
Set the delay before the rail turns off.
void clearFaultsGlobal(void)
Clear all the faults for all pages of all devices.
uint8_t readBlock(uint8_t address, uint8_t command, uint8_t *block, uint16_t block_size)
SMBus read block command.
void setTemperatureStatusMask(uint8_t address, uint8_t mask)
Get the temperature status mask.
void setVout(uint8_t address, float voltage)
Set output voltage.
void executeGroupProtocol(void)
ends group protocol
void setOtFaultLimitWithPagePlus(uint8_t address, float temperature, uint8_t page)
Set the over temperature fault limit.
void setMfrWatchdog(uint8_t address, float delay)
Set watchdog timer.
void restoreFromNvm(uint8_t address)
Restore device from NVM.
bool is_ltc2978(uint8_t address)
void setTonRise(uint8_t address, float rise)
Set the turn on rise time.
void setVoutMarginLow(uint8_t address, float voltage)
Set the margin low.
#define MFR_EEPROM_STATUS
float readPoutWithPagePlus(uint8_t address, uint8_t page)
Get the measured output power.
uint16_t readMfrSpecialId(uint8_t address)
Get speical ID.
uint8_t getCmlStatusMask(uint8_t address)
Get the CML status mask.
void immediateOff(uint8_t *addresses, uint8_t no_addresses)
Turn off all devices immediately.
lin11_t float_to_lin11(float xin)
#define VOUT_UV_FAULT_LIMIT
void setUtFaultLimitWithPage(uint8_t address, float temperature, uint8_t page)
Set the under temperature fault limit.
PsmDeviceType deviceType(uint8_t address)
Get the type of PSM device.
uint16_t readStatusWordWithPage(uint8_t address, uint8_t page)
Get the status word.
float getVout(uint8_t address, bool polling)
Get the set output voltage.
void restoreFromNvmGlobal(void)
Restore all devices from NVM.
static uint16_t current
the current measurement from the LTC3335's counter test mode.
void marginHighGlobal(void)
Margin all rails high.
void setTonMaxFaultLimit(uint8_t address, float max)
Set the maximum time allow for turn on.
#define VIN_OV_WARN_LIMIT
void marginHighAll(uint8_t *addresses, uint8_t *pages, uint8_t no_addresses)
Margin a list of rails high.
float readVoutWithPage(uint8_t address, uint8_t page)
Get the measured output voltage.
void readRevision(uint8_t address, uint8_t *revision)
Get the slave revision.
void eraseNVM(uint8_t address)
uint16_t getUserData03(uint8_t address)
Get user data 3.
void setVoutUvFaultLimitWithPage(uint8_t address, float voltage, uint8_t page)
Set the under voltage fault limit.
bool isLtc2977(uint8_t address)
Determine if the device is from the LTC2977 family, by using the product id in MFR_SPECIAL_ID.
void setIoutOcWarnLimitWithPage(uint8_t address, float current, uint8_t page)
Set the over current warning limit.
void setTemp1Gain(uint8_t address, uint16_t gain)
Set the temperature 1 gain.
uint16_t readStatusWordWithPagePlus(uint8_t address, uint8_t page)
Get the status word.
float readIoutWithPage(uint8_t address, uint8_t page)
Get the measured output current.
uint8_t getRailAddress(uint8_t address)
Get the rail address of a Controller.
void setSpareData0(uint8_t address, uint16_t data)
Set spare data 0.
float readDutyCycle(uint8_t address, bool polling)
Get the duty cycle.
void enableWriteProtectGlobal(void)
Enable the write protect.
uint16_t readMfrPads(uint8_t address)
Get the state of the pads.
void setUtFaultLimitWithPagePlus(uint8_t address, float temperature, uint8_t page)
Set the under temperature fault limit.
uint8_t waitForAck(uint8_t address, uint8_t command)
Read with the address and command in loop until ack, then issue stop.