skywalker-1/dvb-s2-investigation.md
Ryan Malloy c7b5932cc0 Add EEPROM flash tool, TS analyzer, DVB-S2 investigation, and tune.py bugfix
New tools:
- tools/eeprom_write.py: EEPROM firmware flash with backup, verify, dry-run
- tools/ts_analyze.py: MPEG-2 transport stream analyzer with PAT/PMT parsing

DVB-S2 investigation confirms BCM4500 hardware limitation (no LDPC/BCH silicon).

Fix --json flag on tune.py subcommands (argparse parent/child scoping).
All tools verified against live SkyWalker-1 hardware.
2026-02-11 14:46:20 -07:00

16 KiB

DVB-S2 Incompatibility Investigation: Genpix SkyWalker-1

Definitive Conclusion

The SkyWalker-1's inability to receive DVB-S2 is a fundamental hardware limitation of the Broadcom BCM4500 demodulator silicon, not a firmware limitation. The BCM4500 was designed and fabricated before the DVB-S2 standard was ratified (2005) and contains no LDPC or BCH decoder hardware. DVB-S2 requires LDPC (Low-Density Parity-Check) and BCH (Bose-Chaudhuri-Hocquenghem) forward error correction -- entirely different decoder architectures from the Viterbi/turbo/Reed-Solomon decoders present in the BCM4500. No firmware update could add DVB-S2 support to this hardware.

Genpix eventually addressed this by releasing the SkyWalker-3, which replaced the entire demodulator subsystem (likely switching from Broadcom BCM4500 to STMicroelectronics STV0903), trading turbo-FEC support for DVB-S2 LDPC/BCH capability.


1. Does the BCM4500 Silicon Support DVB-S2?

No. The BCM4500 has no LDPC or BCH decoder hardware.

BCM4500 FEC Architecture (from datasheet)

The BCM4500 contains exactly two FEC decoder paths:

  1. Advanced Modulation Turbo FEC Decoder -- an iterative turbo code decoder supporting:

    • QPSK: rates 1/4, 1/2, 3/4
    • 8PSK: rates 2/3, 3/4, 5/6, 8/9
    • 16QAM: rate 3/4
    • Reed-Solomon outer code (t=10) after turbo decoding
  2. Legacy DVB/DIRECTV/DCII-Compliant FEC Decoder -- a concatenated coding chain:

    • Inner: Viterbi decoder (convolutional code, rates 1/2 through 7/8)
    • Outer: Reed-Solomon decoder

The datasheet describes the signal path explicitly: "Optimized soft decisions are then fed into either a DVB/DIRECTV/DCII-compliant FEC decoder, or an advanced modulation turbo decoder." These are the only two paths. There is no third path for LDPC/BCH.

DVB-S2 FEC Architecture (for comparison)

DVB-S2 (EN 302 307, ratified March 2005) mandates:

  • Inner code: LDPC (Low-Density Parity-Check) -- block lengths of 64,800 or 16,200 bits
  • Outer code: BCH (Bose-Chaudhuri-Hocquenghem)
  • Code rates: 1/4, 1/3, 2/5, 1/2, 3/5, 2/3, 3/4, 4/5, 5/6, 8/9, 9/10

LDPC decoding requires dedicated hardware: large block RAM for message passing (the LDPC block size is 64,800 bits, requiring significant on-chip storage), iterative belief propagation logic, and a fundamentally different decoder architecture from both Viterbi and turbo decoders. This cannot be emulated in firmware on the BCM4500's simple 8-bit on-chip microcontroller (used only for configuration, acquisition, and monitoring -- not data-path processing).

Evidence from the BCM4500 Datasheet

Source: BCM4500 Datasheet (DatasheetQ), BCM4500 Datasheet (Elcodis)

Key specifications confirming no DVB-S2 capability:

  • Modulation: BPSK, QPSK, 8PSK, 16QAM (no mention of DVB-S2-specific constellations)
  • FEC: "advanced modulation turbo FEC decoder" and "DVB/DIRECTV/DCII-compliant FEC decoder"
  • Symbol rate: 256 Ksps to 30 Msps
  • Package: 128-pin MQFP
  • Supply: 3.3V I/O, 1.8V digital
  • No mention of LDPC, BCH, or DVB-S2 anywhere in the datasheet

2. What FEC Types Does the BCM4500 Actually Support?

The BCM4500 supports three distinct FEC coding families, none of which are DVB-S2 compatible:

2.1 Viterbi + Reed-Solomon (Legacy DVB-S / DSS / DCII)

Used for standard DVB-S QPSK, DSS QPSK, DVB-S BPSK, and Digicipher II modes.

Firmware evidence (from skywalker1-hardware-reference.md, Section 6.3):

  • FEC lookup table at XRAM 0xE0F9, maximum index 7
  • Modulation dispatch sets XRAM 0xE0F6 = 0x00 (turbo flag OFF)
  • XRAM 0xE0F5 = 0x10 (standard demod mode)
  • The firmware FEC table supports rates: 1/2, 2/3, 3/4, 5/6, 7/8, auto, none

Windows driver evidence (SkyWalker1Control.h, line 59):

m_CurResource.ulInnerFecType = BDA_FEC_VITERBI;

Windows driver evidence (SkyWalker1TunerFilter.cpp, lines 1069-1070):

//Only supported FEC VITERBI Type Error Correction
else if(ulNewInnerFecType == BDA_FEC_VITERBI)

The Windows BDA driver explicitly rejects any FEC type other than BDA_FEC_VITERBI and restricts code rates to 1/2, 2/3, 3/4, 5/6, 7/8 (lines 1112-1116). There is no BDA_FEC_LDPC handling.

2.2 Turbo Codes (Proprietary 8PSK/QPSK/16QAM)

Used for Turbo QPSK, Turbo 8PSK, and Turbo 16QAM -- the proprietary "advanced modulation" modes developed by Broadcom for EchoStar/Dish Network.

Firmware evidence (from tuning-protocol-analysis.md, Section 3):

  • Turbo QPSK: FEC table at XRAM 0xE0B7, max index 5
  • Turbo 8PSK: FEC table at XRAM 0xE0B1, max index 5
  • Turbo 16QAM: FEC table at XRAM 0xE0BC, max index 1
  • All turbo modes set XRAM 0xE0F6 = 0x01 (turbo flag ON)

These turbo codes are proprietary to EchoStar/Broadcom. They are NOT the same as DVB-S2's LDPC codes, despite both being "advanced" coding schemes. The turbo decoder uses a fundamentally different iterative decoding algorithm (parallel concatenated convolutional codes) compared to LDPC (sparse parity-check matrix belief propagation).

2.3 Digicipher II (Motorola/GI Proprietary)

Used for DCII combo, split I/Q, and offset QPSK modes.

Firmware evidence: FEC table at XRAM 0xE0BD, max index 9, with a fixed FEC code of 0xFC written to XRAM 0xE0EB.

Summary: FEC Architecture Comparison

Feature BCM4500 (SkyWalker-1) DVB-S2 Requirement
Inner FEC Viterbi (DVB-S) or Turbo (proprietary) LDPC
Outer FEC Reed-Solomon (t=10) BCH
Block size Convolutional (streaming) / Turbo (short blocks) 64,800 or 16,200 bits
Decoder type Trellis-based (Viterbi) or iterative turbo Iterative belief propagation
Hardware IP Hardwired Viterbi + turbo silicon Requires dedicated LDPC engine
Standardization DVB-S (ETSI EN 300 421) + proprietary turbo DVB-S2 (ETSI EN 302 307)

3. What Would a DVB-S2-Capable Replacement Look Like?

Broadcom's Own DVB-S2 Chip Timeline

Broadcom addressed DVB-S2 by designing entirely new silicon:

Chip Year DVB-S2? Key Feature Source
BCM4500 ~2003 No Turbo FEC + legacy Viterbi/RS Datasheet
BCM4501 2006 Yes First dual-tuner DVB-S2 receiver; LDPC/BCH decoder Broadcom, EDN
BCM4505 2007 Yes Single-channel, 65nm, LDPC/BCH + legacy Broadcom
BCM4506 2007 Yes Dual-channel, 65nm, LDPC/BCH + legacy Broadcom

The BCM4501 datasheet explicitly states it includes "four 8-bit ADCs, all-digital variable rate QPSK/8PSK receivers, advanced modulation LDPC/BCH, and DVB-S-compliant forward error correction decoder." The addition of LDPC/BCH required new silicon -- it was not a firmware upgrade to the BCM4500.

However, Broadcom restricted sales of these chips to set-top box manufacturers (EchoStar, DIRECTV) and did not sell to PC peripheral makers. This is why Genpix could not simply drop in a BCM4501.

What Genpix Actually Did: The SkyWalker-3

Genpix released the SkyWalker-3 as a DVB-S2-capable successor, using a completely different demodulator:

Feature SkyWalker-1 (BCM4500) SkyWalker-3 (likely STV0903)
DVB-S QPSK Yes Yes
DVB-S2 QPSK No Yes (rates 1/2 through 9/10)
DVB-S2 8PSK No Yes (rates 3/5 through 9/10)
Turbo QPSK Yes No
Turbo 8PSK Yes No
Turbo 16QAM Yes No
DCII Yes Yes
DSS Yes Yes
Symbol rate (DVB-S) 256 Ksps - 30 Msps 1 - 45 Msps
Symbol rate (DVB-S2) N/A 5 - 33 Msps
FEC inner (DVB-S) Viterbi Viterbi
FEC inner (DVB-S2) N/A LDPC
FEC outer (DVB-S2) N/A BCH
Demodulator Broadcom BCM4500 STMicroelectronics STV0903 (probable)
Tuner Broadcom BCM3440 STMicroelectronics STV6110 (probable)

Source: Genpix SkyWalker-3 specifications

The trade-off is visible: the SkyWalker-3 gained DVB-S2 but lost turbo-FEC support entirely. The turbo codes were proprietary to Broadcom/EchoStar, and the STMicroelectronics STV0903 demodulator does not implement them. This means the SkyWalker-3 cannot receive Dish Network's legacy turbo-coded 8PSK transmissions.


4. Are There Any Hints of DVB-S2 Awareness in the Firmware?

No. There are zero references to DVB-S2, LDPC, or BCH in any firmware version or in the Windows driver source.

Firmware Search Results

Searched all three firmware versions (v2.06, Rev.2 v2.10, v2.13) via Ghidra disassembly and the following source files:

  • SkyWalker1Control.h -- defines modulation constants 0-9, none related to DVB-S2
  • SkyWalker1CommonDef.h -- device parameter structure uses BDA_FEC_VITERBI only
  • SkyWalker1TunerFilter.cpp -- explicitly rejects non-QPSK modulation types and non-Viterbi FEC
  • SkyWalker1Control.cpp -- hardcodes ADV_MOD_DVB_QPSK (value 0) in tune command byte 8

Specific evidence of no DVB-S2 awareness:

  1. Modulation enum caps at 9 (SkyWalker1Control.h, lines 64-74): The modulation constants are ADV_MOD_DVB_QPSK (0) through ADV_MOD_DVB_BPSK (9). No value 10+ exists for DVB-S2 modes.

  2. Firmware dispatch table has exactly 10 entries (tuning-protocol-analysis.md, Section 3.1): The jump table at CODE:0873 contains 20 bytes (10 entries x 2 bytes). Modulation values >= 10 are rejected by the bounds check at CODE:0866.

  3. FEC type is hardcoded to Viterbi (SkyWalker1TunerFilter.cpp, line 1070): else if(ulNewInnerFecType == BDA_FEC_VITERBI) -- only Viterbi is accepted; any other FEC type returns STATUS_INVALID_PARAMETER.

  4. Tune command hardcodes DVB-S QPSK (SkyWalker1Control.cpp, line 292): ucCommand[8] = ADV_MOD_DVB_QPSK; -- the Windows driver always sends modulation type 0 (DVB-S QPSK) regardless of what the application requests.

  5. No LDPC/BCH code rate values exist in any FEC lookup table. The firmware's XRAM tables at 0xE0B1, 0xE0B7, 0xE0BC, 0xE0BD, and 0xE0F9 contain only Viterbi rates (1/2 through 7/8), turbo rates, and DCII combined codes.

  6. No DVB-S2-specific register addresses appear in the I2C traffic. The BCM4500 is programmed exclusively through indirect registers 0xA6/0xA7/0xA8 with page 0x00 -- a protocol specific to the BCM4500. DVB-S2 demodulators like the STV0903 use entirely different register maps.


5. Could the GPIF Streaming Path Handle DVB-S2 Data Rates?

Yes -- the USB data path is not the bottleneck. The GPIF/USB 2.0 streaming architecture could handle DVB-S2 data rates if the demodulator supported them.

Data Rate Analysis

DVB-S2 maximum useful bit rate (from ETSI EN 302 307):

  • Highest configuration: 8PSK, rate 9/10, 30 Msps = ~72 Mbps raw, ~58 Mbps net after FEC
  • Typical HD transponder: 8PSK, rate 3/4, 27.5 Msps = ~44 Mbps net

GPIF/USB 2.0 throughput capacity:

  • USB 2.0 High Speed bulk: 480 Mbps theoretical, ~35 MB/s (~280 Mbps) practical
  • GPIF engine: 48 MHz clock, 8-bit data path = 48 MB/s (384 Mbps) theoretical
  • EP2 FIFO: 4x buffer with AUTOIN, 7 URBs x 8KB on host side

Current DVB-S usage (from gpif-streaming-analysis.md, Section 15):

  • "Transport stream rate: BCM4500 outputs at the satellite symbol rate (up to 30 Msps), but the effective byte rate depends on modulation and coding. USB 2.0 High Speed bulk bandwidth (480 Mbps theoretical, ~35 MB/s practical) is more than sufficient for DVB-S transport streams (typically 1-5 MB/s)."

Assessment: Even at the theoretical maximum DVB-S2 data rate of ~58 Mbps (~7.25 MB/s), the USB 2.0 bulk streaming path has approximately 5x headroom. The GPIF engine configuration (IFCONFIG=0xEE, EP2FIFOCFG=0x0C, FLOWSTATEA with FSEN enabled) is identical across all firmware versions and provides a fully hardware-managed pipeline that would not require modification.

The 8-bit parallel transport stream interface between the demodulator and FX2 is also sufficient -- DVB-S2 uses the same MPEG-TS output format (188-byte packets) as DVB-S. The GPIF waveform and AUTOIN configuration would work unchanged.

However, this is a moot point. The bottleneck is the demodulator silicon, not the data path. Even if you physically replaced the BCM4500 with a DVB-S2-capable chip, you would need to rewrite the entire FX2 firmware (I2C register protocol, tuning sequence, modulation dispatch, FEC configuration) since every DVB-S2 demodulator uses a completely different register interface.


Summary

Question Answer
Is DVB-S2 a hardware or firmware limitation? Hardware -- the BCM4500 has no LDPC/BCH decoder logic
Could a firmware update add DVB-S2? No -- LDPC decoding requires dedicated silicon
Which Broadcom chip first added LDPC? BCM4501 (2006), followed by BCM4505/BCM4506 (2007)
Any DVB-S2 hints in firmware/driver? None -- zero references to LDPC, BCH, or DVB-S2
Is the USB data path a bottleneck? No -- USB 2.0 bulk has ~5x headroom for DVB-S2 rates
What did Genpix do for DVB-S2? Released SkyWalker-3 with a different demodulator (likely STV0903)
What was lost in the transition? Turbo-FEC support (proprietary to Broadcom/EchoStar)

Sources

Datasheets and Product Pages

Genpix Products

Community and Technical Discussions

Reverse Engineering Analysis (This Project)

  • skywalker1-hardware-reference.md -- Sections 1, 6, 7: Overview, tuning protocol, BCM4500 interface
  • tuning-protocol-analysis.md -- Section 3: Modulation dispatch table, FEC lookup tables
  • gpif-streaming-analysis.md -- Sections 13-15: GPIF throughput and data path analysis
  • rev2-deep-analysis.md -- Complete Rev.2 function inventory
  • SkyWalker1Control.h -- Modulation mode constants (lines 63-74), FEC/command definitions
  • SkyWalker1TunerFilter.cpp -- SetInnerFecType() Viterbi-only restriction (lines 1058-1086)
  • SkyWalker1Control.cpp -- TuneDevice() hardcoded ADV_MOD_DVB_QPSK (line 292)