{"id":50551988,"url":"https://github.com/supermagnum/handheld-sdr","last_synced_at":"2026-06-04T04:03:53.835Z","repository":{"id":358145647,"uuid":"1240223642","full_name":"Supermagnum/handheld-sdr","owner":"Supermagnum","description":"A idea for a dual band handheld sdr","archived":false,"fork":false,"pushed_at":"2026-05-15T23:24:48.000Z","size":53,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-16T00:57:54.025Z","etag":null,"topics":["gnuradio","handheld","radio","radioamateur","sdr","uhf","vhf"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Supermagnum.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-15T22:33:05.000Z","updated_at":"2026-05-15T23:24:57.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Supermagnum/handheld-sdr","commit_stats":null,"previous_names":["supermagnum/handheld-sdr"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/Supermagnum/handheld-sdr","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Supermagnum%2Fhandheld-sdr","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Supermagnum%2Fhandheld-sdr/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Supermagnum%2Fhandheld-sdr/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Supermagnum%2Fhandheld-sdr/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Supermagnum","download_url":"https://codeload.github.com/Supermagnum/handheld-sdr/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Supermagnum%2Fhandheld-sdr/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33888318,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-04T02:00:06.755Z","response_time":64,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["gnuradio","handheld","radio","radioamateur","sdr","uhf","vhf"],"created_at":"2026-06-04T04:03:52.873Z","updated_at":"2026-06-04T04:03:53.823Z","avatar_url":"https://github.com/Supermagnum.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Dual-Band Open SDR Handheld — System Design Specification\n**Codename: OpenHT-DB (Open Handheld Transceiver, Dual-Band)**\n*Draft v0.3*\n\n---\n\n## 1. Project Philosophy\n\nNo existing commodity RFIC adequately covers both 144 MHz and 430 MHz with sufficient IQ bandwidth, low noise, and a clean open digital interface suitable for an embedded Linux SDR platform. The solution is a purpose-designed RFIC, a system board architected from the ground up, and a custom splash-proof chassis — not constrained by any donor radio enclosure.\n\n---\n\n## 2. Why a Custom RFIC\n\n### 2.1 Commodity Chip Gap Analysis\n\n| Chip | VHF 144 MHz | UHF 430 MHz | IQ BW | Disqualifier |\n|---|:---:|:---:|---|---|\n| SX1255 | ✗ | ✓ | 500 kHz | 400 MHz lower limit; no VHF |\n| CC1200 | ✓ | ✓ | ~200 kHz | Bandwidth too narrow for SSB / wideband digital |\n| AT86RF215 | ✗ | ✓ | 4 MHz | 400 MHz lower limit; no VHF |\n| AD9361 | ✓ | ✓ | 56 MHz | Power and size prohibitive for handheld |\n| Si4463/Si4468 | ✓ | ✓ | ~1 MHz | Obsolete architecture; no clean IQ stream |\n| RFFC5072 | ✓ | ✓ | wide | Mixer-only; requires external LNA/VCO/ADC |\n\nNo commodity part covers 130–480 MHz with ≥500 kHz IQ bandwidth, sub-5 dB noise figure, full-duplex per band, and an I2S digital baseband interface compatible with Linux ALSA. A custom RFIC is the only clean path.\n\n### 2.2 Fabrication Process: IHP SG13G2 130 nm SiGe BiCMOS\n\nIHP Microelectronics (Frankfurt Oder, Germany) offers an open-source PDK for their SG13G2 process:\n\n- SiGe:C npn-HBT: fT up to 300 GHz, fmax up to 500 GHz — entirely adequate for sub-500 MHz RFIC\n- Open-source PDK under Apache 2.0; toolchain: KLayout, Xschem, OpenEMS, ngspice\n- Active OpenMPW shuttle program: ~2 mm² community slots per submission\n- Multiple academic RF designs validated on this process (IEEE Xplore: search \"IHP SG13G2 LNA\")\n- Commercial prototyping available at IHP for post-MPW production runs\n- Fallback: design portable to GlobalFoundries 8XP (commercial 130 nm SiGe) if needed\n\n---\n\n## 3. HT13G Custom RFIC Specification\n\n**HT13G — Handheld Transceiver, 130 nm SiGe**\n\n### 3.1 Internal Architecture\n\n```mermaid\nblock-beta\n  columns 3\n\n  space\n  block:RFIC[\"HT13G RFIC\"]:1\n    columns 2\n\n    RF_VHF_IN([\"RF_VHF_IN\"])\n    space\n\n    BPF_V[\"BPF\"] LNA_V[\"LNA_V\"]\n    MIX_V[\"IQ Mixer\"] ADC_V[\"Σ-Δ ADC\"]\n    PLL_V[\"PLL_V\\n130–175 MHz\"] space\n    DAC_V[\"Σ-Δ DAC\"] MOD_V[\"IQ Mod\"]\n    PAD_V[\"PA Driver\"] BPF_TX_V[\"BPF\"]\n\n    space RF_VHF_OUT([\"RF_VHF_OUT\"])\n\n    RF_UHF_IN([\"RF_UHF_IN\"]) space\n\n    BPF_U[\"BPF\"] LNA_U[\"LNA_U\"]\n    MIX_U[\"IQ Mixer\"] ADC_U[\"Σ-Δ ADC\"]\n    PLL_U[\"PLL_U\\n400–480 MHz\"] space\n    DAC_U[\"Σ-Δ DAC\"] MOD_U[\"IQ Mod\"]\n    PAD_U[\"PA Driver\"] BPF_TX_U[\"BPF\"]\n\n    space RF_UHF_OUT([\"RF_UHF_OUT\"])\n\n    SPI([\"SPI config\\nRSSI · AGC\\nTEMP · IRQ\"])\n    VCTCXO_IN([\"VCTCXO_TUNE\\n0–1.8 V analog\"])\n  end\n  space\n\n  I2S_VHF([\"I2S_VHF\\nIQ out/in\"])\n  I2S_UHF([\"I2S_UHF\\nIQ out/in\"])\n  HOST([\"iMX93\\nSoM\"])\n\n  RF_VHF_IN --\u003e BPF_V\n  BPF_V --\u003e LNA_V\n  LNA_V --\u003e MIX_V\n  PLL_V --\u003e MIX_V\n  MIX_V --\u003e ADC_V\n  ADC_V --\u003e I2S_VHF\n\n  I2S_VHF --\u003e DAC_V\n  DAC_V --\u003e MOD_V\n  PLL_V --\u003e MOD_V\n  MOD_V --\u003e PAD_V\n  PAD_V --\u003e BPF_TX_V\n  BPF_TX_V --\u003e RF_VHF_OUT\n\n  RF_UHF_IN --\u003e BPF_U\n  BPF_U --\u003e LNA_U\n  LNA_U --\u003e MIX_U\n  PLL_U --\u003e MIX_U\n  MIX_U --\u003e ADC_U\n  ADC_U --\u003e I2S_UHF\n\n  I2S_UHF --\u003e DAC_U\n  DAC_U --\u003e MOD_U\n  PLL_U --\u003e MOD_U\n  MOD_U --\u003e PAD_U\n  PAD_U --\u003e BPF_TX_U\n  BPF_TX_U --\u003e RF_UHF_OUT\n\n  SPI --\u003e HOST\n  I2S_VHF --\u003e HOST\n  I2S_UHF --\u003e HOST\n  VCTCXO_IN --\u003e HOST\n```\n\nBoth chains are fully independent — no shared LO, no shared VCO. Inter-band isolation \u003e 60 dB.\n\n### 3.2 Receive Path Specifications\n\n| Parameter | VHF Chain | UHF Chain | Notes |\n|---|---|---|---|\n| Frequency range | 130–175 MHz | 400–480 MHz | Covers 2m and 70cm globally |\n| Architecture | Zero-IF direct conversion IQ | same | |\n| LNA topology | Common-emitter SiGe HBT, inductively degenerated | same | |\n| Noise figure | \u003c 5 dB | \u003c 4 dB | At matched 50 Ω, 25°C |\n| Input impedance | 50 Ω | 50 Ω | External matching network |\n| IIP3 | \u003e −5 dBm | \u003e −5 dBm | |\n| LNA gain | 12–20 dB, 4 programmable steps | same | |\n| Image rejection | \u003e 40 dBc | \u003e 40 dBc | Direct-conversion; DC offset correction required |\n| ADC architecture | 1-bit Σ-Δ, 38.4 MHz oversampled, decimated | same | Matches SX1255 approach |\n| ADC output word | 16-bit I + 16-bit Q signed | same | |\n| Sample rates | 25 / 50 / 100 / 200 / 500 kHz | same | |\n| Max IQ bandwidth | 500 kHz | 500 kHz | |\n| DC offset cancellation | Digital feedback loop, programmable time constant | same | |\n| IQ imbalance | \u003c 1 dB amplitude, \u003c 2° phase post-calibration | same | |\n| RSSI | 8-bit, ±2 dB, SPI-readable | same | |\n| AGC | Programmable threshold + step; manual SPI override | same | |\n\n### 3.3 Transmit Path Specifications\n\n| Parameter | VHF Chain | UHF Chain | Notes |\n|---|---|---|---|\n| Architecture | Direct IQ upconversion | same | |\n| DAC architecture | 1-bit Σ-Δ interpolating | same | |\n| Input sample rates | 25 / 50 / 100 / 200 / 500 kHz | same | |\n| Output power (chip) | 0 ± 2 dBm into 50 Ω | same | External 5 W PA required |\n| Harmonic suppression | \u003e 25 dBc | \u003e 25 dBc | PCB band filter brings this to \u003e 60 dBc |\n| TX/RX isolation | \u003e 40 dB | \u003e 40 dB | On-chip switch + external T/R switch |\n| PA driver current | Programmable 0 / 50 / 100% | same | Low-power beacon mode without external PA |\n\n### 3.4 PLL / Frequency Synthesis\n\n| Parameter | VHF PLL | UHF PLL |\n|---|---|---|\n| Architecture | Integer-N + fractional Σ-Δ extension | same |\n| VCO range | 130–175 MHz direct | 400–480 MHz direct |\n| Reference | 32 MHz shared VCTCXO | same |\n| VCTCXO tune | 0–1.8 V analog input, ±50 ppm pull | — |\n| Phase noise @ 10 kHz offset | \u003c −90 dBc/Hz | \u003c −95 dBc/Hz |\n| Lock time | \u003c 1 ms | \u003c 1 ms |\n| Frequency resolution | \u003c 100 Hz | \u003c 100 Hz |\n| Frequency word | 32-bit via SPI | same |\n| Inter-band isolation | \u003e 60 dB — fully independent PLLs | |\n\n### 3.5 Digital Interface\n\n| Signal | Description |\n|---|---|\n| I2S_VHF: BCLK / LRCLK / DOUT / DIN | VHF IQ stream; I = Left, Q = Right; 16-bit frames |\n| I2S_UHF: BCLK / LRCLK / DOUT / DIN | UHF IQ stream; identical format |\n| SPI: CLK / MOSI / MISO / CS | Shared config bus; up to 10 MHz |\n| PTT_VHF / PTT_UHF | Active-high TX enable per band; hardware path \u003c 1 µs |\n| IRQ | Active-low: PLL unlock, AGC threshold, RSSI update |\n| RESET_N | Active-low chip reset |\n| VCTCXO_TUNE | Analog in 0–1.8 V; disciplines shared 32 MHz reference |\n\n### 3.6 Power\n\n| Rail | Voltage | RX current | TX current |\n|---|---|---|---|\n| VDD_RF | 3.3 V | 55 mA (both chains) | 80 mA |\n| VDD_CORE | 1.2 V (internal LDO) | 20 mA | 25 mA |\n| VDD_IO | 1.8 V or 3.3 V selectable | 5 mA | 5 mA |\n| **Total** | | **~265 mW** | **~363 mW** |\n\n### 3.7 Package\n\n- QFN-48, 6×6 mm, 0.5 mm pitch\n- Exposed thermal/RF ground pad (EPAD); minimum 9-via array to L2\n- WLCSP variant possible if die area permits\n\n---\n\n## 4. RF Signal Path Architecture\n\n### 4.1 Full RF Chain — VHF and UHF\n\n```mermaid\nflowchart TD\n    ANT1([\"ANT1\\nShared SMA\"])\n    ANT2([\"ANT2\\nOptional SMA\"])\n    DIPLEXER[\"Diplexer\\nVHF port: 130–175 MHz\\nUHF port: 400–480 MHz\"]\n    ANTSW[\"RF Switch\\nSPDT\\nShared / Independent\\nPE4259\"]\n\n    subgraph VHF [\"VHF Chain — 130–175 MHz\"]\n        direction TB\n        TRS_V[\"T/R Switch\\nSPDT\\nSKY13351\\n\u003e 1 W rated\"]\n        ATT_V[\"Variable Attenuator\\n0–31.5 dB, 0.5 dB step\\nPE4312 · SPI\"]\n        LNA_EXT_V[\"External LNA\\nPGA-103+ or BFP840ESD\\nNF \u003c 0.8 dB\"]\n        RFIC_RX_V[\"HT13G\\nVHF RX chain\\nNF \u003c 5 dB total\\nIIP3 \u003e −5 dBm\"]\n        RFIC_TX_V[\"HT13G\\nVHF TX chain\\n0 dBm output\"]\n        PA_V[\"Power Amplifier\\nVHF 5 W\\nClass AB\\neff. \u003e 40%\"]\n        BPF_V[\"Band-Pass Filter\\nVHF 130–175 MHz\\n\u003e 60 dBc harmonic\\n7-element Chebyshev\"]\n    end\n\n    subgraph UHF [\"UHF Chain — 400–480 MHz\"]\n        direction TB\n        TRS_U[\"T/R Switch\\nSPDT\\nSKY13351\\n\u003e 1 W rated\"]\n        ATT_U[\"Variable Attenuator\\n0–31.5 dB, 0.5 dB step\\nPE4312 · SPI\"]\n        LNA_EXT_U[\"External LNA\\nPGA-103+ or BFP840ESD\\nNF \u003c 0.8 dB\"]\n        RFIC_RX_U[\"HT13G\\nUHF RX chain\\nNF \u003c 4 dB total\\nIIP3 \u003e −5 dBm\"]\n        RFIC_TX_U[\"HT13G\\nUHF TX chain\\n0 dBm output\"]\n        PA_U[\"Power Amplifier\\nUHF 5 W\\nClass AB\\neff. \u003e 40%\"]\n        BPF_U[\"Band-Pass Filter\\nUHF 400–480 MHz\\n\u003e 60 dBc harmonic\\n7-element Chebyshev\"]\n    end\n\n    ANT1 --\u003e ANTSW\n    ANT2 --\u003e ANTSW\n    ANTSW --\u003e|VHF path| DIPLEXER\n    ANTSW --\u003e|UHF path| DIPLEXER\n\n    DIPLEXER --\u003e|130–175 MHz| TRS_V\n    DIPLEXER --\u003e|400–480 MHz| TRS_U\n\n    TRS_V --\u003e|RX| ATT_V --\u003e LNA_EXT_V --\u003e RFIC_RX_V\n    TRS_U --\u003e|RX| ATT_U --\u003e LNA_EXT_U --\u003e RFIC_RX_U\n\n    RFIC_TX_V --\u003e PA_V --\u003e BPF_V --\u003e|TX| TRS_V\n    RFIC_TX_U --\u003e PA_U --\u003e BPF_U --\u003e|TX| TRS_U\n```\n\n### 4.2 PA and Band Filter Detail\n\n#### Power Amplifier — 5 W per band\n\n| Parameter | VHF PA | UHF PA |\n|---|---|---|\n| Target output | 5 W (37 dBm) | 5 W (37 dBm) |\n| Input power | 0 dBm from HT13G | same |\n| Required gain | ~37 dB (driver + final stage) | same |\n| Architecture | Two-stage: driver + GaAs or LDMOS final | same |\n| Supply | Direct battery rail 3.7–4.2 V | same |\n| Efficiency | \u003e 40% class AB | same |\n| PA enable | GPIO from iMX93, hardware-sequenced after T/R switch | same |\n| Candidate ICs | VHF: RA07H1317M or MRFE6VP5600H | UHF: RA07H4047M or AFT09MS031N |\n\nAt 5 W output with 40% efficiency, each PA draws ~3.4 A from the battery rail. The PA supply must be decoupled with 220 µF + 100 µF + 100 nF immediately at the PA supply pin. The direct battery connection (no LDO) is mandatory — a linear regulator at this current would dissipate \u003e 1.5 W as heat.\n\n#### Band-Pass / Harmonic Filter\n\nEach TX path has a 7-element Chebyshev band-pass filter between the PA and the T/R switch:\n\n| Parameter | VHF filter | UHF filter |\n|---|---|---|\n| Passband | 130–175 MHz | 400–480 MHz |\n| Insertion loss | \u003c 0.8 dB | \u003c 0.8 dB |\n| Harmonic rejection (2nd) | \u003e 60 dBc | \u003e 60 dBc |\n| Harmonic rejection (3rd+) | \u003e 70 dBc | \u003e 70 dBc |\n| Implementation | SMD inductors + capacitors (0402), tuned at assembly | same |\n| PCB footprint | ~25 × 8 mm | ~20 × 8 mm |\n\nThe filter is placed between PA output and T/R switch — after the PA, before the antenna. It carries full TX power; component ratings must reflect this (inductor current rating \u003e 1 A, capacitor voltage rating \u003e 30 V).\n\n#### T/R Switch\n\nOne SPDT RF switch per band (e.g., SKY13351-378LF or equivalent):\n\n| Parameter | Value |\n|---|---|\n| Frequency | DC–3 GHz rated; linear at VHF/UHF |\n| Insertion loss | \u003c 0.5 dB |\n| Isolation TX→RX | \u003e 30 dB |\n| Power handling | \u003e 1 W continuous (5 W peak with good thermal path) |\n| Switching time | \u003c 1 µs |\n| Control | 2 GPIO from iMX93, sequenced before PA enable |\n\n**PTT sequencing (hardware-enforced order):**\n\n```mermaid\nsequenceDiagram\n    participant iMX93\n    participant TRS as T/R Switch\n    participant PA\n    participant HT13G\n\n    iMX93-\u003e\u003eHT13G: PTT_VHF assert (\u003c 1 µs)\n    Note over HT13G: Disables LNA, enables TX DAC\n    iMX93-\u003e\u003eTRS: SW_VHF → TX position (\u003c 1 µs)\n    Note over iMX93: 1 ms hardware delay\n    iMX93-\u003e\u003ePA: PA_EN_VHF assert\n    Note over PA: RF output enabled\n```\n\nOn TX→RX transition, PA is de-asserted first, then T/R switch returns to RX, then HT13G PTT released. This prevents the LNA from ever seeing full PA power.\n\n#### Variable Attenuator\n\nOne digitally-controlled attenuator per band on the RX path (e.g., PE4312):\n\n| Parameter | Value |\n|---|---|\n| Range | 0–31.5 dB, 0.5 dB steps |\n| Frequency | DC–4 GHz |\n| Insertion loss at 0 dB | \u003c 1 dB |\n| Control | 6-bit parallel or SPI; latched by GPIO from iMX93 |\n| Purpose | Prevents RFIC saturation on strong local signals; software-controlled AGC extension |\n\n#### Diplexer\n\nLC diplexer, crossover at ~250 MHz:\n\n| Parameter | VHF port | UHF port |\n|---|---|---|\n| Type | Low-pass section | High-pass section |\n| Passband | 130–175 MHz | 400–480 MHz |\n| Insertion loss | \u003c 0.5 dB | \u003c 0.5 dB |\n| Port isolation | \u003e 40 dB at the opposite band centre | same |\n| Implementation | 4–6 SMD L/C components, 0402 for Q | same |\n\n#### Antenna Switching\n\nOne SPDT RF switch (e.g., PE4259) selects between shared-antenna mode (diplexer) and independent-antenna mode (ANT2 direct to UHF or VHF chain):\n\n- Controlled by single GPIO from iMX93\n- Allows full cross-band repeat: VHF RX on ANT1, UHF TX on ANT2 simultaneously\n- ANT2 SMA connector on chassis side panel\n\n---\n\n## 5. PCB Architecture\n\n### 5.1 Board Overview\n\nSingle main PCB, approximately 115 × 50 mm. The CompuLab MCM-iMX93 SoM mounts on the reverse side via board-to-board connector.\n\n```mermaid\nblock-beta\n  columns 5\n\n  block:TOP[\"TOP FACE — RF and mixed\"]:5\n    columns 5\n    SMA_TOP([\"SMA ANT1\\n(top edge)\"])\n    DIPLEXER_B[\"Diplexer\"]\n    ANTSW_B[\"Ant\\nSwitch\"]\n    SMA_SIDE([\"SMA ANT2\\n(side edge)\"])\n    space\n\n    TRS_V_B[\"T/R SW\\nVHF\"]\n    BPF_V_B[\"BPF\\nVHF\"]\n    PA_V_B[\"PA\\nVHF\\n5 W\"]\n    ATT_V_B[\"Att\\nVHF\"]\n    LNA_EXT_V_B[\"LNA\\nVHF\"]\n\n    TRS_U_B[\"T/R SW\\nUHF\"]\n    BPF_U_B[\"BPF\\nUHF\"]\n    PA_U_B[\"PA\\nUHF\\n5 W\"]\n    ATT_U_B[\"Att\\nUHF\"]\n    LNA_EXT_U_B[\"LNA\\nUHF\"]\n\n    RFIC_B[\"HT13G\\nRFIC\"]\n    VCTCXO_B[\"VCTCXO\\n32 MHz\"]\n    GNSS_B[\"GNSS\\nu-blox M10\"]\n    PMIC_B[\"PMIC\\nBMS\\nUSB-C PD\"]\n    CODEC_B[\"Audio\\nCodec\"]\n\n    DISP_B[\"Display\\nFPC conn\"]\n    KEYPAD_B[\"Keypad\\nPTT GPIO\"]\n    EXP_B[\"Exp.\\nHeader\\n2×20\"]\n    BATTERY_B[\"Battery\\nJST\"]\n    space\n  end\n\n  block:BOTTOM[\"REVERSE FACE — digital (SoM mounts here)\"]:5\n    columns 5\n    space\n    space\n    USBA_B[\"USB-A\\n(rear panel\\ncentre)\"]\n    space\n    space\n\n    space\n    SOM_B[\"MCM-iMX93\\nSoM\\n(board-to-board\\nconnector)\"]\n    space\n    USBHUB_B[\"USB\\nHub IC\"]\n    space\n  end\n```\n\n### 5.2 Layer Stack (6-layer)\n\n| Layer | Function | Notes |\n|---|---|---|\n| L1 top | RF routing + all RF components | HT13G, LNA, PA, filters, switches, diplexer |\n| L2 | Solid ground plane | Unbroken RF reference; via-stitched at RF zone perimeter |\n| L3 | Power distribution | VDD_RF 3.3 V, 5 V, battery rail |\n| L4 | Secondary power + slow signals | USB, I2C, UART, GPIO |\n| L5 | Solid ground plane | Shielding between digital and RF |\n| L6 bottom | Digital routing | SoM board-to-board connector, USB hub, codec, display |\n\nA 4-layer stackup is acceptable for prototyping (merge L3+L4, L5 becomes L3); 6-layer is required for production to meet RF isolation targets between the PA and the RFIC receive inputs.\n\n### 5.3 Board Zoning\n\n```mermaid\nblock-beta\n  columns 3\n\n  block:RF[\"RF ZONE\\n(L1 RF routing,\\nvia-fence boundary)\"]:1\n    columns 1\n    Z1[\"HT13G RFIC\"]\n    Z2[\"LNA ext (VHF + UHF)\"]\n    Z3[\"PA VHF 5W\"]\n    Z4[\"PA UHF 5W\"]\n    Z5[\"BPF VHF + UHF\"]\n    Z6[\"T/R switches × 2\"]\n    Z7[\"Diplexer\"]\n    Z8[\"Ant switch\"]\n    Z9[\"50 Ω microstrip L1\"]\n  end\n\n  block:MIX[\"MIXED ZONE\\n(controlled impedance,\\nshort guarded traces)\"]:1\n    columns 1\n    M1[\"VCTCXO 32 MHz\"]\n    M2[\"GNSS u-blox M10\"]\n    M3[\"PMIC / BMS\"]\n    M4[\"USB-C PD controller\"]\n    M5[\"SPI / I2S traces\\n(short, series terminated)\"]\n    M6[\"Battery connector\"]\n  end\n\n  block:DIG[\"DIGITAL ZONE\\n(standard FR4 routing)\"]:1\n    columns 1\n    D1[\"MCM-iMX93 SoM\\n(reverse side)\"]\n    D2[\"USB Hub IC\\n(reverse side)\"]\n    D3[\"USB-A connector\\n(rear panel, centre)\"]\n    D4[\"Audio codec\"]\n    D5[\"Display FPC\"]\n    D6[\"Keypad / PTT GPIO\"]\n    D7[\"Expansion header 2×20\"]\n  end\n```\n\n**Zone boundary rules:**\n- Via fence: 0.3 mm vias, 0.6 mm pitch, L1–L2 stitched, full RF zone perimeter\n- No digital traces cross into RF zone\n- SPI and I2S traces transit through Mixed Zone only, with series 33 Ω termination\n- GNSS module at board edge; no copper routing under GNSS patch antenna area\n\n### 5.4 RF Signal Routing Rules\n\n| Rule | Value | Reason |\n|---|---|---|\n| 50 Ω microstrip width on L1 (FR4, L1→L2 ~0.18 mm) | ~0.35 mm | Impedance match throughout RF chain |\n| Maximum trace length between RF components | \u003c λ/10 at 480 MHz ≈ 62 mm | Minimise stub effects |\n| Bend style | 45° or curved; no 90° | Impedance discontinuity |\n| Component size in RF path | 0402 max; 0201 preferred above 300 MHz | Minimise parasitic inductance |\n| RFIC EPAD via array | 9 vias minimum (3×3) | RF and thermal ground |\n| PA ground vias | Immediately adjacent to PA ground pad | Minimise source inductance |\n| BPF placement | Immediately after PA output, before T/R switch | Harmonics filtered before reaching antenna path |\n| Shield cans | Press-fit SMD cans over RF zone + GNSS (Würth or Laird) | Optional but strongly recommended |\n\n### 5.5 USB-A Placement and Noise Mitigation\n\nThe USB-A connector is mounted on the reverse side of the PCB, centred on the board's long axis, flush with the chassis rear panel cutout. It is positioned in the Digital Zone, at maximum distance from the HT13G and UHF signal paths.\n\nUSB 2.0 High Speed switching operates at 480 MHz — directly within the UHF amateur band. Mitigation:\n\n| Measure | Detail |\n|---|---|\n| Physical separation | ≥ 40 mm from HT13G; USB Hub IC also in Digital Zone on reverse side |\n| Ground plane shielding | L2 and L5 ground planes between L1 RF zone and L6 USB routing |\n| Software gate | Daemon suspends USB HS enumeration during active UHF RX via `usbfs` power control |\n| Common-mode filtering | Ferrite bead on each USB data line at connector entry |\n| Shield can | USB Hub IC under press-fit shield can on L6 |\n\n### 5.6 Power Architecture\n\n```mermaid\nflowchart TD\n    BAT([\"Li-Po Battery\\n3.7 V · 4000 mAh\"])\n    BMS[\"BMS\\nover-charge / over-discharge\\nshort-circuit protection\"]\n    USBC([\"USB-C\\nCharging + OTG\"])\n    PD[\"USB PD Controller\\nFUSB302\\n5 W min · 9 W target\"]\n\n    BAT --\u003e BMS\n    USBC --\u003e PD --\u003e BMS\n\n    BMS --\u003e BATT_RAIL[\"Battery rail\\n3.7–4.2 V\"]\n\n    BATT_RAIL --\u003e BOOST[\"Boost Converter\\n→ 5 V\"]\n    BATT_RAIL --\u003e LDO33[\"LDO\\n→ 3.3 V\"]\n    BATT_RAIL --\u003e LDO18[\"LDO\\n→ 1.8 V\"]\n    BATT_RAIL --\u003e PA_RAIL[\"PA supply\\ndirect battery rail\\nno regulator\"]\n\n    BOOST --\u003e SOM[\"MCM-iMX93 SoM\"]\n    BOOST --\u003e USBA[\"USB-A port\"]\n    BOOST --\u003e USBHUB[\"USB Hub IC\"]\n\n    LDO33 --\u003e RFIC[\"HT13G VDD_RF\"]\n    LDO33 --\u003e LNA_BIAS[\"LNA bias\\n(ext. VHF + UHF)\"]\n    LDO33 --\u003e SWITCHES[\"RF switches\\ndiplexer bias\"]\n    LDO33 --\u003e ATT[\"Variable attenuators\"]\n\n    LDO18 --\u003e GNSS[\"GNSS module\"]\n    LDO18 --\u003e RFIC_IO[\"HT13G VDD_IO\"]\n\n    PA_RAIL --\u003e PA_V[\"PA VHF 5 W\\n~3.4 A peak\"]\n    PA_RAIL --\u003e PA_U[\"PA UHF 5 W\\n~3.4 A peak\"]\n```\n\nBoth PAs draw directly from the battery rail. At 5 W output with 40% efficiency, each PA draws approximately 3.4 A. A linear regulator at this current would dissipate over 1.5 W as heat — unacceptable in a handheld. The PA supply node must be decoupled with 220 µF (electrolytic) + 100 µF (ceramic) + 100 nF placed within 2 mm of each PA supply pin. Note: VHF and UHF PAs are never both transmitting simultaneously.\n\n---\n\n## 6. iMX93 SoM Interface to HT13G\n\n| iMX93 Peripheral | Signal | Notes |\n|---|---|---|\n| SAI1 | I2S_VHF | VHF IQ stream → ALSA hw:0 |\n| SAI2 | I2S_UHF | UHF IQ stream → ALSA hw:1 |\n| LPSPI1 | SPI: CS / CLK / MOSI / MISO | HT13G configuration |\n| GPIO1_00 | PTT_VHF | TX enable VHF (step 1 in sequence) |\n| GPIO1_01 | PTT_UHF | TX enable UHF |\n| GPIO1_02 | SW_VHF | T/R switch VHF (step 2 in sequence) |\n| GPIO1_03 | SW_UHF | T/R switch UHF |\n| GPIO1_04 | PA_EN_VHF | PA enable VHF (step 3, after 1 ms delay) |\n| GPIO1_05 | PA_EN_UHF | PA enable UHF |\n| GPIO1_06 | ATT_V_LE | Variable attenuator latch, VHF |\n| GPIO1_07 | ATT_U_LE | Variable attenuator latch, UHF |\n| GPIO1_08 | ANT_SW | Shared / independent antenna mode |\n| GPIO1_09 | HT13G IRQ (input) | PLL unlock, AGC, RSSI events |\n| GPIO1_10 | HT13G RESET_N | Chip reset |\n| GPIO1_11 | 1PPS (input from GNSS) | Frequency discipline pulse |\n| I2C2 | GNSS u-blox M10 | Position + timing |\n| PWM1 + RC filter | VCTCXO_TUNE | Analog 0–1.8 V; disciplines 32 MHz reference |\n\n**GNSS frequency discipline:** The u-blox 1PPS output triggers an iMX93 timer capture interrupt. A software PLL in the daemon measures the 1PPS interval, computes a correction, and updates the PWM duty cycle driving VCTCXO_TUNE through an RC filter. This holds the 32 MHz reference to \u003c 1 Hz error at 430 MHz — useful for weak-signal work and satellite operations.\n\n---\n\n## 7. Chassis \u0026 PCB Mechanical\n\n### 7.1 Chassis\n\n- Fully custom; designed in FreeCAD; STL + STEP published under CC-BY-SA 4.0\n- Target dimensions: ~135 × 58 × 28 mm\n- Material: injection-molded PC/ABS (prototype: FDM PETG)\n- IP54 splash protection: gasket-sealed halves, rubber port plugs, sealed tactile switches (Alps SKRGAED010 or equivalent)\n- Front: display window, D-pad, 2 function buttons, PTT bar (left side, full thumb reach)\n- Top: SMA ANT1 (primary), power button\n- Side: SMA ANT2 (optional, independent antenna)\n- Bottom: USB-C charging + OTG, 3.5 mm TRRS audio (Kenwood-compatible pinout)\n- Rear: USB-A port (centre, behind sealed rubber plug), battery door (2× M2 screws)\n\n### 7.2 PCB Mechanical Constraints\n\n- PCB outline: 113 × 48 mm (2 mm clearance to chassis walls)\n- Mounting: 4× M2 brass standoffs at corners, 3 mm from board edge\n- Display FPC connector: top-left area, 0.5 mm pitch, horizontal insertion\n- SMA ANT1: board-top-edge mount, coax land pattern on L1\n- SMA ANT2: board-side-edge mount\n- USB-A: reverse side, board-centre, rear-panel flush mount\n- USB-C: board-bottom-edge, front-accessible\n- Battery connector: JST-PH 2.0 mm, Mixed Zone\n\n---\n\n## 8. Software Stack\n\nThe software stack inherits from LinHT with minimal changes for dual-band operation:\n\n```mermaid\nflowchart TD\n    GNR[\"GNU Radio Flowgraph\\nZMQ SUB VHF IQ → DSP\\nZMQ SUB UHF IQ → DSP\\nModes: FM · SSB · M17 · APRS · FreeDV\"]\n    ZMQ[\"ZeroMQ IPC\\nbi-directional proxy daemon\\n(ALSA ↔ ZMQ bridge)\"]\n    DAEMON[\"HT Daemon (C)\\nKeypad · PTT · encoder\\nHT13G SPI control\\nDisplay driver\\nGNSS discipline\\nYAML config\\nRF event announcements\"]\n    ALSA[\"ALSA\\nhw:0 → VHF IQ (SAI1)\\nhw:1 → UHF IQ (SAI2)\"]\n    RFIC[\"HT13G RFIC\\nDual I2S streams\"]\n\n    GNR \u003c--\u003e ZMQ\n    ZMQ \u003c--\u003e DAEMON\n    DAEMON \u003c--\u003e ALSA\n    ALSA \u003c--\u003e RFIC\n```\n\n- `ht13g-spi` CLI: configures RFIC frequency, gain, sample rate, PTT — mirrors `sx1255-spi` from LinHT\n- GNU Radio OOT: `gr-ht13g` (IQ source/sink, both bands)\n- Yocto BSP additions: HT13G device tree overlay (SAI1, SAI2, SPI, GPIO), PA/attenuator GPIO config, GNSS support\n- Cross-band repeat: single flowgraph subscribing to VHF IQ, demodulating, re-encoding, publishing to UHF TX; daemon handles T/R switching per band independently\n\n---\n\n## 9. Open Licensing\n\n| Asset | License |\n|---|---|\n| PCB design (KiCad) | CERN OHL-S v2 |\n| RFIC design (GDS / Xschem) | Apache 2.0 (matching IHP PDK) |\n| Firmware / daemon | GPL v3 |\n| GNU Radio OOT blocks | GPL v3 |\n| Chassis (FreeCAD / STL / STEP) | CC-BY-SA 4.0 |\n| Documentation | CC-BY-SA 4.0 |\n\n---\n\n## 10. Authenticated Transmission via Hardware Security Key\n\n### 10.1 Concept\n\nThe rear USB-A port is positioned to accept a hardware security token — NitroKey, YubiKey, or a device running the [Galdralag firmware](https://github.com/Supermagnum/Galdralag-firmware) — which sits flush against any surface the radio rests on, protected from accidental removal during operation.\n\nWith a GnuPG-compatible OpenPGP smartcard token present, the iMX93 can cryptographically sign outgoing transmissions. The private key never leaves the hardware token. This enables authenticated remote control of SDR-equipped repeaters over RF, with no internet dependency — a receiving repeater verifies the signature against a known public key before acting on any control command embedded in the frame.\n\n### 10.2 Applicable Modes\n\n| Mode | Signing method | Notes |\n|---|---|---|\n| M17 | Detached GnuPG signature in LSF/superframe data field | Native data framing supports arbitrary payload |\n| APRS | Signed comment or object field | Signature fits within APRS comment length |\n| EchoLink | Signed control frame prepended to audio stream | Authentication before link establishment |\n| NFM voice | Short signed preamble burst before audio | ~0.5–0.8 s overhead; negligible on a voice QSO |\n| Any digital mode | Signed metadata packet on a separate data channel | Mode-dependent framing |\n\nThe signature frame overhead is approximately 0.5–0.8 seconds of air time, which is negligible in practice — well within the normal pre-PTT courtesy pause.\n\n### 10.3 Software Stack\n\n```mermaid\nflowchart TD\n    TOKEN([\"Hardware Token\\nNitroKey · YubiKey\\nGaldralag firmware\\n(USB-A rear)\"])\n    PCSCD[\"pcscd\\nPC/SC smartcard daemon\"]\n    GPGAGENT[\"gpg-agent\\nOpenPGP smartcard interface\"]\n    DAEMON[\"HT Daemon\\ncomposes control frame\\ncalls gpg --detach-sign\"]\n    GNURADIO[\"GNU Radio TX Flowgraph\\nframe → modulate → HT13G TX\"]\n    RF([\"RF transmission\\nsigned frame on air\"])\n\n    RX_RF([\"Received frame\\nat repeater or peer\"])\n    RX_GNR[\"GNU Radio RX Flowgraph\\ndemodulate → extract frame\"]\n    RX_VERIFY[\"gpg --verify\\nagainst known public key\"]\n    RX_ACTION[\"Execute control command\\nor reject if invalid\"]\n\n    TOKEN --\u003e PCSCD --\u003e GPGAGENT --\u003e DAEMON\n    DAEMON --\u003e GNURADIO --\u003e RF\n\n    RF -.-\u003e|\"over air\"| RX_RF\n    RX_RF --\u003e RX_GNR --\u003e RX_VERIFY --\u003e RX_ACTION\n```\n\nRequired additions to the Yocto image:\n\n- `pcscd` — PC/SC daemon; handles CCID USB device class (all three token types enumerate correctly via the USB hub)\n- `gnupg` — with smartcard support compiled in\n- `gpg-agent` — started at boot, socket available to daemon and user processes\n- `scdaemon` — smartcard backend for gpg-agent\n\nThe iMX93 USB-A port is permanently in host mode; there is no conflict with the USB-C OTG port managed by the FUSB302.\n\n### 10.4 Repeater Authentication Model\n\nA network of SDR-equipped repeaters can each hold a keyring of trusted operator public keys. An operator transmitting a signed control frame — frequency change, power adjustment, link enable/disable, EchoLink node connection — is authenticated at the repeater by signature verification before any action is taken. An invalid or missing signature is silently ignored.\n\nThis model requires no central server, no internet connection, and no proprietary protocol. It uses standard GnuPG tooling already available on Linux, and the Web of Trust model through existing GnuPG key-signing practices.\n\n---\n\n## 11. Risk Register\n\n| Risk | Likelihood | Mitigation |\n|---|---|---|\n| HT13G VHF PLL phase noise | Medium | SiGe HBT VCOs at VHF are well-characterised; validate VHF chain in MPW before integrated tapeout |\n| DC offset — zero-IF VHF chain | Medium-High | Standard challenge in direct conversion; digital feedback loop in spec; calibrate on startup |\n| IHP MPW area insufficient for full dual chain | High | Design and validate each chain independently in separate MPW submissions; integrate after both pass |\n| 5 W PA thermal dissipation in handheld | Medium | 40% efficiency → 7.5 W total dissipation at full power; chassis thermal path via PCB copper pour to chassis wall; duty-cycle limiting in firmware |\n| USB 480 MHz noise into UHF RX | Medium | 40 mm separation + dual ground planes + software USB HS gate during RX |\n| iMX93 SAI1/SAI2 simultaneous full-duplex | Low | iMX93 reference manual confirms independent SAI ports; SAI1 validated in LinHT |\n| BPF insertion loss at 5 W | Low | SMD inductors rated \u003e 1 A; capacitors rated \u003e 30 V; verify at assembly |\n| GNSS 1PPS discipline accuracy | Low | gpsd + PPS discipline well-proven; \u003c 1 Hz at 430 MHz achievable |\n| Chassis IP54 in open hardware | Medium | Use established sealed switch/connector families; engage gasket supplier at Rev A stage |\n\n---\n\n*Draft v0.4. All specifications are design targets. RFIC electrical specs should be reviewed by an experienced RF IC designer before committing to tapeout. If you have relevant industry contacts, the HT13G chip spec (section 3) is intended as a complete enough brief to initiate a technical conversation.*\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsupermagnum%2Fhandheld-sdr","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsupermagnum%2Fhandheld-sdr","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsupermagnum%2Fhandheld-sdr/lists"}