ESH10000540 - Fixture Electronics Sparrow Module
Overview
The ESH10000540 is a comprehensive fixture interface module for Sparrow test systems, providing multi-function analog/digital I/O, power management, audio measurement, communication interfaces, and intelligent connector identification through LED color coding.
Description
The Fixture Electronics Sparrow module serves as a sophisticated interface between Sparrow test systems and custom test fixtures. It integrates multiple AD5593R and ADS7828 ADC devices, configurable power supplies, audio measurement capabilities, latch testing, ground switching loads, RS485 differential measurement, and visual connector identification through an RGB LED system.
Key Features:
12 Multi-Purpose I/O Channels (FE_MPIO00-11): Bidirectional analog/digital I/O
- AD5593R-based (dual chips)
- 12-bit ADC/DAC resolution
- Analog and pseudo-digital modes
- 0-5V range (double ADC/DAC mode)
Configurable Power Supplies: Fixture power management
- 5× External power rails (12V, 3.3V, 1.8V, VADJ, VIO)
- Individual enable control per rail
- Power-good status monitoring per rail
- Fault detection (VIO_FAULTn)
- Programmable voltage outputs (VIO_SET, VADJ_SET)
- Voltage and current monitoring for all rails
Audio Measurement: Differential microphone inputs
- 4× Pseudo-differential channels (Left/Right, Positive/Negative)
- Mic bias load control (L/R channels)
- Phantom power load control (L/R channels)
- High sample averaging (50 samples per measurement)
Ground Switching Loads: 4-channel ground switch testing
- Programmable ground switches (GND_SW0-3)
- Voltage measurement per switch (GND_SW0-3_VMEAS)
- Load characterization capability
Latch Testing: Dual latch interface
- Polarity control (LATCH0_POL, LATCH1_POL)
- Reset control (LATCH0_RESETn, LATCH1_RESETn)
- Value readback (LATCH0_VALUE, LATCH1_VALUE)
- Pull configuration (LATCH0_PULL, LATCH1_PULL)
RS485 Interface: Differential measurement
- TX/RX differential voltage measurement
- Pseudo-differential calculation (p - n)
- Communication enable control
Connector Identification: Visual LED coding system
- 6× IDC connectors (A-F) with individual RGB LEDs
- Configurable colors per connector
- 2× Status LEDs for system indication
- LP5024 RGB LED driver
GPIO Control: 40-pin GPIO expander
- Audio control signals
- Load switching
- Latch control
- Power enable/monitoring
- I²C/RS485 control
- User GPIO (4 channels)
High-Speed Acquisition: Numeric result support
- Multi-channel synchronized sampling
- Target any analog input channel
- Base64-encoded data transfer
Calibration Support: Per-channel gain and offset
- Persistent calibration storage
- Automatic application on reset
Hardware Details
Multi-Function ADCs (AD5593R):
ADC1:
- Chip: Analog Devices AD5593R
- I²C Address: 0x11
- Channels: 8 (FE_MPIO00-07)
- Resolution: 12-bit ADC/DAC
- Bidirectional: IN/OUT configurable per channel
- Modes: Analog and pseudo-digital
ADC2:
- Chip: Analog Devices AD5593R
- I²C Address: 0x10
- Channels: 8 total
- FE_MPIO08-11 (4 bidirectional I/O)
- VIO_SET (DAC output, gain=2, default 3.3V)
- VADJ_SET (DAC output, gain=2, default 1.8V)
- VMON_VIO (ADC input, gain=1)
- VMON_VADJ (ADC input, gain=2)
- Resolution: 12-bit ADC/DAC
Configuration: Both AD5593R devices use:
- DoubleAdcRange: true (extends to 2× VREF, ~0-5V)
- DoubleDacRange: true (extends to 2× VREF, ~0-5V)
- ReadTemperature: false
Monitoring ADCs (ADS7828):
ADC3 (External Rail Monitoring):
- Chip: TI ADS7828 12-bit ADC
- I²C Address: 0x4A
- Channels: 8
- VMON_EXT_12V (gain=5.3)
- VMON_EXT_3V3 (gain=2)
- VMON_EXT_1V8 (gain=1)
- IMON_EXT_12V (gain=1/IMON_GAIN, measures current in A)
- IMON_EXT_3V3 (gain=1/IMON_GAIN, measures current in A)
- IMON_EXT_1V8 (gain=1/IMON_GAIN, measures current in A)
- IMON_EXT_VADJ (gain=1/IMON_GAIN, measures current in A)
- IMON_EXT_VIO (gain=1/IMON_GAIN, measures current in A)
- IMON_GAIN constant: 6650 × 0.000182 ≈ 1.2103
ADC4 (Load & RS485 Monitoring):
- Chip: TI ADS7828 12-bit ADC
- I²C Address: 0x49
- Channels: 8 (4 single-ended + 4 differential pairs)
- GND_SW0-3_VMEAS (gain=2, ground switch voltage)
- RS485_RX_VMEASp/n (gain=1, differential pair)
- RS485_TX_VMEASp/n (gain=1, differential pair)
- NumberOfSamples: 50 (averaging for stable readings)
- Pseudo-differential channels:
- RS485_RX_VMEAS (calculated: VMEASp - VMEASn)
- RS485_TX_VMEAS (calculated: VMEASp - VMEASn)
ADC5 (Audio Monitoring):
- Chip: TI ADS7828 12-bit ADC
- I²C Address: 0x48
- Channels: 8 (4 differential pairs)
- MIC_IN_R_NEGp/n (Right channel negative)
- MIC_IN_R_POSp/n (Right channel positive)
- MIC_IN_L_NEGp/n (Left channel negative)
- MIC_IN_L_POSp/n (Left channel positive)
- NumberOfSamples: 50 (high averaging for audio)
- Pseudo-differential channels:
- MIC_IN_R_NEG (calculated: NEGp - NEGn)
- MIC_IN_R_POS (calculated: POSp - POSn)
- MIC_IN_L_NEG (calculated: NEGp - NEGn)
- MIC_IN_L_POS (calculated: POSp - POSn)
GPIO Expander:
- Chip: NXP PCA950x (compatible with PI4IOE5V6416)
- I²C Address: 0x20
- Channels: 40 digital I/O (5 banks × 8 pins)
- DeviceName: "U1"
- Communication: I²C bus
LED Driver:
- Chip: TI LP5024 RGB LED driver
- I²C Address: 0x28
- Channels: 24 (8 LEDs × 3 RGB)
- LEDs:
- 6× Connector LEDs (CONN_A through CONN_F)
- 2× Status LEDs (STATUS1, STATUS2)
- Default Luminance: 0.7 (70% brightness)
- Color Temperature Compensation:
- Red: 1.0 × luminance
- Green: 1.0 × luminance
- Blue: 0.56 × luminance
- Communication: I²C bus
Channel Naming Convention
All channels follow the naming pattern: {ModuleIndex}.ESH10000540.{ChannelName}
Where:
{ModuleIndex}is the position of the module in the systemESH10000540is the module type identifier{ChannelName}is the specific channel name from the tables below
Example: Module at position 0, MPIO channel 5 would be: 0.ESH10000540.FE_MPIO05
User-Accessible Channels
Multi-Purpose I/O Channels (12 total):
| Channel Name | Type | Direction | Device | Usage | Description |
|---|---|---|---|---|---|
| FE_MPIO00-07 | Analog / Pseudo-Digital | IN/OUT | ADC1 | UserAllocatable | Multi-purpose I/O 00-07 (AD5593R #1, 0-5V) |
| FE_MPIO08-11 | Analog / Pseudo-Digital | IN/OUT | ADC2 | UserAllocatable | Multi-purpose I/O 08-11 (AD5593R #2, 0-5V) |
Power Supply Control & Monitoring (18 channels):
| Channel Name | Type | Direction | Device | Usage | Description |
|---|---|---|---|---|---|
| VIO_SET | Analog | OUT | ADC2 | UserAllocatable | VIO voltage setpoint (DAC, gain=2, default 3.3V) |
| VADJ_SET | Analog | OUT | ADC2 | UserAllocatable | VADJ voltage setpoint (DAC, gain=2, default 1.8V) |
| VMON_VIO | Analog | IN | ADC2 | UserAllocatable | VIO voltage monitor (ADC, gain=1) |
| VMON_VADJ | Analog | IN | ADC2 | UserAllocatable | VADJ voltage monitor (ADC, gain=2) |
| VMON_EXT_12V | Analog | IN | ADC3 | UserAllocatable | External 12V rail voltage (gain=5.3) |
| VMON_EXT_3V3 | Analog | IN | ADC3 | UserAllocatable | External 3.3V rail voltage (gain=2) |
| VMON_EXT_1V8 | Analog | IN | ADC3 | UserAllocatable | External 1.8V rail voltage (gain=1) |
| IMON_EXT_12V | Analog | IN | ADC3 | UserAllocatable | External 12V rail current (A, gain compensated) |
| IMON_EXT_3V3 | Analog | IN | ADC3 | UserAllocatable | External 3.3V rail current (A, gain compensated) |
| IMON_EXT_1V8 | Analog | IN | ADC3 | UserAllocatable | External 1.8V rail current (A, gain compensated) |
| IMON_EXT_VADJ | Analog | IN | ADC3 | UserAllocatable | External VADJ rail current (A, gain compensated) |
| IMON_EXT_VIO | Analog | IN | ADC3 | UserAllocatable | External VIO rail current (A, gain compensated) |
| EXT_12V_EN | Digital | OUT | U1 | UserAllocatable | Enable external 12V rail (true=enabled) |
| EXT_3V3_EN | Digital | OUT | U1 | UserAllocatable | Enable external 3.3V rail (true=enabled) |
| EXT_1V8_EN | Digital | OUT | U1 | UserAllocatable | Enable external 1.8V rail (true=enabled) |
| EXT_VADJ_EN | Digital | OUT | U1 | UserAllocatable | Enable external VADJ rail (true=enabled) |
| EXT_VIO_EN | Digital | OUT | U1 | UserAllocatable | Enable external VIO rail (true=enabled) |
| EXT_12V_PG | Digital | IN | U1 | UserAllocatable | External 12V power-good status (true=good) |
| EXT_3V3_PG | Digital | IN | U1 | UserAllocatable | External 3.3V power-good status (true=good) |
| EXT_1V8_PG | Digital | IN | U1 | UserAllocatable | External 1.8V power-good status (true=good) |
| EXT_VADJ_PG | Digital | IN | U1 | UserAllocatable | External VADJ power-good status (true=good) |
| EXT_VIO_PG | Digital | IN | U1 | UserAllocatable | External VIO power-good status (true=good) |
| EXT_VIO_FAULTn | Digital | IN | U1 | UserAllocatable | External VIO fault indicator (active-low, false=fault) |
Audio Measurement Channels (12 channels):
| Channel Name | Type | Direction | Device | Usage | Description |
|---|---|---|---|---|---|
| MIC_IN_R_NEG | Analog | IN | ADC5 | UserAllocatable | Right mic negative (pseudo-diff: NEGp - NEGn) |
| MIC_IN_R_POS | Analog | IN | ADC5 | UserAllocatable | Right mic positive (pseudo-diff: POSp - POSn) |
| MIC_IN_L_NEG | Analog | IN | ADC5 | UserAllocatable | Left mic negative (pseudo-diff: NEGp - NEGn) |
| MIC_IN_L_POS | Analog | IN | ADC5 | UserAllocatable | Left mic positive (pseudo-diff: POSp - POSn) |
| MIC_BIAS_LOAD_L | Digital | OUT | U1 | UserAllocatable | Left channel mic bias load enable |
| MIC_BIAS_LOAD_R | Digital | OUT | U1 | UserAllocatable | Right channel mic bias load enable |
| PHANTOM_LOAD_L | Digital | OUT | U1 | UserAllocatable | Left channel phantom power load enable |
| PHANTOM_LOAD_R | Digital | OUT | U1 | UserAllocatable | Right channel phantom power load enable |
Ground Switch & Load Channels (8 channels):
| Channel Name | Type | Direction | Device | Usage | Description |
|---|---|---|---|---|---|
| GND_SW0 | Digital | OUT | U1 | UserAllocatable | Ground switch 0 control |
| GND_SW1 | Digital | OUT | U1 | UserAllocatable | Ground switch 1 control |
| GND_SW2 | Digital | OUT | U1 | UserAllocatable | Ground switch 2 control |
| GND_SW3 | Digital | OUT | U1 | UserAllocatable | Ground switch 3 control |
| GND_SW0_VMEAS | Analog | IN | ADC4 | UserAllocatable | Ground switch 0 voltage measurement (gain=2) |
| GND_SW1_VMEAS | Analog | IN | ADC4 | UserAllocatable | Ground switch 1 voltage measurement (gain=2) |
| GND_SW2_VMEAS | Analog | IN | ADC4 | UserAllocatable | Ground switch 2 voltage measurement (gain=2) |
| GND_SW3_VMEAS | Analog | IN | ADC4 | UserAllocatable | Ground switch 3 voltage measurement (gain=2) |
Latch Testing Channels (8 channels):
| Channel Name | Type | Direction | Device | Usage | Description |
|---|---|---|---|---|---|
| LATCH0_POL | Digital | OUT | U1 | UserAllocatable | Latch 0 polarity control |
| LATCH1_POL | Digital | OUT | U1 | UserAllocatable | Latch 1 polarity control |
| LATCH0_RESETn | Digital | OUT | U1 | UserAllocatable | Latch 0 reset (active-low) |
| LATCH1_RESETn | Digital | OUT | U1 | UserAllocatable | Latch 1 reset (active-low) |
| LATCH0_VALUE | Digital | IN | U1 | UserAllocatable | Latch 0 value readback |
| LATCH1_VALUE | Digital | IN | U1 | UserAllocatable | Latch 1 value readback |
| LATCH0_PULL | Digital | IN | U1 | UserAllocatable | Latch 0 pull status (with pull-up) |
| LATCH1_PULL | Digital | IN | U1 | UserAllocatable | Latch 1 pull status (with pull-up) |
RS485 & Communication Channels (5 channels):
| Channel Name | Type | Direction | Device | Usage | Description |
|---|---|---|---|---|---|
| RS485_RX_VMEAS | Analog | IN | ADC4 | UserAllocatable | RS485 RX differential voltage (VMEASp - VMEASn) |
| RS485_TX_VMEAS | Analog | IN | ADC4 | UserAllocatable | RS485 TX differential voltage (VMEASp - VMEASn) |
| RS485_EN | Digital | OUT | U1 | UserAllocatable | RS485 transceiver enable |
| I2C_V_SEL | Digital | OUT | U1 | UserAllocatable | I²C voltage level select |
| I2C_EN | Digital | OUT | U1 | UserAllocatable | I²C transceiver enable |
User GPIO & Miscellaneous (6 channels):
| Channel Name | Type | Direction | Device | Usage | Description |
|---|---|---|---|---|---|
| USR_GPIO1 | Digital | IN | U1 | UserAllocatable | User GPIO 1 (with pull-up) |
| USR_GPIO2 | Digital | IN | U1 | UserAllocatable | User GPIO 2 (with pull-up) |
| USR_GPIO3 | Digital | IN | U1 | UserAllocatable | User GPIO 3 (with pull-up) |
| USR_GPIO4 | Digital | IN | U1 | UserAllocatable | User GPIO 4 (with pull-up) |
| LSHM_PRESENCEn | Digital | IN | U1 | UserAllocatable | LSHM presence detect (active-low) |
Connector LED Control (7 channels):
| Channel Name | Type | Direction | Usage | Description |
|---|---|---|---|---|
| CONN_A | Register | OUT | UserAllocatable | Connector A LED color (accepts color names or #RRGGBB hex) |
| CONN_B | Register | OUT | UserAllocatable | Connector B LED color (accepts color names or #RRGGBB hex) |
| CONN_C | Register | OUT | UserAllocatable | Connector C LED color (accepts color names or #RRGGBB hex) |
| CONN_D | Register | OUT | UserAllocatable | Connector D LED color (accepts color names or #RRGGBB hex) |
| CONN_E | Register | OUT | UserAllocatable | Connector E LED color (accepts color names or #RRGGBB hex) |
| CONN_F | Register | OUT | UserAllocatable | Connector F LED color (accepts color names or #RRGGBB hex) |
| LUMINANCE | Ratiometric | OUT | UserAllocatable | LED intensity control (0.0-1.0, default: 0.7) |
Data Acquisition & Calibration (2 channels):
| Channel Name | Type | Direction | Usage | Description |
|---|---|---|---|---|
| NumericResult | NumericResult | IN | UserAllocatable | Multi-channel high-speed analog acquisition |
| CALIBRATION | Calibration | N/A | UserAllocatable | Module calibration table (gain/offset for all channels) |
Total User Channels: 108 (12 MPIO + 23 power + 8 audio + 8 ground switch + 8 latch + 5 RS485/I2C + 5 user GPIO + 7 connector LEDs + 2 special)
Internal Channels (Not User-Accessible)
The following channels are used for internal system control and are hidden from users:
- AD5593_RESETn (U1,
HiddenSystemControl): AD5593R reset control (active-low) - Connector RGB Channels (all
HiddenSystemControl):- CONN=A_R, CONN=A_G, CONN=A_B (Connector A RGB)
- CONN=B_R, CONN=B_G, CONN=B_B (Connector B RGB)
- CONN=C_R, CONN=C_G, CONN=C_B (Connector C RGB)
- CONN=D_R, CONN=D_G, CONN=D_B (Connector D RGB)
- CONN=E_R, CONN=E_G, CONN=E_B (Connector E RGB)
- CONN=F_R, CONN=F_G, CONN=F_B (Connector F RGB)
- Status RGB Channels (all
HiddenSystemControl):- STATUS1_R, STATUS1_G, STATUS1_B (Status LED 1)
- STATUS2_R, STATUS2_G, STATUS2_B (Status LED 2)
- GPIO Placeholders (U1,
HiddenSystemControl): 4 unused GPIO pins
Default Connector Color Coding
The module initializes with predefined connector colors for signal type identification:
| Connector | Default Color | Signal Type |
|---|---|---|
| CONN_A | Blue | Analog measurements |
| CONN_B | Cyan | Mixed MPIO/tacho/PWM/latch |
| CONN_C | Magenta | Audio channels |
| CONN_D | Green | On-board MPIO |
| CONN_E | Red | Power connector |
| CONN_F | Yellow | Communication connector |
Channel Configuration
Multi-Purpose I/O Analog Mode
Configure FE_MPIO channels as analog inputs or outputs:
ConfigureChannels(new[] {
new AnalogChannel {
NetName = "0.ESH10000540.FE_MPIO00",
Enabled = true,
Direction = DirectionTypes.IN,
Gain = 1.0,
Offset = 0.0,
Resolution = 12
}
});
// Read analog input
string[] voltage = GetValues(new[] { "0.ESH10000540.FE_MPIO00" });
Console.WriteLine($"FE_MPIO00: {voltage[0]}V");
Multi-Purpose I/O Pseudo-Digital Mode
Configure FE_MPIO channels as pseudo-digital I/O:
ConfigureChannels(new[] {
new PseudoDigitalChannel {
NetName = "0.ESH10000540.FE_MPIO01",
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.ESH10000540.FE_MPIO01" });
// state[0] = "true" or "false"
Power Supply Configuration
Enable power rails and set programmable voltages:
// Set VIO to 3.3V and VADJ to 1.8V
SetValues(
new[] {
"0.ESH10000540.VIO_SET",
"0.ESH10000540.VADJ_SET"
},
new[] {
"3.3", // VIO = 3.3V (gain=2, so DAC gets 1.65V)
"1.8" // VADJ = 1.8V (gain=2, so DAC gets 0.9V)
}
);
// Enable external power rails
SetValues(
new[] {
"0.ESH10000540.EXT_12V_EN",
"0.ESH10000540.EXT_3V3_EN",
"0.ESH10000540.EXT_VIO_EN"
},
new[] { "true", "true", "true" }
);
// Check power-good status
string[] powerGood = GetValues(new[] {
"0.ESH10000540.EXT_12V_PG",
"0.ESH10000540.EXT_3V3_PG",
"0.ESH10000540.EXT_VIO_PG"
});
bool allGood = powerGood.All(p => bool.Parse(p) == true);
Console.WriteLine($"Power rails OK: {allGood}");
Programming Interface
Configure and Read MPIO Channels:
// Configure FE_MPIO as outputs
ConfigureChannels(new[] {
new AnalogChannel {
NetName = "0.ESH10000540.FE_MPIO00",
Enabled = true,
Direction = DirectionTypes.OUT,
Value = 2.5 // Output 2.5V
}
});
// Read MPIO inputs
string[] mpioValues = GetValues(new[] {
"0.ESH10000540.FE_MPIO08",
"0.ESH10000540.FE_MPIO09"
});
Monitor Power Rails:
// Read all power rail voltages and currents
string[] powerMetrics = GetValues(new[] {
"0.ESH10000540.VMON_EXT_12V",
"0.ESH10000540.IMON_EXT_12V",
"0.ESH10000540.VMON_EXT_3V3",
"0.ESH10000540.IMON_EXT_3V3",
"0.ESH10000540.VMON_VIO",
"0.ESH10000540.IMON_EXT_VIO"
});
Console.WriteLine($"12V Rail: {powerMetrics[0]}V @ {powerMetrics[1]}A");
Console.WriteLine($"3.3V Rail: {powerMetrics[2]}V @ {powerMetrics[3]}A");
Console.WriteLine($"VIO Rail: {powerMetrics[4]}V @ {powerMetrics[5]}A");
Audio Measurement:
// Enable mic bias loads
SetValues(
new[] {
"0.ESH10000540.MIC_BIAS_LOAD_L",
"0.ESH10000540.MIC_BIAS_LOAD_R"
},
new[] { "true", "true" }
);
// Read differential audio inputs
string[] audio = GetValues(new[] {
"0.ESH10000540.MIC_IN_L_POS",
"0.ESH10000540.MIC_IN_L_NEG",
"0.ESH10000540.MIC_IN_R_POS",
"0.ESH10000540.MIC_IN_R_NEG"
});
Console.WriteLine($"Left Audio: Pos={audio[0]}V, Neg={audio[1]}V");
Console.WriteLine($"Right Audio: Pos={audio[2]}V, Neg={audio[3]}V");
Ground Switch Control:
// Enable ground switch and measure voltage
SetValues(
new[] { "0.ESH10000540.GND_SW0" },
new[] { "true" }
);
Thread.Sleep(100); // Allow settling
string[] voltage = GetValues(new[] { "0.ESH10000540.GND_SW0_VMEAS" });
Console.WriteLine($"GND_SW0 voltage: {voltage[0]}V");
Latch Testing:
// Reset latch 0
SetValues(
new[] { "0.ESH10000540.LATCH0_RESETn" },
new[] { "false" } // Active-low reset
);
Thread.Sleep(10);
SetValues(
new[] { "0.ESH10000540.LATCH0_RESETn" },
new[] { "true" } // Release reset
);
// Set polarity and read value
SetValues(
new[] { "0.ESH10000540.LATCH0_POL" },
new[] { "true" }
);
string[] latchData = GetValues(new[] {
"0.ESH10000540.LATCH0_VALUE",
"0.ESH10000540.LATCH0_PULL"
});
Console.WriteLine($"Latch 0 Value: {latchData[0]}, Pull: {latchData[1]}");
RS485 Differential Measurement:
// Enable RS485
SetValues(
new[] { "0.ESH10000540.RS485_EN" },
new[] { "true" }
);
// Read differential voltages
string[] rs485 = GetValues(new[] {
"0.ESH10000540.RS485_RX_VMEAS",
"0.ESH10000540.RS485_TX_VMEAS"
});
Console.WriteLine($"RS485 RX differential: {rs485[0]}V");
Console.WriteLine($"RS485 TX differential: {rs485[1]}V");
Connector LED Color Control:
// Set connector colors
SetValues(
new[] {
"0.ESH10000540.CONN_A",
"0.ESH10000540.CONN_B",
"0.ESH10000540.CONN_C",
"0.ESH10000540.LUMINANCE"
},
new[] {
"Red", // Connector A: Red
"Green", // Connector B: Green
"#FF5733", // Connector C: Custom hex color
"0.5" // 50% brightness
}
);
Pseudo-Differential Calculation
The module performs automatic pseudo-differential calculations for certain channels:
RS485 Channels:
// Internally calculated:
RS485_RX_VMEAS = RS485_RX_VMEASp - RS485_RX_VMEASn
RS485_TX_VMEAS = RS485_TX_VMEASp - RS485_TX_VMEASn
Audio Channels:
// Internally calculated:
MIC_IN_R_NEG = MIC_IN_R_NEGp - MIC_IN_R_NEGn
MIC_IN_R_POS = MIC_IN_R_POSp - MIC_IN_R_POSn
MIC_IN_L_NEG = MIC_IN_L_NEGp - MIC_IN_L_NEGn
MIC_IN_L_POS = MIC_IN_L_POSp - MIC_IN_L_POSn
This provides true differential measurement by subtracting the negative input from the positive input.
Error Handling
The module validates operations and provides error messages:
- Invalid NetName: Throws exception if channel does not exist
- Invalid Color Name: Throws exception for unrecognized color names or malformed hex values
- Invalid VL/VH: Validates voltage thresholds are within MinIoVoltage/MaxIoVoltage range
- Invalid VH <= VL: Ensures high threshold exceeds low threshold
- Direction Mismatch: Prevents output operations on input channels and vice versa
- Device Communication Errors: I²C errors logged and propagated to caller
Best Practices
- Power sequencing: Set VIO_SET and VADJ_SET before enabling power rails
- Check power-good: Verify all _PG signals after enabling power supplies
- Monitor fault signals: Check EXT_VIO_FAULTn for power supply faults
- Audio averaging: ADS7828 uses 50 samples for stable audio measurements
- Differential measurements: Use pseudo-differential channels for noise immunity
- Connector color coding: Use standard colors for easy visual identification
- Batch operations: Use multi-channel SetValues/GetValues for better performance
- MPIO direction: Always configure direction (IN/OUT) before use
- Latch reset timing: Allow adequate time between reset assertion and release
- I²C/RS485 enable: Enable transceivers before attempting communication
Module Initialization Sequence
On Reset(), the module performs:
- Clear existing channel list
- Setup GPIO expander (PCA950x at 0x20):
- Create 40 digital channels across 5 banks:
- Bank 1: Audio loads (MIC_BIAS, PHANTOM), ground switches (GND_SW0-3)
- Bank 2: Latch control (POL, RESETn, VALUE, PULL for LATCH0/1)
- Bank 3: Power enables (EXT_12V/3V3/1V8/VADJ/VIO_EN), power-good (12V/3V3/1V8_PG)
- Bank 4: Power-good continued (VADJ/VIO_PG), VIO fault, I2C/RS485 control, LSHM presence, AD5593_RESETn
- Bank 5: User GPIO (USR_GPIO1-4), 4 hidden placeholders
- Reset and update GPIO expander
- Create 40 digital channels across 5 banks:
- Add LED luminance channel (default: 0.7)
- Setup LED driver (LP5024 at 0x28):
- Create 6 connector color register channels (CONN_A-F)
- Create 18 hidden RGB ratiometric channels (6 connectors × 3 RGB)
- Create 6 hidden RGB ratiometric channels (2 status LEDs × 3 RGB)
- Reset and update LED controller
- Setup ADC1 (AD5593R at 0x11):
- Create 8 analog/pseudo-digital channels (FE_MPIO00-07)
- Enable double ADC/DAC range
- Reset and update ADC
- Setup ADC2 (AD5593R at 0x10):
- Create 4 analog/pseudo-digital channels (FE_MPIO08-11)
- Create VIO_SET (DAC OUT, gain=2, default 3.3V)
- Create VADJ_SET (DAC OUT, gain=2, default 1.8V)
- Create VMON_VIO (ADC IN, gain=1)
- Create VMON_VADJ (ADC IN, gain=2)
- Enable double ADC/DAC range
- Reset and update ADC
- Setup ADC3 (ADS7828 at 0x4A):
- Create 8 power monitoring channels (VMON/IMON for EXT_12V/3V3/1V8/VADJ/VIO)
- Apply gain factors for voltage scaling and current measurement
- Reset and update ADC
- Setup ADC4 (ADS7828 at 0x49):
- Create 4 ground switch voltage measurement channels (GND_SW0-3_VMEAS, gain=2)
- Create 4 RS485 differential pair channels (RX/TX VMEASp/n, gain=1)
- Create 2 pseudo-differential channels (RS485_RX_VMEAS, RS485_TX_VMEAS)
- NumberOfSamples: 50
- Reset and update ADC
- Setup ADC5 (ADS7828 at 0x48):
- Create 8 audio differential pair channels (MIC L/R POS/NEG p/n)
- Create 4 pseudo-differential channels (MIC_IN_L/R_POS/NEG)
- NumberOfSamples: 50
- Reset and update ADC
- Add NumericResult channel with analog targets populated
- Set default connector colors:
- CONN_A: Blue (analog)
- CONN_B: Cyan (mixed)
- CONN_C: Magenta (audio)
- CONN_D: Green (on-board MPIO)
- CONN_E: Red (power)
- CONN_F: Yellow (communication)
- Update LED hardware
- Load and apply calibration from persistent storage
- Add CALIBRATION channel for user access
Typical Use Cases
1. Power Supply Sequencing Test:
// Configure voltage outputs
SetValues(
new[] { "0.ESH10000540.VIO_SET", "0.ESH10000540.VADJ_SET" },
new[] { "3.3", "1.8" }
);
// Enable rails in sequence with delay
var rails = new[] {
"EXT_12V_EN", "EXT_3V3_EN", "EXT_1V8_EN", "EXT_VADJ_EN", "EXT_VIO_EN"
};
foreach (var rail in rails)
{
SetValues(new[] { $"0.ESH10000540.{rail}" }, new[] { "true" });
Thread.Sleep(100); // 100ms delay between rails
}
// Verify all power-good
var pgSignals = rails.Select(r => r.Replace("_EN", "_PG")).ToArray();
string[] pgStatus = GetValues(pgSignals.Select(p => $"0.ESH10000540.{p}").ToArray());
for (int i = 0; i < pgSignals.Length; i++)
{
Console.WriteLine($"{rails[i]}: {(bool.Parse(pgStatus[i]) ? "GOOD" : "FAULT")}");
}
2. Audio Interface Characterization:
// Enable mic bias for both channels
SetValues(
new[] {
"0.ESH10000540.MIC_BIAS_LOAD_L",
"0.ESH10000540.MIC_BIAS_LOAD_R"
},
new[] { "true", "true" }
);
// Acquire audio data
for (int i = 0; i < 10; i++)
{
string[] audio = GetValues(new[] {
"0.ESH10000540.MIC_IN_L_POS",
"0.ESH10000540.MIC_IN_L_NEG",
"0.ESH10000540.MIC_IN_R_POS",
"0.ESH10000540.MIC_IN_R_NEG"
});
double leftDiff = double.Parse(audio[0]) - double.Parse(audio[1]);
double rightDiff = double.Parse(audio[2]) - double.Parse(audio[3]);
Console.WriteLine($"Sample {i}: Left={leftDiff:F4}V, Right={rightDiff:F4}V");
Thread.Sleep(100);
}
3. Multi-Channel Data Acquisition:
// Configure numeric result for high-speed acquisition
ConfigureChannels(new[] {
new NumericResultChannel {
NetName = "0.ESH10000540.NumericResult",
Enabled = true,
NumberOfSamples = 1000,
SampleRate = 1000, // 1 kHz
TargetNetName = "0.ESH10000540.FE_MPIO00,0.ESH10000540.FE_MPIO01",
ReducedSet = true,
MultiChannel = true
}
});
// Acquire data
string[] result = GetValues(new[] { "0.ESH10000540.NumericResult" });
List<NumericResult> data = NumericResult.FromBase64(result[0]);
foreach (var channel in data)
{
Console.WriteLine($"{channel.NetName}: Min={channel.Min:F3}V, Max={channel.Max:F3}V, Avg={channel.Average:F3}V");
}
4. Ground Switch Load Test:
// Test all ground switches sequentially
for (int i = 0; i < 4; i++)
{
string swChannel = $"0.ESH10000540.GND_SW{i}";
string measChannel = $"0.ESH10000540.GND_SW{i}_VMEAS";
// Enable switch
SetValues(new[] { swChannel }, new[] { "true" });
Thread.Sleep(50);
// Measure voltage
string[] voltage = GetValues(new[] { measChannel });
Console.WriteLine($"GND_SW{i}: {voltage[0]}V");
// Disable switch
SetValues(new[] { swChannel }, new[] { "false" });
Thread.Sleep(50);
}
5. Fixture Identification Display:
// Update connector LEDs based on fixture type
void IdentifyFixture(string fixtureType)
{
Dictionary<string, string> colorMap = fixtureType switch
{
"AUDIO" => new() {
["CONN_A"] = "Black",
["CONN_B"] = "Black",
["CONN_C"] = "Magenta",
["CONN_D"] = "Black",
["CONN_E"] = "Red",
["CONN_F"] = "Yellow"
},
"POWER" => new() {
["CONN_A"] = "Black",
["CONN_B"] = "Black",
["CONN_C"] = "Black",
["CONN_D"] = "Green",
["CONN_E"] = "Red",
["CONN_F"] = "Yellow"
},
_ => new() {
["CONN_A"] = "Blue",
["CONN_B"] = "Cyan",
["CONN_C"] = "Magenta",
["CONN_D"] = "Green",
["CONN_E"] = "Red",
["CONN_F"] = "Yellow"
}
};
var channels = colorMap.Keys.Select(k => $"0.ESH10000540.{k}").ToArray();
var colors = colorMap.Values.ToArray();
SetValues(channels, colors);
Console.WriteLine($"Fixture identified as: {fixtureType}");
}
IdentifyFixture("AUDIO");
Debugging and Troubleshooting
Problem: MPIO channels not responding
- Check: AD5593_RESETn signal is released (should be true/high)
- Check: I²C communication with AD5593R devices (0x10, 0x11)
- Check: Direction is correctly configured (IN/OUT)
- Action: Reset module to reinitialize AD5593R devices
Problem: Power rails not enabling
- Check: Enable signals (EXT_*_EN) are set to true
- Check: Power-good signals (EXT_*_PG) after enabling
- Check: VIO_FAULTn is not indicating fault (should be true)
- Action: Check external power supply connections
Problem: Audio measurements unstable
- Check: Mic bias loads are enabled if needed
- Check: ADS7828 NumberOfSamples is 50 (default for averaging)
- Action: Increase sample averaging or reduce noise sources
- Verify: Differential inputs are properly connected
Problem: Connector LEDs not updating
- Check: LP5024 I²C communication at address 0x28
- Check: Luminance is > 0.0
- Check: Color values are valid (named colors or hex)
- Action: Call UpdateConnectorColors() manually if needed
Problem: Pseudo-differential channels returning unexpected values
- Check: Both p and n channels are correctly connected
- Check: Calculation is correct (VMEASp - VMEASn)
- Verify: Individual p and n channels read expected voltages
- Note: Calculation performed automatically in GetValues()
Problem: Ground switch measurements incorrect
- Check: Ground switch is actually enabled (GND_SW = true)
- Check: Gain factor (2) is correct for voltage divider
- Action: Verify switch is conducting and load is present
Problem: Latch testing not working
- Check: Reset sequence is correct (assert low, then release high)
- Check: Polarity setting matches expected behavior
- Check: Pull configuration for VALUE readback
- Verify: Latch hardware is functional
Comparison with Standard Fixture Interface Modules
| Feature | ESH10000540 (Sparrow Fixture) | Generic Interface Module |
|---|---|---|
| MPIO Channels | 12 (dual AD5593R) | Varies |
| Power Rails | 5 programmable + monitoring | Typically separate |
| Audio Inputs | 4 pseudo-differential | Typically none |
| Ground Switches | 4 with voltage monitoring | Typically none |
| Latch Testing | Dual latch with control | Typically none |
| RS485 Measurement | Differential voltage | Typically none |
| LED Indicators | 6 connector + 2 status RGB | Typically simple |
| Total Channels | 108 user-accessible | Typically < 50 |
| Integration Level | Highly integrated | Modular |
| Form Factor | Sparrow module | Varies |
Revision History
- ESH10000540: Current production version
- 12 MPIO channels (dual AD5593R, I²C 0x10/0x11)
- 5 external power rails with enable and monitoring
- 3 ADS7828 ADCs for power/audio/load monitoring (I²C 0x48/0x49/0x4A)
- 4 pseudo-differential audio channels
- 4 ground switch loads with voltage monitoring
- Dual latch testing interface
- RS485 differential measurement
- 40-pin GPIO expander (PCA950x, I²C 0x20)
- 6 connector RGB LEDs + 2 status LEDs (LP5024, I²C 0x28)
- Numeric result acquisition support
- Calibration support (persistent storage)