# 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)](https://html.datasheetq.com/pdf-html/885700/Broadcom/2page/BCM4500.html), [BCM4500 Datasheet (Elcodis)](https://elcodis.com/parts/5786421/BCM4500.html) 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): ```c m_CurResource.ulInnerFecType = BDA_FEC_VITERBI; ``` **Windows driver evidence** (`SkyWalker1TunerFilter.cpp`, lines 1069-1070): ```c //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](https://elcodis.com/parts/5786421/BCM4500.html) | | **BCM4501** | 2006 | **Yes** | First dual-tuner DVB-S2 receiver; LDPC/BCH decoder | [Broadcom](https://www.broadcom.com/products/broadband/set-top-box/bcm4501), [EDN](https://www.edn.com/bcm4501-dual-dvb-s2-advanced-modulation-satellite-receiver/) | | **BCM4505** | 2007 | **Yes** | Single-channel, 65nm, LDPC/BCH + legacy | [Broadcom](https://www.broadcom.com/products/broadband/set-top-box/bcm4505) | | **BCM4506** | 2007 | **Yes** | Dual-channel, 65nm, LDPC/BCH + legacy | [Broadcom](https://www.broadcom.com/products/broadband/set-top-box/bcm4506) | 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](https://www.genpix-electronics.com/what-is-skywalker-3.html) 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 - [BCM4500 Datasheet (DatasheetQ)](https://html.datasheetq.com/pdf-html/885700/Broadcom/2page/BCM4500.html) - [BCM4500 Datasheet (Elcodis)](https://elcodis.com/parts/5786421/BCM4500.html) - [BCM4500 Datasheet (AllDatasheet)](https://www.alldatasheet.com/datasheet-pdf/pdf/85246/BOARDCOM/BCM4500.html) - [BCM4501 Product Page (Broadcom)](https://www.broadcom.com/products/broadband/set-top-box/bcm4501) - [BCM4501 (EDN)](https://www.edn.com/bcm4501-dual-dvb-s2-advanced-modulation-satellite-receiver/) - [BCM4505 Product Page (Broadcom)](https://www.broadcom.com/products/broadband/set-top-box/bcm4505) - [BCM4506 Product Page (Broadcom)](https://www.broadcom.com/products/broadband/set-top-box/bcm4506) - [BCM4505/BCM4506 Announcement (RTTNews)](https://www.rttnews.com/380136/broadcom-launches-bcm4505-and-bcm4506-two-fully-integrated-single-chip-single-and-dual-channel-multi-format-satellite-receivers-quick-facts.aspx) ### Genpix Products - [Genpix SkyWalker-3 Specifications](https://www.genpix-electronics.com/what-is-skywalker-3.html) - [Genpix Official Site](https://www.genpix-electronics.com/index.php?act=viewDoc&docId=9) ### Community and Technical Discussions - [LinuxTV mailing list: BCM4500 and DVB-S2 distinction](https://www.mail-archive.com/linux-dvb@linuxtv.org/msg24808.html) - [SatelliteGuys: Turbo 8PSK card reverse engineering](https://www.satelliteguys.us/xen/threads/another-turbo-8psk-card.246879/) - [SatelliteGuys: Genpix SkyWalker-1 discussion](https://www.satelliteguys.us/xen/threads/genpix-skywalker-1.214196/) ### 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)