LT8722 no-OS driver
Supported Devices
Overview
The LT8722 is a high performance, high efficiency, monolithic full bridge DC/DC converter. One side of the full bridge is driven by a pulse width modulation (PWM) buck power stage, while the other side of the full bridge is driven by a linear power stage. The LT8722 can deliver up to ±54W of power to its load while only requiring a single inductor. An integrated 25-bit digital-to-analog converter (DAC) is used to control the LT8722 output voltage. Two additional 9-bit DACs control the positive and negative output current limits. An analog output telemetry pin can be used to monitor SPI selectable parameters such as VIN, VOUT, IOUT or the LT8722 junction temperature. The serial peripheral interface (SPI) can be used to configure and control the LT8722 allowing for flexibility to set the desired output voltage, output current limits, voltage limits, switching frequency and control ON/OFF behavior. The SPI operates at up to 10MHz allowing for fast readback and control. The LT8722 operates from a single 3.1V to 15V supply. Silent Switcher techniques are used to minimize EMI/EMC emissions while delivering high efficiency at high switching frequencies. The LT8722 is available in a 3mm × 3mm LQFN package.
Applications
LT8722
Driving a Thermo Electric Cooler (TEC) with Fine Control
Transmit Optical Sub-Assembly (TOSA) Cooling
Erbium Doped Fiber Amplifier (EDFA) Temperature Regulation
Photonic Integrated Circuit (PIC) Cooling
LiDAR Mirror Control
Motor Control
LT8722 Device Configuration
Driver Initialization
In order to be able to use the device, you will have to provide the support for the communication protocol (SPI) alongside and for SWEN and EN GPIO pins.
The first API to be called is lt8722_init. Make sure that it return 0, which means that the driver was initialized correctly.
The initialization API uses the device descriptor and an initialization parameter, which contains a boolean variable start_up_sequence, which if set to true will do the start-up sequence of the device during initialization.
Setting the Switching Frequency
The LT8722 uses a constant frequency PWM architecture that can be programmed to switch from 500kHz to 3MHz through the SW_FRQ_SET register bits and further be adjusted by ±15% through the SW_FRQ_ADJ register bits.
The switching frequency can be set using lt8722_set_sw_frq_set API and the switching frequency can be adjusted using lt8722_set_sw_frq_adj API.
VCC LDO Regulator
An internal low dropout (LDO) regulator produces a 3.4V supply to the VCC pin from VIN when the VCC_VREG register bit is 1. To improve overall efficiency, an external supply between 3.4V to 3.8V can be applied to the VCC pin. When an external supply is used, the VCC_VREG register bit needs to be configured to 0. With this setting, the VCC LDO’s regulation voltage will be reduced to 3.1V. The VCC pin can then be overdriven with an external supply between 3.4V and 3.8V.
The VCC LDO regulator output voltage can be set using lt8722_set_vcc_vreg API.
Setting the Initial Peak Inductor Current
When the PWM driver is enabled, the initial peak inductor current can cause some transient behavior to the output voltage and current for a short period of time. The optimal initial peak inductor current is different for different VIN, switching frequency and inductor values.
The initial peak inductor current can be set using lt8722_set_vc_int API.
LDR Driver Internal Power Mitigation
In some conditions, the power dissipation of the LDR driver can be quite high. The LT8722 integrates power dissipation feedback loops to limit the maximum power dissipation of the LDR driver’s top (M1) and bottom (M2) power devices.
The LDR driver internal power mitigation can be set using lt8722_set_pwr_lim API.
Setting the Output Voltage
The output voltage can be set using lt8722_set_output_voltage API.
PWM Duty Cycle Configuration
The PWM duty cycle can be set using lt8722_set_sys_dc API.
Maximum/Minimum TEC Voltage Limits
The maximum positive and negative TEC voltages are set in the SPIS_OV_CLAMP and SPIS_UV_CLAMP registers respectively. These two registers set the maximum and minimum SPIS_DAC register values and, in turn, set the maximum positive and negative TEC voltages.
The maximum/minimum TEC voltage limits can be set using lt8722_set_spis_ov_clamp and lt8722_set_spis_uv_clamp APIs respectively.
Positive/Negative Output Current Limits
To protect the load, the LT8722 integrates two 9-bit DACs to limit the maximum output currents in both directions independently. Positive current refers to current flowing from LDR to SFB. The current limits can be set in the SPIS_DAC_ILIMP and SPIS_DAC_ILIMN registers.
The positive/negative output current limits can be set using lt8722_set_spis_dac_ilimp and lt8722_set_spis_dac_ilimn APIs respectively.
Status Monitoring
The LT8722 has a status word that can be read using lt8722_get_status API.
Analog Monitoring
Several analog signals can be monitored through the AOUT pin. The signal selection is made in the SPIS_AMUX register. When AOUT_EN = 0, the AOUT pin is tri-stated. The AMUX_TEST bits can be used to confirm the AOUT signal integrity by changing the AOUT pin voltage by a pre-defined amount for the selected signal.
Analog monitoring can be enabled using lt8722_set_aout_en API. The signal selection can be set using lt8722_set_amux API.
Software Reset
Software Reset operation is available through lt8722_reset API.
Shutdown Mode
Shutdown Mode operation is available through lt8722_shutdown API.
LT8722 Driver Initialization Example
struct lt8722_dev *lt8722_dev;
struct no_os_uart_init_param lt8722_uart_ip = {
.device_id = 1,
.baud_rate = 57600,
.size = NO_OS_UART_CS_8,
.platform_ops = &max_uart_ops,
.parity = NO_OS_UART_PAR_NO,
.stop = NO_OS_UART_STOP_1_BIT,
.extra = <8722_uart_extra,
};
struct no_os_spi_spi_param lt8722_spi_ip = {
.device_id = 1,
.extra = <8722_spi_extra,
.max_speed_hz = 100000,
.platform_ops = &max_spi_ops,
.chip_select = 0,
.bit_order = NO_OS_SPI_BIT_ORDER_MSB_FIRST,
.mode = NO_OS_SPI_MODE_0
};
struct no_os_gpio_init_param lt8722_swen_ip = {
.port = 0,
.pull = NO_OS_PULL_NONE,
.number = 21,
.platform_ops = &max_gpio_ops,
.extra = <8722_gpio_extra
};
struct no_os_gpio_init_param lt8722_en_ip = {
.port = 0,
.pull = NO_OS_PULL_NONE,
.number = 20,
.platform_ops = &max_gpio_ops,
.extra = <8722_gpio_extra
};
struct lt8722_init_param lt8722_ip = {
.spi = <8722_spi_ip,
.gpio_swen = <8722_swen_ip,
.gpio_en = <8722_en_ip,
.start_up_sequence = true
};
ret = lt8722_init(<8722_dev, <8722_ip);
if (ret)
goto error;
LT8722 no-OS IIO support
The LT8722 IIO driver comes on top of the LT8722 driver and offers support for interfacing IIO clients through libiio.
LT8722 IIO Device Configuration
Output Channel Attributes
LT8722 IIO device has a single output channel (voltage_0) for the output voltage. The output channel has a total of 5 channel attributes:
output - the output voltage value in millivolts
min - the minimum output voltage value in millivolts
min_available - the list of available minimum output voltage for the output channel
max - the maximum output voltage value in millivolts
max_available - the list of available maximum output voltage for the output channel
Global Attributes
The device has a total of 31 global attributes:
enable_req - ENABLE_REQ state of the device
enable_req_available - ENABLE_REQ available states of the device
swen_req - SWEN_REQ state of the device
swen_req_available - SWEN_REQ available states of the device
sw_frq_set - SW_FRQ_SET state of the device
sw_frq_set_available - SW_FRQ_SET available states of the device
sw_frq_adj - SW_FRQ_ADJ state of the device
sw_frq_adj_available - SW_FRQ_ADJ available states of the device
sys_dc - SYS_DC state of the device
sys_dc_available - SYS_DC available states of the device
vcc_vreg - VCC_VREG state of the device
vcc_vreg_available - VCC_VREG available states of the device
sw_vc_int - SW_VC_INT state of the device
sw_vc_int_available - SW_VC_INT available states of the device
spi_rst - SPI_RST state of the device
spi_rst_available - SPI_RST available states of the device
pwr_lim - PWR_LIM state of the device
pwr_lim_available - PWR_LIM available states of the device
spis_dac - SPIS_DAC state of the device
spis_dac_ilimn - SPIS_DAC_ILIMN state of the device
spis_dac_ilimp - SPIS_DAC_ILIMP state of the device
amux - AMUX state of the device
amux_available - AMUX available states of the device
amux_test - AMUX_TEST state of the device
amux_test_available - AMUX_TEST available states of the device
aout_en - AOUT_EN state of the device
aout_en_available - AOUT_EN available states of the device
en_pin - EN_PIN state of the device
en_pin_available - EN_PIN available states of the device
swen_pin - SWEN_PIN state of the device
swen_pin_available - SWEN_PIN available states of the device
Debug Attributes
swen - indicates whether the PWM is switching
swen_available - SWEN available states of the device
srvo_ilim - indicates whether the output current limit state of the device is active
srvo_ilim_available - SRVO_ILIM available states of the device
srvo_plim - indicates whether the linear regulator power dissapation limit is active
srvo_plim_available - SRVO_PLIM available states of the device
min_ot - indicates whether the PWM switching is limited by the minimum on-time of the device or minimum off-time of the device
min_ot_available - MIN_OT available states of the device
por_occ - indicates whether the a reset has happened since last cleared
por_occ_available - POR_OCC available states of the device
over_current - indicates whether the linear driver over-current fault happened since last cleared
over_current_available - OVER_CURRENT available states of the device
tsd - indicates whether the over-temperature fault happened since last cleared
tsd_available - TSD available states of the device
vcc_uvlo - indicates whether the VCC regulator under-voltage lockout happened since last cleared
vcc_uvlo_available - VCC_UVLO available states of the device
vddio_uvlo - indicates whether the VDDIO regulator under-voltage lockout happened since last cleared
vddio_uvlo_available - VDDIO_UVLO available states of the device
cp_uvlo - indicates whether the charge pump under-voltage lockout happened since last cleared
cp_uvlo_available - CP_UVLO available states of the device
v2p5_uvlo - indicates whether the 2.5V reference under-voltage lockout happened since last cleared
v2p5_uvlo_available - V2P5_UVLO available states of the device
LT8722 IIO Driver Initialization Example
int ret;
struct lt8722_iio_dev *lt8722_iio_dev;
struct lt8722_iio_dev_init_param lt8722_iio_ip = {
.lt8722_init_param = <8722_ip,
};
struct iio_app_desc *app;
struct iio_app_init_param app_init_param = { 0 };
ret = lt8722_iio_init(<8722_iio_dev, <8722_iio_ip);
if (ret)
goto exit;
struct iio_app_device iio_devices[] = {
{
.name = "lt8722",
.dev = lt8722_iio_dev,
.dev_descriptor = lt8722_iio_dev->iio_dev,
}
};
app_init_param.devices = iio_devices;
app_init_param.nb_devices = NO_OS_ARRAY_SIZE(iio_devices);
app_init_param.uart_init_params = lt8722_uart_ip;
ret = iio_app_init(&app, app_init_param);
if (ret)
goto remove_iio_lt8722;
return iio_app_run(app);