Firmware Loader
Two complementary tools handle firmware on the SkyWalker-1: fw_load.py loads firmware into FX2 RAM for testing, and fw_dump.py extracts firmware and device information from a running device.
Both tools require pyusb and typically need root access (or appropriate udev rules) to communicate with the USB device.
pip install pyusbRAM Firmware Loader
Section titled “RAM Firmware Loader”fw_load.py loads firmware into the Cypress FX2 internal/external RAM via the standard 0xA0 vendor request built into the FX2 silicon boot ROM. This is the primary tool for firmware development: load, test, power-cycle to revert.
Subcommands
Section titled “Subcommands”| Subcommand | Purpose |
|---|---|
load | Load a firmware file into FX2 RAM |
reset | Halt and restart the FX2 CPU |
read | Read and hex-dump FX2 RAM contents |
load — Write Firmware to RAM
Section titled “load — Write Firmware to RAM”- Halt the CPU — writes
0x01to the CPUCS register at0xE600 - Write code segments into RAM in 64-byte chunks via vendor request
0xA0 - Start the CPU — writes
0x00to CPUCS, triggering USB re-enumeration
Supported file formats:
| Extension | Format | Load Address |
|---|---|---|
.ihx, .hex | Intel HEX | Addresses embedded in file |
.bix, .bin | Raw binary | 0x0000 (start of internal RAM) |
Options:
| Flag | Description |
|---|---|
FILE | Firmware file path (positional, required) |
--no-reset | Load segments without halting/starting the CPU |
--wait SECONDS | Wait for USB re-enumeration after load |
-v, --verbose | Show per-chunk transfer progress |
--force | Allow loading to devices with unknown VID/PID |
Examples:
sudo python3 tools/fw_load.py load firmware/build/skywalker1.ihx --wait 3sudo python3 tools/fw_load.py load firmware.bix -v --wait 5sudo python3 tools/fw_load.py load firmware.ihx --no-resetTypical output:
SkyWalker-1 RAM Firmware Loader========================================
Firmware: firmware/build/skywalker1.ihx Segments: 3 Total size: 3072 bytes Address: 0x0000 - 0x0BFF
Found SkyWalker-1: Bus 1 Addr 12 (VID 0x09C0 PID 0x0203)
[1/3] Halting CPU (CPUCS = 0x01)... CPU halted
[2/3] Loading 3 segment(s) into RAM... 0x0000-0x03FF (1024 bytes) 0x0400-0x07FF (1024 bytes) 0x0800-0x0BFF (1024 bytes)
3072 bytes loaded
[3/3] Starting CPU (CPUCS = 0x00)... CPU released
Firmware is running. The device will re-enumerate with new USB descriptors if the firmware does so.reset — Restart the FX2 CPU
Section titled “reset — Restart the FX2 CPU”Halts and restarts the CPU without loading new code. Useful for triggering USB re-enumeration when the device is in a bad state.
sudo python3 tools/fw_load.py reset --wait 3| Flag | Description |
|---|---|
--wait SECONDS | Wait for re-enumeration after reset |
--force | Allow reset on unknown VID/PID |
read — Hex-Dump FX2 RAM
Section titled “read — Hex-Dump FX2 RAM”Read memory contents from a running FX2. Useful for verifying loaded firmware or inspecting register state.
sudo python3 tools/fw_load.py read --addr 0x0000 --len 256sudo python3 tools/fw_load.py read --addr 0xe600 --len 1sudo python3 tools/fw_load.py read --addr 0x0000 --len 8192 -o ram_dump.bin| Flag | Description |
|---|---|
--addr ADDR | Start address in hex (default: 0x0000) |
--len LENGTH | Bytes to read (default: 256) |
-o, --output FILE | Save raw bytes to file |
--force | Allow read on unknown VID/PID |
Device Detection
Section titled “Device Detection”The loader searches for devices in this order:
- SkyWalker-1 — VID
0x09C0, PID0x0203 - Bare Cypress FX2 — VID
0x04B4, PID0x8613(unprogrammed/blank EEPROM)
Use --force to override VID/PID checks for devices with non-standard descriptors.
Firmware Probe and Dump Tool
Section titled “Firmware Probe and Dump Tool”fw_dump.py queries device information, dumps FX2 RAM contents, and scans for undocumented vendor commands.
Options
Section titled “Options”| Flag | Description |
|---|---|
--info | Query and display device information |
--dump FILE | Dump FX2 RAM to a binary file |
--scan | Brute-force scan all vendor commands (0x00—0xFF) |
--start ADDR | RAM dump start address (default: 0x0000) |
--size SIZE | RAM dump size in bytes (default: 0x2000 = 8 KB) |
--external | Attempt to dump external RAM (64 KB) |
Running with no flags defaults to --info --scan.
Device Info (—info)
Section titled “Device Info (—info)”Queries all known Genpix vendor commands and displays firmware version, build date, USB speed, serial number, and the 8PSK configuration status byte with decoded flags.
sudo python3 tools/fw_dump.py --info=== Genpix SkyWalker-1 Device Info ===
FW Version: 2.06.4 (0x020604) FW Build: 2007-07-13 BCD Version: 0206 Vendor: Genpix Product: SkyWalker-1 USB Speed: High (480Mbps) Serial: 00000000 Config: 0x03 [ ON] 8PSK Started [ ON] BCM4500 FW Loaded [off] Intersil LNB On [off] DVB Mode [off] 22kHz Tone [off] 18V Selected [off] DC Tuned [off] Armed (streaming)Vendor Command Scan (—scan)
Section titled “Vendor Command Scan (—scan)”Sends vendor IN requests to every command index from 0x00 to 0xFF and reports which ones return data. Commands already documented in the reference are labeled [KNOWN]; unexpected responses are flagged [NEW!].
sudo python3 tools/fw_dump.py --scanRAM Dump (—dump)
Section titled “RAM Dump (—dump)”Reads FX2 internal RAM (8 KB at 0x0000—0x1FFF) or external RAM (up to 64 KB with --external) via the standard 0xA0 vendor request.
sudo python3 tools/fw_dump.py --dump internal_ram.binsudo python3 tools/fw_dump.py --dump external_ram.bin --externalsudo python3 tools/fw_dump.py --dump region.bin --start 0x1000 --size 0x800The tool performs a quick analysis of the dump, reporting non-0xFF byte count and checking for the standard FX2 reset vector (LJMP at address 0x0000).
Kernel Driver Conflict
Section titled “Kernel Driver Conflict”The Linux dvb_usb_gp8psk module auto-loads when the SkyWalker-1 enumerates on USB. It will race with these tools for device access.
Before using any tool, either blacklist the module or unload it:
sudo modprobe -r dvb_usb_gp8psk gp8psk_feecho -e "blacklist dvb_usb_gp8psk\nblacklist gp8psk_fe" | \ sudo tee /etc/modprobe.d/blacklist-gp8psk.confSee Also
Section titled “See Also”- EEPROM Utilities — for permanent firmware flashing
- Boot Sequence — what happens after firmware loads
- Custom Firmware v3.01.0 — the open-source replacement firmware
- Vendor Commands — command reference used by these tools