MAX22190 no-OS driver#
Supported Devices#
Overview#
The MAX22190 is an IEC 61131-2 compliant industrial digital input device. The MAX22190 translates eight, 24V current-sinking, industrial inputs to a serialized SPI-compatible output that interfaces with 3V to 5.5V logic. A current setting resistor allows the MAX22190 to be configured for Type 1, Type 2, or Type 3 inputs. Field wiring is verified for proximity switches, by a second threshold detector on each input. When wire-break is enabled, the active-low FAULT output is asserted and a register flag is set if the input current drops below the wire-break threshold for more than 20ms. Additional diagnostics that assert the active-ow FAULT pin include: overtemperature, low 24V field supply, 24V field supply missing, CRC communication error, etc.
Applications#
MAX22190#
Building Automation
Industrial Automation
Process Automation
Programmable Logic Controllers
MAX22190 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).
The first API to be called is max22190_init. Make sure that it returns 0, which means that the driver was initialized correctly.
Channel Configuration#
Each channel’s state can be set with the max22190_chan_state API. The user can also set a wire break detection for the channel with max22190_wbe_set API, and read the Wire Break state with max22190_wbe_get API.
Filter Configuration#
Filter can be bypassed for each channel separately, although if they are not, the user can set a filter delay. All this can be done with the max22190_filter_set API, and also the user can read the filter configuration for each channel with max22190_filter_get.
Fault Enable Configuration#
Fault Enable bits can be configured with the help of the max22190_fault_enable_set API and read with max22190_fault_enable_get. If an enable bit is set, then the fault will be signaled in the fault register, otherwise it will not.
MAX22190 Driver Initialization Example#
struct max22190_desc *max22190_desc;
struct no_os_spi_init_param max22190_spi_ip = {
.device_id = 0,
.extra = &max22190_spi_extra,
.max_speed_hz = 100000,
.platform_ops = &max_spi_ops,
.chip_select = 1,
};
struct max22190_init_param max22190_ip = {
.comm_param = &max22190_spi_ip,
.crc_en = false,
};
ret = max22190_init(&max22190_desc, &max22190_ip);
if (ret)
goto error;
MAX22190 no-OS IIO support#
The MAX22190 IIO driver comes on top of the MAX22190 driver and offers support for interfacing IIO clients through libiio.
MAX22190 IIO Device Configuration#
Channel Attributes#
MAX22190 has a total of 6 channel attributes:
raw - the state of a channel
offset - always 0
scale - always 1
filter_bypass - determines if the filter is used on the requested channel or not.
filter_delay - if the filter_bypass is set to 1, the filter's delay can be set from here.
filter_delay_available - list of possible filter delay's.
Debug Attributes#
fault1 - fault1 register value
fault2 - fault2 register value
wbg_enable - Wire Break detection asserted to fault pin
24vm_enable - 24V Supply Missing detection asserted to fault pin
24vl_enable - 24V Supply Low detection asserted to fault pin
alrmt1_enable - Alarm 1 threshold detection asserted to fault pin
alrmt2_enable - Alarm 2 threshold detection asserted to fault pin
fault2_enable - Any bit from fault2 is asserted to fault pin
rfwbs_enable - RFWB short detection is asserted to fault pin
rfwbo_enable - RFWB open detection is asserted to fault pin
rfdis_enable - RFDI short detection is asserted to fault pin
rfdio_enable - RFDI open detection is asserted to fault pin
otshdn_enable - Overtemperature shutdown
fault8ck_enable - SPI receives bad number of clock pulses
Device Channels#
MAX22190 has a specific API, max22190_iio_setup_channels for configuring the channels at the initialization, therefore the channels can be enabled or disabled at initialization only.
MAX22190 IIO Driver Initialization Example#
int ret;
struct max22190_iio_desc *max22190_iio_desc;
struct max22190_iio_desc_init_param max22190_iio_ip = {
.max22190_init_param = &max22190_ip,
.ch_enabled = {
true, true, true, false, false, false, false, false
},
};
struct iio_app_desc *app;
struct iio_app_init_param app_init_param = { 0 };
ret = max22190_iio_init(&max22190_iio_desc, &max22190_iio_ip);
if (ret)
goto error;
struct iio_app_device iio_devices[] = {
{
.name = "max22190",
.dev = max22190_iio_desc,
.dev_descriptor = max22190_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 = max22190_uart_ip;
ret = iio_app_init(&app, app_init_param);
if (ret)
goto app_error;
return iio_app_run(app);