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)ESH10000359is 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 < 0to enable open-drain output - Float: Set
VL < 0to 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
- Set VOUT before communication: Configure voltage outputs before enabling I²C/SPI/JTAG
- Enable protocols before use: Set I2C1_EN, SPI_EN, or JTAG_EN to true before transactions
- Configure pull-ups for I²C: Enable I2C1_PU/I2C2_PU for proper I²C operation
- Monitor fan RPM: Periodically read FAN1_FREQ/FAN2_FREQ to verify fan operation
- Use numeric results for high-speed: For > 100 samples, use NumericResultChannel
- Batch operations: Use multi-channel SetValues/GetValues for better performance
- LED visual feedback: Use LED colors to indicate system status for operators
- Handle communication errors: Wrap bus transactions in try-catch blocks
- Validate MPIO configuration: Check VL/VH constraints before configuring pseudo-digital
- Disable unused protocols: Set enable signals to false to save power
Module Initialization Sequence
On Reset(), the module performs:
- Clear existing channel list
- 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)
- Add LED Luminance Channel:
- Default value: 0.7 (70% brightness)
- 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)
- 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
- Add NumericResult Channel:
- Populate possible target names from analog channels
- 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
- Add Communication Channels:
- I2C1 (DeviceName: I2C22)
- I2C2 (DeviceName: I2C21)
- SPI
- UART (RS232, 9600 baud, /dev/serial0)
- 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