Live demo — data resets daily at 03:00 UTC. Nothing you enter is saved. Server UI →

ESH10000359 - N5 TOP COMM Module

Overview

The ESH10000359 is the top-level communication and control module for N5-series Accordion instruments, providing comprehensive I/O capabilities, communication interfaces, fan control, environmental monitoring, and system-level coordination.

Description

The N5 TOP module serves as the central communication hub for N5 instruments, integrating multiple communication protocols (I²C, UART, SPI, JTAG), multi-purpose analog/digital I/O, dual fan control, and LED status indication. This module coordinates all communication between the host system and peripheral modules while providing voltage output control and environmental monitoring capabilities.

Key Features:

  • Multi-Protocol Communication: I²C, UART, SPI, JTAG interfaces

    • 2× I²C channels with enable control and pull-up configuration
    • UART (RS232, 9600 baud default, /dev/serial0)
    • SPI with enable control
    • JTAG with enable control
    • Independent enable/disable per protocol
  • 8-Channel Analog/Digital I/O: Multi-purpose configurable channels

    • 4× VOUT channels: Voltage output control for communication buses
    • 4× MPIO channels: Bidirectional analog/pseudo-digital I/O
    • 12-bit ADC/DAC resolution (AD5593R)
    • 0-5V range (2× mode enabled)
    • Open-drain and float emulation support
  • Dual Fan Control: Active thermal management

    • 2× PWM-controlled fans (MAX6650)
    • Adjustable speed via ratiometric control (0-1.0)
    • Tachometer feedback for RPM monitoring
    • Configurable maximum RPM per fan
    • Fan enable/inhibit control
  • LED Status Indication: 8× RGB LEDs for system status

    • Individual color control per LED
    • Configurable luminance (0.0-1.0)
    • Status LEDs: I2C1, I2C2, UART, JTAG, SPI, POWER, FAN, ADCIO
    • LP5024 RGB LED driver
  • Numeric Result Acquisition: High-speed multi-channel data capture

    • Synchronized sampling across analog channels
    • Configurable sample rate and sample count
    • Optional data reduction (min/max/avg/stddev)
    • Base64-encoded result transfer

Hardware Details

GPIO Expander:

  • Chip: NXP PI4IOE5V6416
  • I²C Address: 0x20
  • Channels: 16 digital I/O (2 ports × 8 pins)
  • Communication: I²C bus
  • Purpose: Communication protocol enable control, fan control, pull-up configuration

Analog I/O:

  • Chip: Analog Devices AD5593R
  • I²C Address: 0x10
  • Channels: 8 (4 VOUT + 4 MPIO)
  • Resolution: 12-bit ADC/DAC
  • Voltage Range: 0-5V (double ADC/DAC range mode enabled)
  • Communication: I²C bus
  • Features:
    • DoubleAdcRange: true (extends ADC to 2× VREF)
    • DoubleDacRange: true (extends DAC to 2× VREF)
    • ReadTemperature: false (internal temp sensor disabled)

Fan Controllers:

  • Chip: Maxim MAX6650 (2 chips)
  • I²C Addresses: 0x48 (FAN1), 0x1B (FAN2)
  • Control: PWM-based speed control
  • Tachometer: RPM feedback per fan
  • Default Max RPM: 5000
  • Default Desired RPM: 1000
  • Communication: I²C bus

LED Driver:

  • Chip: TI LP5024 RGB LED driver
  • I²C Address: 0x28
  • Channels: 24 (8 RGB LEDs)
  • LEDs: I2C1, I2C2, UART, JTAG, SPI, POWER, FAN, ADCIO
  • Control: PWM-based intensity control (0-255 per color)
  • Communication: I²C bus

Channel Naming Convention

All channels follow the naming pattern: {ModuleIndex}.ESH10000359.{ChannelName}

Where:

  • {ModuleIndex} is the position of the module in the system (typically 0 for top module)
  • ESH10000359 is the module type identifier
  • {ChannelName} is the specific channel name from the table below

Example: Module at position 0, I2C1 channel would be: 0.ESH10000359.I2C1

User-Accessible Channels

Channel Name Type Direction Usage Description
Communication Channels
I2C1 I2C IN/OUT UserAllocatable I²C channel 1 communication (DeviceName: I2C22)
I2C2 I2C IN/OUT UserAllocatable I²C channel 2 communication (DeviceName: I2C21)
UART UART IN/OUT UserAllocatable UART communication (RS232, 9600 baud, /dev/serial0)
SPI SPI IN/OUT UserAllocatable SPI communication
Voltage Output Channels
I2C1_VOUT Analog OUT UserAllocatable Voltage output for I²C channel 1 (0-5V)
I2C2_VOUT Analog OUT UserAllocatable Voltage output for I²C channel 2 (0-5V)
UART_VOUT Analog OUT UserAllocatable Voltage output for UART (0-5V)
SPI_JTAG_VOUT Analog OUT UserAllocatable Voltage output for SPI/JTAG (0-5V)
Multi-Purpose I/O Channels
MPIO0 Analog / Pseudo-Digital IN/OUT UserAllocatable Multi-purpose I/O channel 0 (0-5V, bidirectional)
MPIO1 Analog / Pseudo-Digital IN/OUT UserAllocatable Multi-purpose I/O channel 1 (0-5V, bidirectional)
MPIO2 Analog / Pseudo-Digital IN/OUT UserAllocatable Multi-purpose I/O channel 2 (0-5V, bidirectional)
MPIO3 Analog / Pseudo-Digital IN/OUT UserAllocatable Multi-purpose I/O channel 3 (0-5V, bidirectional)
Configuration Channels
I2C1_EN Digital OUT UserAllocatable Enable control for I²C channel 1 (true=enabled)
I2C2_EN Digital OUT UserAllocatable Enable control for I²C channel 2 (true=enabled)
I2C1_PU Digital OUT UserAllocatable Pull-up enable for I²C channel 1 (true=enabled)
I2C2_PU Digital OUT UserAllocatable Pull-up enable for I²C channel 2 (true=enabled)
JTAG_EN Digital OUT UserAllocatable Enable control for JTAG (true=enabled)
SPI_EN Digital OUT UserAllocatable Enable control for SPI (true=enabled)
VFAN_SEL Digital OUT UserAllocatable Fan voltage select
FAN_INHIBITn Digital OUT UserAllocatable Fan inhibit control (active-low, false=inhibit)
Fan Control Channels
FAN1 Ratiometric OUT UserAllocatable Fan 1 speed control (0.0-1.0, maps to 0-FAN1_MAX_RPM)
FAN1_MAX_RPM Frequency OUT UserAllocatable Fan 1 maximum RPM setting (default: 5000)
FAN1_FREQ Frequency IN UserAllocatable Fan 1 tachometer frequency (measured RPM)
FAN2 Ratiometric OUT UserAllocatable Fan 2 speed control (0.0-1.0, maps to 0-FAN2_MAX_RPM)
FAN2_MAX_RPM Frequency OUT UserAllocatable Fan 2 maximum RPM setting (default: 5000)
FAN2_FREQ Frequency IN UserAllocatable Fan 2 tachometer frequency (measured RPM)
LED Control Channels
LED_LUMINANCE Ratiometric OUT UserAllocatable Global LED brightness control (0.0-1.0, default: 0.7)
I2C1_COLOR Register OUT UserAllocatable I2C1 LED color (named color or #RRGGBB hex)
I2C2_COLOR Register OUT UserAllocatable I2C2 LED color (named color or #RRGGBB hex)
UART_COLOR Register OUT UserAllocatable UART LED color (named color or #RRGGBB hex)
JTAG_COLOR Register OUT UserAllocatable JTAG LED color (named color or #RRGGBB hex)
SPI_COLOR Register OUT UserAllocatable SPI LED color (named color or #RRGGBB hex)
POWER_COLOR Register OUT UserAllocatable POWER LED color (named color or #RRGGBB hex)
FAN_COLOR Register OUT UserAllocatable FAN LED color (named color or #RRGGBB hex)
ADCIO_COLOR Register OUT UserAllocatable ADCIO LED color (named color or #RRGGBB hex)
Data Acquisition
NumericResult NumericResult IN UserAllocatable High-speed multi-channel analog acquisition

Total User Channels: 36

Internal Channels (Not User-Accessible)

The following channels are used for internal system control and are hidden from users:

  • GPIO Expander Signals (all HiddenSystemControl):
    • UART_EN: UART enable control (managed internally)
    • NC1, NC2, NC3, NC4, NC6: Not connected pins
    • OTF1, OTF2: Over-temperature fault inputs
  • LED RGB Channels (all HiddenSystemControl):
    • I2C1_R, I2C1_G, I2C1_B
    • I2C2_R, I2C2_G, I2C2_B
    • UART_R, UART_G, UART_B
    • JTAG_R, JTAG_G, JTAG_B
    • SPI_R, SPI_G, SPI_B
    • POWER_R, POWER_G, POWER_B
    • FAN_R, FAN_G, FAN_B
    • ADCIO_R, ADCIO_G, ADCIO_B

Channel Configuration

Communication Channels

I²C, UART, SPI channels support bus transaction syntax:

I²C Transaction Examples:

// Write to I²C device at address 0x50
SetValues(
    new[] { "0.ESH10000359.I2C1" },
    new[] { "0x50:W:00,01,02,03" }  // Write 4 bytes
);

// Read from I²C device at address 0x48
SetValues(
    new[] { "0.ESH10000359.I2C2" },
    new[] { "0x48:R:4" }  // Read 4 bytes
);

string[] response = GetValues(new[] { "0.ESH10000359.I2C2" });
// response[0] contains comma-separated hex values

UART Configuration:

ConfigureChannels(new[] {
    new UartChannel {
        NetName = "0.ESH10000359.UART",
        Enabled = true,
        BusType = UartBusTypes.RS232,
        Baudrate = 115200,  // Change from default 9600
        DeviceName = "/dev/serial0"
    }
});

// Send UART data
SetValues(
    new[] { "0.ESH10000359.UART" },
    new[] { "Hello World\r\n" }
);

// Read UART response
string[] response = GetValues(new[] { "0.ESH10000359.UART" });

Analog Mode (VOUT and MPIO channels)

Voltage output and analog I/O configuration:

ConfigureChannels(new[] {
    new AnalogChannel {
        NetName = "0.ESH10000359.I2C1_VOUT",
        Enabled = true,
        Direction = DirectionTypes.OUT,
        Value = 3.3,    // 3.3V output
        Gain = 1.0,
        Offset = 0.0
    },
    new AnalogChannel {
        NetName = "0.ESH10000359.MPIO0",
        Enabled = true,
        Direction = DirectionTypes.IN,  // Analog input
        Gain = 1.0,
        Offset = 0.0
    }
});

// Set voltage output
SetValues(
    new[] { "0.ESH10000359.I2C1_VOUT" },
    new[] { "3.3" }  // 3.3V
);

// Read analog input
string[] voltage = GetValues(new[] { "0.ESH10000359.MPIO0" });
// voltage[0] = "2.456" (voltage in string format)

Pseudo-Digital Mode (MPIO channels only)

MPIO channels support pseudo-digital mode with VL/VH thresholds:

ConfigureChannels(new[] {
    new PseudoDigitalChannel {
        NetName = "0.ESH10000359.MPIO1",
        Enabled = true,
        Direction = DirectionTypes.IN,
        VL = 0.8,      // Logic LOW threshold
        VH = 2.0,      // Logic HIGH threshold
        MinIoVoltage = 0.0,
        MaxIoVoltage = 5.0
    }
});

// Read pseudo-digital state
string[] state = GetValues(new[] { "0.ESH10000359.MPIO1" });
// state[0] = "true" or "false"

Special Output Modes:

  • Open-Drain: Set VH < 0 to enable open-drain output
  • Float: Set VL < 0 to enable floating output
// Open-drain output (HIGH = high-Z, LOW = drive VL)
ConfigureChannels(new[] {
    new PseudoDigitalChannel {
        NetName = "0.ESH10000359.MPIO2",
        Direction = DirectionTypes.OUT,
        VL = 0.0,
        VH = -1.0,  // Negative VH enables open-drain
        Value = true  // Sets channel to INPUT (high-Z)
    }
});

Fan Control

Configure fan speed and monitor RPM:

// Set maximum RPM
SetValues(
    new[] { "0.ESH10000359.FAN1_MAX_RPM" },
    new[] { "6000" }  // Set max to 6000 RPM
);

// Set fan speed to 75%
SetValues(
    new[] { "0.ESH10000359.FAN1" },
    new[] { "0.75" }  // 0.75 × 6000 = 4500 RPM target
);

// Read actual RPM
string[] rpm = GetValues(new[] { "0.ESH10000359.FAN1_FREQ" });
// rpm[0] = "4480" (measured tachometer frequency)

LED Control

Set LED colors and brightness:

// Set LED colors
SetValues(
    new[] {
        "0.ESH10000359.POWER_COLOR",
        "0.ESH10000359.I2C1_COLOR",
        "0.ESH10000359.UART_COLOR",
        "0.ESH10000359.LED_LUMINANCE"
    },
    new[] {
        "Green",   // Power LED: Green (system on)
        "Cyan",    // I2C1 LED: Cyan (I2C active)
        "Yellow",  // UART LED: Yellow (UART active)
        "0.5"      // 50% brightness
    }
);

// Use hex colors
SetValues(
    new[] { "0.ESH10000359.SPI_COLOR" },
    new[] { "#FF5733" }  // Custom RGB color
);

Numeric Result Acquisition

High-speed multi-channel data capture:

ConfigureChannels(new[] {
    new NumericResultChannel {
        NetName = "0.ESH10000359.NumericResult",
        Enabled = true,
        NumberOfSamples = 1000,
        SampleRate = 10000,  // 10 kHz
        TargetNetName = "0.ESH10000359.MPIO0,0.ESH10000359.MPIO1",
        ReducedSet = true,   // Get min/max/avg/stddev
        MultiChannel = true
    }
});

// Read acquired data
string[] result = GetValues(new[] { "0.ESH10000359.NumericResult" });
List<NumericResult> data = NumericResult.FromBase64(result[0]);

// Process results
foreach (var channel in data)
{
    Console.WriteLine($"{channel.NetName}:");
    Console.WriteLine($"  Min: {channel.Min}V");
    Console.WriteLine($"  Max: {channel.Max}V");
    Console.WriteLine($"  Avg: {channel.Average}V");
    Console.WriteLine($"  StdDev: {channel.StdDev}V");
}

Programming Interface

Enable I²C Communication:

// Enable I²C channel 1 with pull-ups
SetValues(
    new[] {
        "0.ESH10000359.I2C1_EN",
        "0.ESH10000359.I2C1_PU",
        "0.ESH10000359.I2C1_VOUT"
    },
    new[] {
        "true",  // Enable I²C1
        "true",  // Enable pull-ups
        "3.3"    // Set 3.3V output
    }
);

// Perform I²C transaction
SetValues(
    new[] { "0.ESH10000359.I2C1" },
    new[] { "0x48:R:2" }  // Read 2 bytes from 0x48
);

string[] response = GetValues(new[] { "0.ESH10000359.I2C1" });

Enable UART Communication:

// UART is automatically enabled when accessed
SetValues(
    new[] { "0.ESH10000359.UART" },
    new[] { "AT\r\n" }  // Send AT command
);

string[] response = GetValues(new[] { "0.ESH10000359.UART" });

Control Fan Speed:

// Set fan 1 to run at 50% of maximum
SetValues(
    new[] { "0.ESH10000359.FAN1" },
    new[] { "0.5" }  // 50% × 5000 RPM = 2500 RPM target
);

// Check actual RPM
string[] actualRpm = GetValues(new[] { "0.ESH10000359.FAN1_FREQ" });
Console.WriteLine($"Fan 1 RPM: {actualRpm[0]}");

Update Status LEDs:

// Update LEDs based on system state
void UpdateSystemStatus(string state)
{
    string powerColor = state == "ON" ? "Green" : "Red";
    string fanColor = IsFanRunning() ? "Green" : "Red";
    string i2cColor = IsI2CActive() ? "Cyan" : "Black";

    SetValues(
        new[] {
            "0.ESH10000359.POWER_COLOR",
            "0.ESH10000359.FAN_COLOR",
            "0.ESH10000359.I2C1_COLOR"
        },
        new[] { powerColor, fanColor, i2cColor }
    );
}

Communication Protocol Delegation

The module delegates communication protocol enable/disable to parent modules:

EnableChannel(DeviceTypes.UART, sourceBusChannel, channel);
// Internally:
// - Calls Parent.EnableChannel()
// - Sets UART_EN GPIO to true
// - Updates GPIO expander hardware

This allows coordinated communication routing across multiple modules in the system.

Error Handling

The module implements comprehensive error checking:

  • Invalid Channel: Throws exception if channel does not exist
  • Invalid VL/VH: Validates voltage thresholds are within MinIoVoltage/MaxIoVoltage range
  • Invalid VH <= VL: Ensures high threshold exceeds low threshold
  • Invalid Color: Throws exception for unrecognized color names or malformed hex values
  • Communication Errors: Logged and propagated to caller
  • I²C Transaction Errors: Handled by BusTransactionHelper with retry logic

Example Error:

Invalid VH 0.5V for channel 0.ESH10000359.MPIO0, expected to be greater than VL 0.8V

Best Practices

  1. Set VOUT before communication: Configure voltage outputs before enabling I²C/SPI/JTAG
  2. Enable protocols before use: Set I2C1_EN, SPI_EN, or JTAG_EN to true before transactions
  3. Configure pull-ups for I²C: Enable I2C1_PU/I2C2_PU for proper I²C operation
  4. Monitor fan RPM: Periodically read FAN1_FREQ/FAN2_FREQ to verify fan operation
  5. Use numeric results for high-speed: For > 100 samples, use NumericResultChannel
  6. Batch operations: Use multi-channel SetValues/GetValues for better performance
  7. LED visual feedback: Use LED colors to indicate system status for operators
  8. Handle communication errors: Wrap bus transactions in try-catch blocks
  9. Validate MPIO configuration: Check VL/VH constraints before configuring pseudo-digital
  10. Disable unused protocols: Set enable signals to false to save power

Module Initialization Sequence

On Reset(), the module performs:

  1. Clear existing channel list
  2. Setup LED Driver:
    • Create LP5024 LED driver at I²C address 0x28
    • Initialize 8 RGB LED channels (I2C1, I2C2, UART, JTAG, SPI, POWER, FAN, ADCIO)
    • Create 24 hidden ratiometric channels (8 LEDs × 3 RGB)
    • Create 8 user-accessible color register channels
    • Set initial LED colors (POWER=Green, others=Blue/Red)
  3. Add LED Luminance Channel:
    • Default value: 0.7 (70% brightness)
  4. Setup GPIO Expander:
    • Create PI4IOE5V6416 at I²C address 0x20
    • Configure 16 digital channels:
      • I2C1_EN, I2C2_EN (user-accessible)
      • I2C1_PU, I2C2_PU (user-accessible)
      • JTAG_EN, SPI_EN (user-accessible)
      • VFAN_SEL, FAN_INHIBITn (user-accessible)
      • UART_EN (hidden, managed internally)
      • NC1-NC6, OTF1-OTF2 (hidden, not connected or fault inputs)
  5. Setup ADC/DAC:
    • Create AD5593R at I²C address 0x10
    • Configure 8 analog channels:
      • 4× VOUT (I2C1, I2C2, UART, SPI_JTAG) - output only
      • 4× MPIO (0-3) - bidirectional, dual capability (Analog | PseudoDigital)
    • Enable double ADC/DAC range mode
    • Reset and update ADC hardware
  6. Add NumericResult Channel:
    • Populate possible target names from analog channels
  7. Initialize Fans:
    • Create MAX6650 fan controllers at addresses 0x48 (FAN1) and 0x1B (FAN2)
    • Default max RPM: 5000
    • Default desired RPM: 1000
    • Add 6 fan control channels per fan:
      • FAN{1,2}: Ratiometric speed control
      • FAN{1,2}_MAX_RPM: Maximum RPM setting
      • FAN{1,2}_FREQ: Tachometer feedback
    • Reset, update, and invalidate (read) fan controllers
  8. Add Communication Channels:
    • I2C1 (DeviceName: I2C22)
    • I2C2 (DeviceName: I2C21)
    • SPI
    • UART (RS232, 9600 baud, /dev/serial0)
  9. Update Final LED Colors:
    • POWER: Green (system ready)
    • FAN, ADCIO, I2C1, I2C2, JTAG, SPI: Red (inactive)
    • UART: Red (inactive)

Typical Use Cases

1. I²C Temperature Sensor Reading:

// Setup I²C channel
SetValues(
    new[] {
        "0.ESH10000359.I2C1_VOUT",
        "0.ESH10000359.I2C1_EN",
        "0.ESH10000359.I2C1_PU",
        "0.ESH10000359.I2C1_COLOR"
    },
    new[] {
        "3.3",    // 3.3V for sensor
        "true",   // Enable I²C
        "true",   // Enable pull-ups
        "Cyan"    // Visual indication
    }
);

// Read temperature from TMP102 sensor at 0x48
SetValues(
    new[] { "0.ESH10000359.I2C1" },
    new[] { "0x48:R:2" }
);
string[] tempBytes = GetValues(new[] { "0.ESH10000359.I2C1" });
// Parse temperature from response

2. UART Communication with DUT:

// Configure UART
ConfigureChannels(new[] {
    new UartChannel {
        NetName = "0.ESH10000359.UART",
        Enabled = true,
        Baudrate = 115200,
        BusType = UartBusTypes.RS232
    }
});

// Send command
SetValues(
    new[] { "0.ESH10000359.UART" },
    new[] { "ID?\r\n" }
);

// Read response
Thread.Sleep(100);  // Allow time for response
string[] response = GetValues(new[] { "0.ESH10000359.UART" });
Console.WriteLine($"Device ID: {response[0]}");

// Update LED to indicate active communication
SetValues(
    new[] { "0.ESH10000359.UART_COLOR" },
    new[] { "Yellow" }
);

3. Thermal Management with Fan Control:

void ManageCooling(double temperatureC)
{
    double fanSpeed;
    string fanColor;

    if (temperatureC < 40)
    {
        fanSpeed = 0.3;  // 30% minimum
        fanColor = "Green";
    }
    else if (temperatureC < 60)
    {
        fanSpeed = 0.5;  // 50% moderate
        fanColor = "Yellow";
    }
    else if (temperatureC < 75)
    {
        fanSpeed = 0.8;  // 80% high
        fanColor = "Orange";
    }
    else
    {
        fanSpeed = 1.0;  // 100% maximum
        fanColor = "Red";
    }

    SetValues(
        new[] {
            "0.ESH10000359.FAN1",
            "0.ESH10000359.FAN2",
            "0.ESH10000359.FAN_COLOR"
        },
        new[] {
            fanSpeed.ToString(),
            fanSpeed.ToString(),
            fanColor
        }
    );
}

4. Multi-Channel Voltage Monitoring:

// Configure MPIO channels for voltage monitoring
ConfigureChannels(new[] {
    new AnalogChannel {
        NetName = "0.ESH10000359.MPIO0",
        Enabled = true,
        Direction = DirectionTypes.IN,
        Gain = 2.0,      // Voltage divider compensation
        Offset = 0.0
    },
    new AnalogChannel {
        NetName = "0.ESH10000359.MPIO1",
        Enabled = true,
        Direction = DirectionTypes.IN,
        Gain = 1.0,
        Offset = 0.0
    }
});

// Read voltages
string[] voltages = GetValues(new[] {
    "0.ESH10000359.MPIO0",
    "0.ESH10000359.MPIO1"
});

Console.WriteLine($"Rail 1: {voltages[0]}V");
Console.WriteLine($"Rail 2: {voltages[1]}V");

5. System Status Dashboard:

void UpdateStatusDashboard()
{
    // Read system parameters
    string[] values = GetValues(new[] {
        "0.ESH10000359.FAN1_FREQ",
        "0.ESH10000359.FAN2_FREQ",
        "0.ESH10000359.MPIO0",  // Temperature sensor
        "0.ESH10000359.MPIO1"   // Supply voltage
    });

    int fan1Rpm = int.Parse(values[0]);
    int fan2Rpm = int.Parse(values[1]);
    double tempC = double.Parse(values[2]) * 100;  // Sensor scaling
    double supplyV = double.Parse(values[3]);

    // Update LED status based on health
    string powerColor = (supplyV > 4.5 && supplyV < 5.5) ? "Green" : "Red";
    string fanColor = (fan1Rpm > 1000 && fan2Rpm > 1000) ? "Green" : "Red";
    string adcioColor = tempC < 70 ? "Green" : "Red";

    SetValues(
        new[] {
            "0.ESH10000359.POWER_COLOR",
            "0.ESH10000359.FAN_COLOR",
            "0.ESH10000359.ADCIO_COLOR"
        },
        new[] { powerColor, fanColor, adcioColor }
    );
}

Debugging and Troubleshooting

Problem: I²C communication fails

  • Check: I2C1_EN or I2C2_EN is set to true
  • Check: I2C1_PU or I2C2_PU is enabled for proper pull-ups
  • Check: I2C1_VOUT or I2C2_VOUT is set to correct voltage (typically 3.3V or 5V)
  • Check: I²C device address is correct
  • Try: Reduce I²C bus speed (if configurable)

Problem: Fan not spinning

  • Check: FAN_INHIBITn is true (not inhibited)
  • Check: FAN1 or FAN2 ratiometric value is > 0.0
  • Check: FAN1_MAX_RPM is set to reasonable value (e.g., 5000)
  • Check: Power supply to fan is connected
  • Read: FAN1_FREQ or FAN2_FREQ to verify tachometer feedback

Problem: Analog channels read incorrect values

  • Check: DoubleAdcRange is enabled (should be true)
  • Check: Gain and Offset are configured correctly
  • Check: Channel direction is set to IN for reading
  • Try: Calibrate using known reference voltage

Problem: UART data corrupted

  • Check: Baudrate matches DUT (default 9600)
  • Check: UART_VOUT voltage level matches DUT requirements
  • Check: Cable connections and grounding
  • Try: Lower baudrate to reduce errors

Problem: LEDs not updating

  • Check: LED_LUMINANCE is > 0.0
  • Check: Color value is valid (named color or hex)
  • Check: LP5024 I²C communication is functional
  • Try: Reset module and reconfigure

Revision History

  • ESH10000359: Current production version
    • 2× I²C channels with enable and pull-up control
    • UART (RS232), SPI, JTAG communication
    • 8× analog/pseudo-digital I/O (4 VOUT + 4 MPIO)
    • AD5593R multi-function I/O (12-bit, 0-5V)
    • 2× PWM fan control with tachometer feedback
    • 8× RGB LED status indication
    • Numeric result acquisition support
    • GPIO expander for protocol enable control
An unhandled error has occurred. Reload 🗙

Rejoining the server...

Rejoin failed... trying again in seconds.

Failed to rejoin.
Please retry or reload the page.

The session has been paused by the server.

Failed to resume the session.
Please retry or reload the page.