MAX22196 no-OS driver#
Supported Devices#
MAX22196 <https://www.analog.com/MAX22196> MAX22194 <https://www.analog.com/MAX22194>
Overview#
The MAX22196 is an industrial octal digital input that translates eight industrial 24V or TTL level inputs to logic level outputs. The device has a serial interface allowing configuration and reading of serialized data through SPI.
The input channels are individually configurable as sinking (p-type) or sourcing (n-type) inputs. Current limiters on each digital input minimize power dissipation while ensuring compliance with the IEC 61131-2 standard. With a single current-setting resistor, the inputs are individually configurable for Type 1/3, Type 2, TTL or HTL (high-impedance 24V levels). The current sinks or sources can be individually disabled.
If using MAX22194 channels 5 to 8 won’t be available so any API call with one of these channels will result in a -EINVAL errno code being returned.
Applications#
Programmable Logic Controllers
Factory Automation
Process Control
MAX22196 Device Configuration#
In order to be able to use the device, you will have to provide the support for the communication protocol (SPI).
The first API to be called is max22196_init. Make sure that it returns 0, which means that the driver was initialized correctly.
Channel configuration#
Each channel can be configured in source mode or sink mode with the max22196_set_mode API. More than that each channel’s voltage threshold state and sink/source current can be set with max22196_chan_cfg API, as well as the channel counter that can be changed for both MSB and LSB Byte’s with the help of max22196_set_chan_cnt, or read with max22196_get_chan_cnt.
Filter configuration#
Each channel also has a filter that can be enabled/disabled, but also have a delay attached to it. The filter data can be set with the help of max22196_filter_set, and read with max22196_filter_get API.
Global configuration#
In case of wanting to configure the global_cfg register, it can be done using the max22196_global_cfg API.
Fault mask configuration#
Any fault mask can be separately configured with max22196_fault_mask_set API, and also read with max22196_fault_mask_get API.
MAX22196 Driver Initialization Example#
struct max22196_desc *max22196;
struct no_os_spi_init_param spi_ip = {
.device_id = 0,
.extra = &max22196_spi_extra,
.max_speed_hz = 100000,
.platform_ops = &max_spi_ops,
.chip_select = 0,
};
struct max22196_init_param max22196_ip = {
.chip_id = ID_MAX22196,
.chip_address = 0,
.comm_desc = &spi_ip,
};
ret = max22196_init(&max22196, &max22196_ip);
if (ret)
goto error;
MAX22196 no-OS IIO support#
The MAX22196 IIO driver comes on top of the MAX22196 driver and offers support for interfacing IIO clients through IIO lib.
MAX22196 IIO Device Configuration#
Channel Attributes#
MAX22196 has a total of 10 channel attributes :
raw - the state of the cannel.
offset - always 0.
scale - always 1.
filter_enable - 0 or 1 (depending on the state of the filter).
filter_delay - The filter’s delay value if it is enabled (otherwise it is 50us).
filter_delay_available - List of delay available values.
di_mode - Digital Input mode, is the mode in which each channel is configured.
di_mode_available - List of digital input modes (Sink/Source).
current_source - Current source to be selected for each channel.
current_source_available - Current sources available for selection.
Global Attributes#
MAX22196 has 7 global attributes that can be configured as enabled/disabled :
refdi_sht_cfg - REFDI pin short detection.
clrf_filtr - Fix all input glitch filters to mid-scale value.
fspi_clr - Configures how the bits in the FAULT1 register are cleared.
led9 - LED9 control. (attribute does not apply to MAX22194).
led_int - LED matrix user control of autonomous control selection.
gpo - Configure LO1 - LO6 outputs to be LED matrix or GPO drivers.
Debug Attributes#
MAX22196 has 12 debug attributes :
fault1 - fault1 register value.
fault2 - fault2 register value.
vmlow_mask - Vm low voltage mask in the FAULT1EN register.
v24uv_mask - V24 undervoltage mask in the FAULT1EN register.
temp_alarm_mask - Temperature alarm mask in the FAULT1EN register.
otshdn1_mask - Thermal shutdown mask in the FAULT1EN register.
fault2_mask - Mask corresponding to FAULT2 bit in the FAULT1EN register.
rfdis_mask - Mask for short-circuit error on the REFDI pin in the FAULT2EN register.
rfdio_mask - Mask for open-circuit error on the REFDI pin in the FAULT2EN register.
otshdn2_mask - System thermal shutdown mask in the FAULT2EN register.
spi8clk_mask - Mask for number of SCLK cycles error in the FAULT2EN register.
vauv_mask - VA undervoltage mask in the FAULT2EN register.
Device Channels#
MAX22196 has a specific API, max22196_iio_setup_channels for configuring the channels at the initialization, therefore the channels can be configured as enabled/disabled and attributes are assigned to each channel (if enabled).
MAX22196 IIO Driver Initialization Example#
struct max22196_iio_desc *max22196_iio_desc;
struct max22196_iio_desc_init_param max22196_iio_ip = {
.max22196_init_param = &max22196_ip,
.chans_enabled = {
true, true, true, false, false, false, false, false
},
};
struct iio_app_desc *app;
struct iio_app_init_param app_init_param = { 0 };
ret = max22196_iio_init(&max22196_iio_desc, &max22196_iio_ip);
if (ret)
goto error;
struct iio_app_device iio_devices[] = {
{
.name = "max22196",
.dev = max22196_iio_desc,
.dev_descriptor = max22196_iio_desc->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 = max22196_uart_ip;
ret = iio_app_init(&app, app_init_param);
if (ret)
goto app_error;
return iio_app_run(app);