Document Si4684 blob procurement and enforce CI policy.
Expand local-only firmware README, add check_si4684_blobs.py to verify gitignore and clean history, and gate main with a new si4684-blobs workflow job. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -1,43 +1,89 @@
|
||||
# Si4684 firmware images
|
||||
# Si4684 firmware images (local only — not in git)
|
||||
|
||||
Skyworks Si4684 application firmware is **proprietary**. This directory holds
|
||||
the three binary blobs your build embeds via `HOST_LOAD`; they must **never**
|
||||
be committed to the public repository.
|
||||
|
||||
| File | Size (typ.) | Role |
|
||||
|------|-------------|------|
|
||||
| `rom_patch_016.bin` | 5796 | ROM patch / bootloader helper (HOST_LOAD before main image) |
|
||||
| `rom_patch_016.bin` | 5796 B | ROM patch / bootloader helper (HOST_LOAD before main image) |
|
||||
| `dab_firmware.bin` | ~517 KB | DAB+ application image (PE5PVB / Skyworks BIF) |
|
||||
| `fm_firmware.bin` | ~530 KB | FM application image (Skyworks `fm_radio_5_1_0.bin`, AN649 A10) |
|
||||
|
||||
Boot sequence: AN649 — POWER_UP → LOAD_INIT → HOST_LOAD(patch) → LOAD_INIT →
|
||||
HOST_LOAD(image) → BOOT. DAB and FM use the same patch; only the application
|
||||
Boot sequence (AN649): POWER_UP → LOAD_INIT → HOST_LOAD(patch) → LOAD_INIT →
|
||||
HOST_LOAD(image) → BOOT. DAB and FM share the same patch; only the application
|
||||
image differs.
|
||||
|
||||
## Refresh blobs
|
||||
## Legal / redistribution
|
||||
|
||||
- **Do not** commit `*.bin` files here, attach them to GitHub releases, or
|
||||
redistribute them with this open-source tree.
|
||||
- DAB images extracted from [PE5PVB/SI4684-DAB-Receiver](https://github.com/PE5PVB/SI4684-DAB-Receiver) are community-sourced; FM images come from the
|
||||
Skyworks evaluation package or equivalent local sources (see below).
|
||||
- Keep blobs on your machine only. CI verifies they are gitignored and absent
|
||||
from history (`python3 tools/check_si4684_blobs.py`).
|
||||
|
||||
## Before you build
|
||||
|
||||
From `Software/`:
|
||||
|
||||
```bash
|
||||
# DAB + patch from PE5PVB GitHub (always safe to re-run):
|
||||
python3 tools/fetch_si4684_firmware.py --dab-only
|
||||
|
||||
# FM from Skyworks eval / dabpi si46xx_firmware folder:
|
||||
python3 tools/fetch_si4684_firmware.py --si46xx-dir /path/to/si46xx_firmware
|
||||
|
||||
# FM extracted from uGreen DABBoard radio_cli (Files_v16.zip from ugreen.eu/downloads):
|
||||
python3 tools/fetch_si4684_firmware.py --from-ugreen-radio-cli ~/Downloads/Files_v16.zip
|
||||
|
||||
# Patch + DAB + FM entirely from uGreen radio_cli (overrides PE5PVB DAB):
|
||||
python3 tools/fetch_si4684_firmware.py --from-ugreen-radio-cli ~/Downloads/Files_v16.zip --ugreen-all
|
||||
|
||||
# FM extracted from a full SPI flash dump (TechniSat layout, dirb.me tech wiki):
|
||||
python3 tools/fetch_si4684_firmware.py --flash-dump technisat_spi.bin
|
||||
python3 tools/fetch_si4684_firmware.py --dab-only # patch + DAB
|
||||
python3 tools/fetch_si4684_firmware.py --si46xx-dir /path # add FM (see below)
|
||||
ls -la Firmware/Si4684-Firmware/*.bin # expect 3 files
|
||||
```
|
||||
|
||||
FM images are **not** redistributed with PE5PVB (DAB-only project). Obtain
|
||||
`fm_radio_5_1_0.bin` from the Si4684 evaluation package (AN649 table 1),
|
||||
community `si46xx_firmware/` folders used by [teknoid/dabpi](https://github.com/teknoid/dabpi),
|
||||
or extract from a uGreen [DABBoard](https://ugreen.eu/downloads/) `radio_cli`
|
||||
binary (proprietary — keep local, do not commit to public git).
|
||||
`idf.py build` fails at link/embed time if blobs are missing.
|
||||
|
||||
Low-level conversion helper:
|
||||
## Obtain images locally
|
||||
|
||||
### Patch + DAB (automated, network)
|
||||
|
||||
```bash
|
||||
python3 tools/extract_si4684_blob.py --copy /path/to/fm_radio_5_1_0.bin \\
|
||||
cd Software
|
||||
python3 tools/fetch_si4684_firmware.py --dab-only
|
||||
```
|
||||
|
||||
Clones PE5PVB/SI4684-DAB-Receiver and writes `rom_patch_016.bin` and
|
||||
`dab_firmware.bin`.
|
||||
|
||||
### FM image (manual source — pick one)
|
||||
|
||||
FM is **not** shipped with PE5PVB. Supply one of:
|
||||
|
||||
| Source | Command |
|
||||
|--------|---------|
|
||||
| Skyworks eval / dabpi `si46xx_firmware/` | `python3 tools/fetch_si4684_firmware.py --si46xx-dir /path/to/si46xx_firmware` |
|
||||
| uGreen DABBoard `Files_v16.zip` | `python3 tools/fetch_si4684_firmware.py --from-ugreen-radio-cli ~/Downloads/Files_v16.zip` |
|
||||
| Full SPI flash dump (TechniSat layout) | `python3 tools/fetch_si4684_firmware.py --flash-dump technisat_spi.bin` |
|
||||
|
||||
Candidate FM filenames (AN649 / community): `fm_radio_5_1_0.bin`,
|
||||
`fm_radio_5_0_9.bin`, `fmhd_radio_5_1_0.bin`, `fmhd_radio_5_0_4.bin`.
|
||||
|
||||
Manual copy helper:
|
||||
|
||||
```bash
|
||||
python3 tools/extract_si4684_blob.py --copy /path/to/fm_radio_5_1_0.bin \
|
||||
--out Firmware/Si4684-Firmware/fm_firmware.bin
|
||||
```
|
||||
|
||||
### All three from uGreen radio_cli
|
||||
|
||||
```bash
|
||||
python3 tools/fetch_si4684_firmware.py --from-ugreen-radio-cli ~/Downloads/Files_v16.zip --ugreen-all
|
||||
```
|
||||
|
||||
## Verify your checkout
|
||||
|
||||
```bash
|
||||
cd Software
|
||||
python3 tools/check_si4684_blobs.py # must exit 0
|
||||
git ls-files 'Firmware/Si4684-Firmware/*.bin' # must print nothing
|
||||
```
|
||||
|
||||
## References
|
||||
|
||||
- Skyworks **AN649** — Si4684 programming API and boot flow
|
||||
- `tools/fetch_si4684_firmware.py` — fetch/extract orchestration
|
||||
- `tools/extract_si4684_blob.py` — header/array → raw `.bin`
|
||||
- `docs/manual/ch-si4684.tex` — driver boot integration in DigiRadio
|
||||
|
||||
Reference in New Issue
Block a user