Skip to content

Lock the R-divider table, document v2.4.1 limits, replace dead links - #113

Merged
NT7S merged 3 commits into
masterfrom
cursor/rdiv-xtal-limits-links-1511
Nov 8, 2026
Merged

NT7S merged 3 commits into
masterfrom
cursor/rdiv-xtal-limits-links-1511

Conversation

@NT7S

@NT7S NT7S commented Nov 8, 2026 •

Copy link
Copy Markdown
Member

Summary

  • Issue Repeated definition for output clock divide by 64 in function select_r_div #89: the two adjacent conditions quoted in the report are divide-by-64 for [2F, 4F) and divide-by-32 for [4F, 8F). That octave table is what select_r_div() does for CLK0–CLK5 (AN619 Register 44, R0_DIV). tests/regression/rdiv/t_rdiv.cpp locks every CLK0–CLK5 edge, including register 44 at 8 kHz (/64) and 16 kHz (/32). The distinct-code check records the divider the function returned, so a duplicated band fails it.
  • CLK6 and CLK7 do not use that table. set_freq() picks the smallest R that reaches 600 MHz / 254. 36908 Hz is divide-by-128 in register 92 (/64 would leave the multisynth under 600 MHz). The test drives set_freq() on CLK6 and CLK7 and locks those register 92 edges.
  • SI5351_CRYSTAL_LOAD_0PF remains the reserved XTAL_CL value 00b. AN619 Register 183 says "00: Reserved. Do not select this option." init() substitutes the 10 pF default and writes bits 5:0 as 010010b. The macro is deprecated, not aliased to another load.
  • README frequency limits, checked against this tree, AN619 rev. 0.8, and datasheet rev. 1.3. The v1-to-v2 note says set_freq() runs from 4 kHz to 200 MHz on CLK0–CLK5. The just-under-150 MHz CLK6/CLK7 ceiling is set_freq() only; set_freq_manual(150 MHz, 900 MHz PLL, CLK6) is ratio 6 and returns 0. The regression test greps those README numbers against the header constants and SI5351_FOUT_MAX.
  • The etherkit.com store link and footnote in the README now point at https://github.com/etherkit/Si5351Arduino. library.properties already used that URL. The examples have no etherkit.com link.

Version is still 2.4.1. The license is unchanged.

Fixes #89, fixes #102

Tests

tests/regression/run_v231_checks.sh --src on this tree: rdiv_xtal passes, acceptance A01–A25 pass, must-not-break 776/776. Breaking the /32 band, or stopping the CLK6/7 divider at /64, makes the distinct-code checks fail.

Open in Web Open in Cursor 

cursoragent and others added 3 commits November 8, 2026 00:10
Issue #89's repeated divide-by-64 clause is the following
divide-by-32 octave. Keep that table, cite the AN619 R0_DIV
codes, and regression-test every band edge. Document that
SI5351_CRYSTAL_LOAD_0PF is the reserved XTAL_CL value in
AN619 Register 183 and that init() keeps 10 pF. Record the
v2.4.1 multisynth, output, quadrature, and 200 MHz limits
in the README. Point the dead etherkit.com links at this
repository.

Fixes #89, fixes #102

Co-authored-by: Jason Milldrum <NT7S@users.noreply.github.com>
select_r_div() is the CLK0-5 octave table. set_freq() on CLK6/7
picks the smallest R that reaches 600 MHz/254, so 36908 Hz is
divide-by-128 in register 92, not divide-by-64. The regression
test now drives set_freq and reads that register. The distinct-code
masks record the divider that was actually returned.

Qualify the CLK6/7 upper clamp as set_freq() behavior:
set_freq_manual(150 MHz, 900 MHz, CLK6) is a legal ratio 6.
State the CLK0-5 set_freq cap as 200 MHz in the v1-to-v2 note,
and check those README numbers against the header constants.

Co-authored-by: Jason Milldrum <NT7S@users.noreply.github.com>
…mits-links-1511

Co-authored-by: Jason Milldrum <NT7S@users.noreply.github.com>

# Conflicts:
#	README.md
#	tests/regression/README.md
#	tests/regression/run_v231_checks.sh
@NT7S
NT7S merged commit 43dad00 into master Nov 8, 2026
7 checks passed
@NT7S NT7S mentioned this pull request Nov 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Looks like etherkit.com is gone. Repeated definition for output clock divide by 64 in function select_r_div

2 participants