Fix GET_PART_INFO/GET_SYS_STATE/GET_FUNC_INFO byte offsets; confirm Si4684 blobs genuine
Si4684Driver::getPartInfo()/getSysState() existed but were never called, so their byte-offset bugs never surfaced. Wired them into a boot-time diagnostic log (part number, firmware revision, active image, streamed blob byte counts) to check whether the loaded DAB/FM firmware images are genuine and intact, as an alternative explanation to the QFN exposed-pad hardware hypothesis. Fixed two rounds of off-by-one bugs found while doing this: the fields were initially read one byte too far right (e.g. firmwareBuild was reading a flag byte, not a version number); the first fix undershot in the other direction by not accounting for readRaw()'s one-byte SPI lead-in before STATUS0 (already documented and confirmed elsewhere in this file, in pollStc()) -- caught because the "fixed" GET_SYS_STATE reported image=192 (0xC0), the exact signature of STATUS3 with PUP_STATE=3 seen throughout this investigation. All three response buffers were already sized for the lead-in byte, which confirmed the correct fix. Verdict, captured live: blob streamed bytes match local file sizes exactly (no truncation), GET_SYS_STATE reports image=2 (DAB active, correct), GET_PART_INFO reports part=4684 (matches expected Si4684 part number) with a plausible firmware revision -- the loaded DAB firmware is genuine and intact. This closes the last plausible firmware-side explanation for the FM/DAB no-lock symptom; docs/si4684-rf-investigation-report.md and docs/TODO.md (P4/H5) updated with the full record and verdict. Also noted, not yet fixed: BT1035 AT-init now fails deterministically on every boot (was a one-off earlier this session) -- see report's Open Items. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -62,9 +62,10 @@ enum class SeekBandWrap { Wrap, NoWrap };
|
||||
*/
|
||||
struct Si4684PartInfo {
|
||||
std::uint16_t chipId; ///< Part identifier from the chip.
|
||||
std::uint8_t firmwareMajor; ///< Loaded firmware major version.
|
||||
std::uint8_t firmwareMinor; ///< Loaded firmware minor version.
|
||||
std::uint8_t firmwareBuild; ///< Loaded firmware build number.
|
||||
std::uint8_t firmwareMajor; ///< Loaded function image major (REVEXT).
|
||||
std::uint8_t firmwareMinor; ///< Loaded function image minor (REVBRANCH).
|
||||
std::uint8_t firmwareBuild; ///< Loaded function image build (REVINT).
|
||||
std::uint32_t svnId; ///< GET_FUNC_INFO SVNID[31:0] build source.
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user