Releases: mkadie/circuitpython
Fruit Jam 1280x720 v0.2 (pillarbox + peripheral docs)
Second public release of the 1280×720 60 Hz HDMI patch for the Adafruit Fruit Jam (RP2350B).
What's new vs v0.1
- Pixel-tripled 320×240 → 960×720 mode (8 bpp RGB332, centered with 160 px black pillarbox each side). Existing 320×240 CircuitPython demos and assets can now ship native 720p output without rework — opt in by passing
color_depth=8to a 320×240picodvi.Framebuffer. - Documented peripheral trade-offs of the decoupled-clock approach (
clk_sys=124 MHz). SeeFRUIT_JAM_HSTX_720P.mdfor the full clock-topology analysis.
What works in 720p mode
- ✅ Native 1280×720 at 1 / 2 / 4 bpp grayscale
- ✅ Pixel-doubled 640×360 → 1280×720 at 8 / 16 / 32 bpp
- ✅ Pixel-tripled 320×240 → 960×720 at 8 bpp RGB332 (new in v0.2)
- ✅ Audio output via TLV320DAC3100 in BCLK fallback mode (
mclk_freq=0) — recognizable speech, audible distortion at ≤22050 Hz - ✅ Board buttons (
board.BUTTON1/BUTTON2/BUTTON3) - ✅ NeoPixels, I²C peripherals, native USB CDC
Known limitations in 720p mode
- ❌ PIO-USB host devices (keyboards, mice, hubs) do NOT enumerate. The 720p path runs
clk_sysat 124 MHz, which makes the FS-RX PIO divider 1.29 (23% fractional jitter — too noisy for USB enumeration). The README documents the clock-topology analysis showing why no PLL_SYS configuration satisfies both clean 720p HSTX and clean PIO USB simultaneously. Use board buttons or hardwired GPIO inputs in 720p apps; or fall back to stock 480p modes if USB host is required. ⚠️ Audio in BCLK fallback has audible distortion at low sample rates (per theadafruit_tlv320library docs)⚠️ release_displays()doesn't restore the original PLL config —clk_sysstays at 124 MHz until a hardware reset
Use case
Built to make the Fruit Jam a clean source for HDMI capture cards and multi-stream mixers (ATEM Mini, Magewell, Elgato HD60, OBS HDMI, etc.) where 480p sources are often rejected — useful for documentation, presentations, and live streaming embedded UIs.
How to install
- Download
firmware.uf2from this release. - Put the Fruit Jam in BOOTSEL mode (hold BOOT, tap RESET, release BOOT).
- Drag
firmware.uf2onto theRP2350drive that appears. - The board reboots into the patched CircuitPython.
How to use the new pillarbox mode
import board, picodvi
fb = picodvi.Framebuffer(
320, 240,
clk_dp=board.CKP, clk_dn=board.CKN,
red_dp=board.D0P, red_dn=board.D0N,
green_dp=board.D1P, green_dn=board.D1N,
blue_dp=board.D2P, blue_dn=board.D2N,
color_depth=8, # 8 bpp RGB332 → 720p ×3 pillarbox
)The 320×240 framebuffer is centered in a 1280×720 raster with 160 px black bars on left and right. Existing displayio code targeting 320×240 just works.
Credits
- T-Rex / Michael Kadie — concept, hardware bring-up, debugging, decoupled-clock approach
- Claude (Anthropic) — implementation co-author
Fruit Jam 1280x720 v0.1
First public release of the 1280×720 60 Hz HDMI patch for the Adafruit Fruit Jam (RP2350B), built on CircuitPython 10.1.4.
What's in this release
- Native 1280×720 @ 60 Hz HDMI output through the existing
picodvi.FramebufferAPI - Decoupled clock approach: PLL_SYS at 372 MHz, clk_sys stays at PLL_SYS/3 (~124 MHz, default-safe), clk_hstx at PLL_SYS/1 (372 MHz)
- Verified stable for 60+ s under sustained DMA at 372 MHz HSTX
- Supported color depths at native 1280×720: 1, 2, 4 bpp
- Supported color depths via 640×360 ×2 doubled: 8, 16, 32 bpp
Use case
Built to make the Fruit Jam a clean source for HDMI capture cards and multi-stream mixers (ATEM Mini, Magewell, Elgato HD60, OBS HDMI, etc.) where 480p sources are often rejected — useful for documentation, presentations, and live streaming embedded UIs.
How to install
- Download
firmware.uf2from this release. - Put the Fruit Jam in BOOTSEL mode (hold BOOT, tap RESET, release BOOT).
- Drag
firmware.uf2onto theRP2350mass-storage drive that appears. - The board will reboot into the patched CircuitPython.
How to use it
```python
import board, picodvi
fb = picodvi.Framebuffer(
1280, 720,
clk_dp=board.CKP, clk_dn=board.CKN,
red_dp=board.D0P, red_dn=board.D0N,
green_dp=board.D1P, green_dn=board.D1N,
blue_dp=board.D2P, blue_dn=board.D2N,
color_depth=2,
)
```
Pin mapping matches `adafruit_fruitjam.peripherals` — red on D0, blue on D2 (not the other way around).
See `FRUIT_JAM_HSTX_720P.md` for full documentation, supported color-depth combinations, build instructions, and known limitations.
Sample scripts in `ports/raspberrypi/boards/adafruit_fruit_jam/examples_720p/`.
Credits
- T-Rex / Michael Kadie — concept, hardware bring-up, debugging, decoupled-clock approach
- Claude (Anthropic) — implementation co-author
Built on top of Adafruit CircuitPython; the 372 MHz HSTX operating point follows fliperama86/pico_hdmi.