Skip to content

LNB Control

The SkyWalker-1 controls LNB power and band selection through dedicated GPIO pins on the FX2 microcontroller. No I2C transactions are involved in basic LNB control — voltage and tone are driven directly by port pins.

LNB voltage selects the polarization of the received signal. It is controlled via GPIO P0.4 using vendor command 0x8B (SET_LNB_VOLTAGE).

wValueVoltageGPIO P0.4Polarization
0x0013VLOWVertical / Circular-Right
0x0118VHIGHHorizontal / Circular-Left

The Linux kernel driver sets the voltage during the tuning sequence based on the requested polarization:

Kernel driver polarization mapping
// From gp8psk-fe.c set_voltage callback
case SEC_VOLTAGE_13: // Vertical / Circular-R
gp8psk_usb_out_op(d, SET_LNB_VOLTAGE, 0, 0, NULL, 0);
break;
case SEC_VOLTAGE_18: // Horizontal / Circular-L
gp8psk_usb_out_op(d, SET_LNB_VOLTAGE, 1, 0, NULL, 0);
break;

The configuration status byte (returned by GET_8PSK_CONFIG, command 0x80) reflects the current voltage selection in bit 5 (0x20, bmSEL18V).

For long cable runs where voltage drop is significant, the SkyWalker-1 supports a +1V boost mode (13V becomes 14V, 18V becomes 19V). This is controlled via vendor command 0x94 (USE_EXTRA_VOLT).

wValueXRAM 0xE0B6Result
0x000x62Normal voltage (13V / 18V)
0x010x6ABoosted voltage (14V / 19V)

The difference between the two XRAM values is bit 3 (0x08), which enables the boost on the LNB power regulator circuitry.

The kernel driver exposes extra volt mode through the enable_high_lnb_voltage callback in the DVB frontend properties.

The 22 kHz tone selects the high or low band on a universal LNB. It is controlled via GPIO P0.3 using vendor command 0x8C (SET_22KHZ_TONE).

wValueStateGPIO P0.3LNB Band
0x00OFFLOWLow band (9.75 GHz LO on universal LNB)
0x01ONHIGHHigh band (10.6 GHz LO on universal LNB)

The configuration status byte tracks the tone state in bit 4 (0x10, bm22kHz).

Before any LNB control is possible, the LNB power supply itself must be enabled via vendor command 0x8A (START_INTERSIL). The kernel driver does this during the boot sequence if bit 2 (bmIntersilOn) of the configuration status byte is not already set.

wValueActionConfig Bit
0x01Enable LNB power supplySets bmIntersilOn (bit 2)
0x00Disable LNB power supplyClears bmIntersilOn (bit 2)

In the custom v3.01.0 firmware, enabling the LNB supply also configures the output enable masks for the LNB control GPIO pins:

START_INTERSIL handler in custom firmware
case START_INTERSIL:
if (wval) {
OEA |= (PIN_22KHZ | PIN_LNB_VOLT | PIN_DISEQC);
config_status |= BM_INTERSIL;
} else {
config_status &= ~BM_INTERSIL;
}

The LNB control pins are consistent across firmware versions, though their exact initialization differs:

GPIO PinFunctionDirectionInit State
P0.1Power supply enableOutputLOW (off)
P0.2Power supply disableOutputHIGH (active disable)
P0.322 kHz tone gateOutputLOW (tone off)
P0.4LNB voltage selectOutputLOW (13V)
P0.5BCM4500 hardware resetOutputLOW (reset asserted)

The initial GPIO state after power-on is IOA = 0x84 (P0.7 and P0.2 HIGH, all others LOW), with the output enable mask OEA = 0xBE (P0.1 through P0.5 and P0.7 as outputs).

Three vendor commands provide low-level GPIO access for LNB debugging:

CommandNamePurpose
0x96SET_LNB_GPIO_MODEConfigure LNB GPIO output enables
0x97SET_GPIO_PINSDirect write to LNB GPIO pins via wValue bitmap
0x98GET_GPIO_STATUSRead LNB feedback GPIO pin (1 byte)

These commands access Port B (XRAM-mapped IOB) rather than Port A. In v2.06 and v2.13, 0x97 controls IOB bits 1 and 2 for LNB, while 0x96 configures IOB bit 3 as the GPIO mode select. Rev.2 uses IOB bit 4 instead.

During a typical tune operation, the kernel driver configures the LNB in this order:

1. SET_LNB_VOLTAGE (0x8B) -- Select 13V or 18V based on polarization
2. SET_22KHZ_TONE (0x8C) -- Select low or high band
3. SEND_DISEQC (0x8D) -- Switch multi-port switch if needed
4. TUNE_8PSK (0x86) -- Send tuning parameters

The voltage and tone are set before any DiSEqC commands because the LNB must be powered and in the correct band before the switch can respond. See the DiSEqC Protocol page for details on switch control, and the Tuning Protocol for the complete tune flow.