MAX14919 no-OS driver
Supported Devices
Overview
The MAX14919/MAX14919A industrial-protected quad-channel lowside switch features 140mΩ (typ) on-resistance (RON) per channel with integrated ±1kV/42Ω surge protection for robust operation.
Resistor-settable accurate current limiting provides guaranteed operating currents in the range of 100mA to 800mA. Loads that draw large activation or inrush currents are supported using the 2x inrush load-current option. The outputs can be connected in parallel to achieve higher load currents. The four switches are pin-controlled to allow for simple and fast switching of up to 500kHz.
The MAX14919/MAX14919A features reverse current detection. The MAX14919 implements reverse-current protection by driving an external FET for non-capacitive loads. The MAX14919A has reverse current indication.
Applications
MAX14919
Industrial Digital Outputs
Relay and Solenoid Drivers
PLC and DCS Systems
Motor Control
MAX14919 Device Configuration
Driver Initialization
In order to use the device, you will have to provide support for at least 5 GPIO pins, and 2 more optional GPIO pins in case you want to use those specific device functions:
IN GPIOs x4 (mandatory)
FAULT GPIO (mandatory)
IN_RUSH GPIO (optional - used for current limiting)
REV GPIO (optional - used for detection of reverse current’s polarity)
Theese pins will be initialized alongside the device using max14919_init API.
State Configuration
The MAX14919 OUTPUT channels can be configured with the max14919_set_out API where an state array should be passed as an argument to set the OUTPUT channels state.
Fault Detection
Fault detection is available through max14919_get_fault API.
Current Limiting and Reverse Polarity
Current Limiting is available through the max14919_set_climit API if the IN_RUSH GPIO has been initialized.
Reverse Polarity of the current detection is available through the max14919_detect_rev API if a REV GPIO has been initialized.
MAX14919 Driver Initialization Example
struct max14919_desc *max14919_desc;
struct no_os_gpio_init_param *max14919_in_ip[4] = {
{
.port = 1,
.pull = NO_OS_PULL_NONE,
.number = 0,
.platform_ops = &max_gpio_ops,
.extra = &max14919_gpio_extra_ip,
},
{
.port = 1,
.pull = NO_OS_PULL_NONE,
.number = 1,
.platform_ops = &max_gpio_ops,
.extra = &max14919_gpio_extra_ip,
},
{
.port = 1,
.pull = NO_OS_PULL_NONE,
.number = 2,
.platform_ops = &max_gpio_ops,
.extra = &max14919_gpio_extra_ip,
},
{
.port = 1,
.pull = NO_OS_PULL_NONE,
.number = 3,
.platform_ops = &max_gpio_ops,
.extra = &max14919_gpio_extra_ip,
},
};
struct no_os_gpio_init_param max14919_fault_ip = {
.port = 2,
.pull = NO_OS_PULL_NONE,
.number = 21,
.platform_ops = &max_gpio_ops,
.extra = &max14919_gpio_extra_ip,
};
struct max14919_init_param max14919_ip = {
.in_param = max14919_in_ip,
.fault_param = &max14919_fault_ip,
};
ret = max14919(&max14919_desc, &max14919_ip);
if (ret)
goto error;