Skip to content

Fruit Jam 1280x720 v0.2 (pillarbox + peripheral docs)

Latest

Choose a tag to compare

@mkadie mkadie released this 10 May 15:33

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=8 to a 320×240 picodvi.Framebuffer.
  • Documented peripheral trade-offs of the decoupled-clock approach (clk_sys=124 MHz). See FRUIT_JAM_HSTX_720P.md for 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_sys at 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 the adafruit_tlv320 library docs)
  • ⚠️ release_displays() doesn't restore the original PLL config — clk_sys stays 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

  1. Download firmware.uf2 from this release.
  2. Put the Fruit Jam in BOOTSEL mode (hold BOOT, tap RESET, release BOOT).
  3. Drag firmware.uf2 onto the RP2350 drive that appears.
  4. 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