|
FastLED 3.10.6
|
|
inline |
Largest frame, in wire bytes, an RP PIO RX capture can hold.
Two independent ceilings bound a capture, and each is the binding one in its own regime – which is why no single constant, and no single model, predicts both (FastLED#4371):
EdgeTime per signal phase into a fixed pool: two phases per bit, eight bits per wire byte. Past edge_capacity / 16 bytes it overflows.samples_per_dma_word samples per DMA word at a fixed clock, and the word count is (edge_capacity + 1) / 2 + dma_tail_words for every frame large enough for either ceiling to matter. That is a constant quantity of wall clock, not of data. The frame, plus the trailing idle the capture must observe before it will terminate, plus the gap between arming and the first edge, all have to fit inside it.At a 1225 ns bit period the pool binds first (300 bytes, 2.9 ms); at 2500 ns the clock binds first (3.84 ms, 189 bytes). Measured on an RP2350W across WS2812B-V5, WS2818, WS2814, UCS7604-800KHZ and WS2811-400KHZ, the smaller of the two reproduces every pass/fail boundary to the byte.
Shorter frames are not shortchanged by using the clamped word count: below the clamp the budget grows by 16 words per byte while the frame grows by only 8 bit-periods, so it never becomes the binding constraint there.
| edge_capacity | Phase slots in the capture pool (kRpPioRxEdgeCapacity) |
| dma_tail_words | Reset-tail words added to the DMA transfer (kRpPioRxDmaTailWords) |
| samples_per_dma_word | Pin samples packed into one DMA word (kRpPioRxSamplesPerDmaWord) |
| sample_period_ns | Nanoseconds per sample (1e9 / kRpPioRxClockHz) |
| idle_tail_ns | Trailing idle the capture must see to finish (RxChannelConfig::signal_range_max_ns) |
| arming_lead_in_ns | Reserve for the arm-to-first-edge gap |
| bit_period_ns | T1 + T2 + T3 of the chipset under test |
Definition at line 156 of file validation.h.
References fl::FL_NO_EXCEPT.