Add Heltec T096 board support (closes #35) - #37
Open
soup0r wants to merge 1 commit into
Open
Conversation
Headline: OTAFIX brick recovery validated on T096. Interrupted and timed-out OTA transfers leave the device in DFU mode and accept a retry, rather than bricking. Critical for solar-powered hilltop mesh repeater deployments where physical USB access is costly. Board details: - nRF52840 + SX1262 (28 dBm via KCT8103L FEM) + UC6580 GNSS - New variant src/boards/heltec_t096/ based on heltec_t114 - White status LED on P0.28, active-high (no SK6812 RGBs on this board) - Display omitted in this port; T096 uses ST7735S which the bootloader does not yet support. Pins documented in board.h for future addition. - USB PID 0x0071 matches Heltec stock T096 bootloader (note: this conflicts with T114's PID, which is Heltec's oversight; matching it allows out-of-the-box UF2 self-update for stock T096 boards). - Volume label and product strings 'HT-n5262G' match Heltec stock. Tested on real hardware (Heltec T096 EU868, late-Apr 2026 production): - UF2 bootloader self-update succeeds - MeshCore application firmware boots cleanly on new bootloader - 'start ota' CLI jumps to DFU mode correctly - BLE OTA via Android nRF DFU app, ~1 minute for ~430 KB firmware - Recovery from interrupted OTA: device stays in DFU, accepts retry - Recovery from timed-out OTA: device stays in DFU, accepts retry Build fix for newer GCC (15.x): - Scoped -Wno-array-bounds to bootloader_settings.o - Scoped -Wno-unterminated-string-initialization to ghostfat.o - Per-file scope avoids hiding diagnostics for unrelated code
|
Sure hope we get this soon. Been using a pre release that not many have access to |
|
I just tested it, seemed to work perfectly fine, however the bootloader screen on TFT shows completely black when it ota dfu or uf2 dfu mode on my t096 (but still functionally works). On t114, this display shows a test pattern, along with some additional text on the tft while in dfu mode. |
|
Any update on this? Would really like to make OTA more reliable on my T096 |
|
and update of project? THX |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #35
Adds OTAFIX bootloader support for the Heltec Mesh Node T096
(nRF52840 + SX1262 + UC6580 GNSS), released by Heltec in April 2026.
Headline result
OTAFIX brick recovery validated on T096:
This is the killer feature for solar-powered hilltop deployments where
physical USB access is costly. Stock Heltec T096 bootloader does not
have this recovery behavior.
Implementation
Based on existing
heltec_t114board files. T096 changes:not yet support; pins documented in
board.hfor future addition)T114; their oversight, matching it allows out-of-box UF2 self-update)
HT-n5262Gmatches stock unitINFO_UF2.TXTBuild fix
Added per-file CFLAGS to handle stricter modern GCC (tested on 15.2):
bootloader_settings.o:-Wno-array-boundsghostfat.o:-Wno-unterminated-string-initializationScoped per-file rather than globally to avoid hiding diagnostics elsewhere.
Test environment
Open for discussion
Happy to adjust any of: