RMT receiving oddities

DrMickeyLauer
Posts: 210
Joined: Sun May 22, 2022 2:42 pm

RMT receiving oddities

Postby DrMickeyLauer » Sun May 11, 2025 1:07 pm

I'm implementing transmitters and receivers for the SENT (SAE J2716) protocol, a tick-based protocol (default tick length 3µs), which transmits a SYNC pulse (length 56 ticks), then 6 + 2 nibbles based pulses with different lengths (12 + nibble-value). Here's an example from my scope:
sent-on-scope.jpg
sent-on-scope.jpg (391.54 KiB) Viewed 206 times
Sending this using RMT is straightforward and works very well.

Receiving though seems to be more complicated. Note that I do my decoding decoupled from the rx callback
and have the callback marked w/ IRAM_ATTR.
Here's portions from my code so you can see how I'm initializing RMT:

Code: Select all

    void init() {
        // Configure RMT RX channel
        rmt_rx_channel_config_t rx_channel_config = {
            .gpio_num = gpio_num_,
            .clk_src = RMT_CLK_SRC_DEFAULT,
            .resolution_hz = 1'000'000,  // 1 MHz, 1 tick = 1 µs
            .mem_block_symbols = MemBlockBuffer,
        };
        ESP_ERROR_CHECK(rmt_new_rx_channel(&rx_channel_config, &rmt_channel_));

        // Install RX done callback
        rmt_rx_event_callbacks_t cbs = {
            .on_recv_done = rxDoneCallback,
        };
        ESP_ERROR_CHECK(rmt_rx_register_event_callbacks(rmt_channel_, &cbs, this));

        // Enable RMT RX channel
        ESP_ERROR_CHECK(rmt_enable(rmt_channel_));

        startReceive();
    }

    void startReceive() {
        // Allocate buffer for received symbols
        static rmt_symbol_word_t symbols[MemBlockBuffer];   // Maximum supported by hardware
        // Configure RX parameters - adjust for our tick period
        auto config = rmt_receive_config_t {
            .signal_range_min_ns = 1 * 1000,     // 1µs resolution
            .signal_range_max_ns = 100 * 1000,   // Max sync high pulse
        };
        ESP_ERROR_CHECK(rmt_receive(rmt_channel_, symbols, sizeof(symbols), &config));
    }
My concrete example (as seen on the scope) is using a 3µs tick time. SENT pulse lengths are always measured from falling edge to falling edge.

Here's the log output trying to receive 5 frames:

Code: Select all

D (4692) rmt: new group(0) at 0x3fcb15a4, occupy=ffffff00
D (4694) intr_alloc: Connected src 40 to int 12 (cpu 0)
D (4694) rmt: group (0) clock resolution:80000000Hz
D (4694) rmt: new rx channel(0,0) at 0x3fcb14c0, gpio=1, res=1000000Hz, hw_mem_base=0x60016b00, ping_pong_size=72
Waiting for 5 SENT frames on GPIO 1 (tick period 3 µs)...
D (4696) TASK: SENTReceiver created.
D (4697) TASK: SENTReceiver resumed.
D (4697) TASK: SENTReceiver entering code.
D (4697) SENTReceiver: SENTReceiver task started
D (4698) SENTReceiver: [RAW] LOW 14 us -> HIGH 21 us
D (4698) SENTReceiver: [STAT] 0x0
D (4699) SENTReceiver: [RAW] LOW 15 us -> HIGH 24 us
D (4699) SENTReceiver: [DATA] 0x1
D (4699) SENTReceiver: [RAW] LOW 15 us -> HIGH 27 us
D (4700) SENTReceiver: [DATA] 0x2
D (4700) SENTReceiver: [RAW] LOW 15 us -> HIGH 30 us
D (4700) SENTReceiver: [DATA] 0x3
D (4701) SENTReceiver: [RAW] LOW 15 us -> HIGH 33 us
D (4701) SENTReceiver: [DATA] 0x4
D (4701) SENTReceiver: [RAW] LOW 15 us -> HIGH 36 us
D (4702) SENTReceiver: [DATA] 0x5
D (4702) SENTReceiver: [RAW] LOW 15 us -> HIGH 39 us
D (4703) SENTReceiver: [DATA] 0x6
D (4703) SENTReceiver: [RAW] LOW 15 us -> HIGH 27 us
D (4703) SENTReceiver: [CRC ] 0x2 (valid)
D (4704) SENTReceiver: [FRAME] Status:0x0 Data:[0x1,0x2,0x3,0x4,0x5,0x6] CRC:0x2 (valid)
Frame 1/5 received: [0x0] 0x1 0x2 0x3 0x4 0x5 0x6 [0x2 (valid)
D (4705) SENTReceiver: [RAW] LOW 15 us -> HIGH 0 us
D (4705) SENTReceiver: Incomplete frame (0/8 nibbles) terminated by zero-duration pulse
D (4707) SENTReceiver: [RAW] LOW 14 us -> HIGH 21 us
D (4707) SENTReceiver: [STAT] 0x0
D (4708) SENTReceiver: [RAW] LOW 15 us -> HIGH 24 us
D (4708) SENTReceiver: [DATA] 0x1
D (4709) SENTReceiver: [RAW] LOW 15 us -> HIGH 27 us
D (4709) SENTReceiver: [DATA] 0x2
D (4709) SENTReceiver: [RAW] LOW 15 us -> HIGH 30 us
D (4710) SENTReceiver: [DATA] 0x3
D (4710) SENTReceiver: [RAW] LOW 15 us -> HIGH 33 us
D (4711) SENTReceiver: [DATA] 0x4
D (4711) SENTReceiver: [RAW] LOW 15 us -> HIGH 36 us
D (4712) SENTReceiver: [DATA] 0x5
D (4712) SENTReceiver: [RAW] LOW 15 us -> HIGH 39 us
D (4713) SENTReceiver: [DATA] 0x6
D (4713) SENTReceiver: [RAW] LOW 15 us -> HIGH 27 us
D (4713) SENTReceiver: [CRC ] 0x2 (valid)
D (4714) SENTReceiver: [FRAME] Status:0x0 Data:[0x1,0x2,0x3,0x4,0x5,0x6] CRC:0x2 (valid)
Frame 2/5 received: [0x0] 0x1 0x2 0x3 0x4 0x5 0x6 [0x2 (valid)
D (4715) SENTReceiver: [RAW] LOW 15 us -> HIGH 0 us
D (4716) SENTReceiver: Incomplete frame (0/8 nibbles) terminated by zero-duration pulse
D (4717) SENTReceiver: [RAW] LOW 15 us -> HIGH 39 us
D (4717) SENTReceiver: [STAT] 0x6
D (4718) SENTReceiver: [RAW] LOW 15 us -> HIGH 27 us
D (4718) SENTReceiver: [DATA] 0x2
D (4719) SENTReceiver: [RAW] LOW 15 us -> HIGH 0 us
D (4719) SENTReceiver: Incomplete frame (2/8 nibbles) terminated by zero-duration pulse
D (4720) SENTReceiver: [RAW] LOW 15 us -> HIGH 21 us
D (4721) SENTReceiver: [STAT] 0x0
D (4721) SENTReceiver: [RAW] LOW 14 us -> HIGH 25 us
D (4722) SENTReceiver: [DATA] 0x1
D (4722) SENTReceiver: [RAW] LOW 14 us -> HIGH 27 us
D (4723) SENTReceiver: [DATA] 0x2
D (4723) SENTReceiver: [RAW] LOW 15 us -> HIGH 30 us
D (4724) SENTReceiver: [DATA] 0x3
D (4724) SENTReceiver: [RAW] LOW 15 us -> HIGH 33 us
D (4724) SENTReceiver: [DATA] 0x4
D (4725) SENTReceiver: [RAW] LOW 15 us -> HIGH 36 us
D (4725) SENTReceiver: [DATA] 0x5
D (4726) SENTReceiver: [RAW] LOW 15 us -> HIGH 39 us
D (4726) SENTReceiver: [DATA] 0x6
D (4727) SENTReceiver: [RAW] LOW 15 us -> HIGH 27 us
D (4727) SENTReceiver: [CRC ] 0x2 (valid)
D (4728) SENTReceiver: [FRAME] Status:0x0 Data:[0x1,0x2,0x3,0x4,0x5,0x6] CRC:0x2 (valid)
Frame 3/5 received: [0x0] 0x1 0x2 0x3 0x4 0x5 0x6 [0x2 (valid)
D (4729) SENTReceiver: [RAW] LOW 15 us -> HIGH 0 us
D (4729) SENTReceiver: Incomplete frame (0/8 nibbles) terminated by zero-duration pulse
D (4730) SENTReceiver: [RAW] LOW 15 us -> HIGH 39 us
D (4731) SENTReceiver: [STAT] 0x6
D (4731) SENTReceiver: [RAW] LOW 15 us -> HIGH 27 us
D (4732) SENTReceiver: [DATA] 0x2
D (4732) SENTReceiver: [RAW] LOW 15 us -> HIGH 0 us
D (4733) SENTReceiver: Incomplete frame (2/8 nibbles) terminated by zero-duration pulse
D (4734) SENTReceiver: [RAW] LOW 14 us -> HIGH 21 us
D (4735) SENTReceiver: [STAT] 0x0
D (4735) SENTReceiver: [RAW] LOW 15 us -> HIGH 24 us
D (4735) SENTReceiver: [DATA] 0x1
D (4736) SENTReceiver: [RAW] LOW 15 us -> HIGH 27 us
D (4736) SENTReceiver: [DATA] 0x2
D (4737) SENTReceiver: [RAW] LOW 15 us -> HIGH 30 us
D (4737) SENTReceiver: [DATA] 0x3
D (4738) SENTReceiver: [RAW] LOW 15 us -> HIGH 33 us
D (4738) SENTReceiver: [DATA] 0x4
D (4738) SENTReceiver: [RAW] LOW 15 us -> HIGH 36 us
D (4739) SENTReceiver: [DATA] 0x5
D (4739) SENTReceiver: [RAW] LOW 15 us -> HIGH 39 us
D (4740) SENTReceiver: [DATA] 0x6
D (4740) SENTReceiver: [RAW] LOW 15 us -> HIGH 27 us
D (4741) SENTReceiver: [CRC ] 0x2 (valid)
D (4741) SENTReceiver: [FRAME] Status:0x0 Data:[0x1,0x2,0x3,0x4,0x5,0x6] CRC:0x2 (valid)
Frame 4/5 received: [0x0] 0x1 0x2 0x3 0x4 0x5 0x6 [0x2 (valid)
D (4742) SENTReceiver: [RAW] LOW 15 us -> HIGH 0 us
D (4743) SENTReceiver: Incomplete frame (0/8 nibbles) terminated by zero-duration pulse
D (4745) SENTReceiver: [RAW] LOW 14 us -> HIGH 21 us
D (4745) SENTReceiver: [STAT] 0x0
D (4745) SENTReceiver: [RAW] LOW 15 us -> HIGH 24 us
D (4746) SENTReceiver: [DATA] 0x1
D (4746) SENTReceiver: [RAW] LOW 15 us -> HIGH 27 us
D (4747) SENTReceiver: [DATA] 0x2
D (4747) SENTReceiver: [RAW] LOW 15 us -> HIGH 30 us
D (4748) SENTReceiver: [DATA] 0x3
D (4748) SENTReceiver: [RAW] LOW 15 us -> HIGH 33 us
D (4749) SENTReceiver: [DATA] 0x4
D (4749) SENTReceiver: [RAW] LOW 15 us -> HIGH 36 us
D (4749) SENTReceiver: [DATA] 0x5
D (4750) SENTReceiver: [RAW] LOW 15 us -> HIGH 39 us
D (4750) SENTReceiver: [DATA] 0x6
D (4751) SENTReceiver: [RAW] LOW 15 us -> HIGH 27 us
D (4751) SENTReceiver: [CRC ] 0x2 (valid)
D (4752) SENTReceiver: [FRAME] Status:0x0 Data:[0x1,0x2,0x3,0x4,0x5,0x6] CRC:0x2 (valid)
Frame 5/5 received: [0x0] 0x1 0x2 0x3 0x4 0x5 0x6 [0x2 (valid)
D (4753) SENTReceiver: [RAW] LOW 15 us -> HIGH 0 us
Received 5 frames, dropped 0 symbols, 6 short frames
D (4754) TASK: SENTReceiver will cancel...
D (4754) SENTReceiver: Incomplete frame (0/8 nibbles) terminated by zero-duration pulse
D (4755) SENTReceiver: SENTReceiver task stopped
D (4755) TASK: SENTReceiver exited code regularly (cancel).
D (4756) TASK: SENTReceiver cancelled.
D (4756) rmt: del rx channel(0,0)
D (4757) rmt: del group(0)
D (4757) TASK: SENTReceiver ~Task
ESP32>
The problem: I can't seem to set the parameters correctly to receive SYNC pulses. SYNC pulses are supposed to have a length of 168µs, but when I try to configure it like that:

Code: Select all

        auto config = rmt_receive_config_t {
            .signal_range_min_ns = 1 * 1000,     // 1µs resolution
            .signal_range_max_ns = 175 * 1000,   // Max sync high pulse
        };
Then nothing works anymore and I'm just getting a loop full of:

Code: Select all

E rmt: user buffer too small, received symbols truncated
Now: Limiting signal_range_max_ns to 100 * 1000 seems to work somewhat, at least I can see the data nibbles being correctly deciphered. But then I can't no longer read the 168µs SYNC pulse and instead I'm getting spurious symbols with length 0. If you see compare the log output, you'll see that I frequently get those "in the middle" of the correctly detected symbols. Since I can rule out the sender doing strange things, the receiver must be the problem.

What is happening here? Why is the signal_range_max_ns not allowing 175 and why am I getting 0 lengths (followed by symbols where the polarity is switched, e.g. level0 is HIGH and level1 is LOW whereas they're typically vice versa).

DrMickeyLauer
Posts: 210
Joined: Sun May 22, 2022 2:42 pm

Re: RMT receiving oddities

Postby DrMickeyLauer » Sun May 11, 2025 2:01 pm

And just after looking for 2 days without a clue, but then formulating the question, I stumbled over the .en_partial_rx flag.
Enabling this did the trick and I'm now a) getting my SYNC pulses and b) no longer spurious 0 lengths:

Code: Select all

ESP32> sent receive 1 3 5
D (6421) rmt: new group(0) at 0x3fcb1464, occupy=ffffff00
D (6422) intr_alloc: Connected src 40 to int 12 (cpu 0)
D (6422) rmt: group (0) clock resolution:80000000Hz
D (6423) rmt: new rx channel(0,0) at 0x3fcb1380, gpio=1, res=1000000Hz, hw_mem_base=0x60016b00, ping_pong_size=24
Waiting for 5 SENT frames on GPIO 1 (tick period 3 µs)...
D (6425) TASK: SENTReceiver created.
D (6425) TASK: SENTReceiver resumed.
D (6426) TASK: SENTReceiver entering code.
D (6426) SENTReceiver: SENTReceiver task started
D (6428) SENTReceiver: [RAW] LOW 15 us -> HIGH 30 us
D (6429) SENTReceiver: [STAT] 0x3
D (6429) SENTReceiver: [RAW] LOW 15 us -> HIGH 33 us
D (6430) SENTReceiver: [DATA] 0x4
D (6430) SENTReceiver: [RAW] LOW 15 us -> HIGH 36 us
D (6431) SENTReceiver: [DATA] 0x5
D (6431) SENTReceiver: [RAW] LOW 15 us -> HIGH 39 us
D (6432) SENTReceiver: [DATA] 0x6
D (6432) SENTReceiver: [RAW] LOW 15 us -> HIGH 27 us
D (6433) SENTReceiver: [DATA] 0x2
D (6433) SENTReceiver: [RAW] LOW 15 us -> HIGH 153 us
D (6434) SENTReceiver: SYNC pulse detected (153 us, nominal 168 us)
D (6434) SENTReceiver: [RAW] LOW 15 us -> HIGH 21 us
D (6435) SENTReceiver: [STAT] 0x0
D (6435) SENTReceiver: [RAW] LOW 15 us -> HIGH 24 us
D (6436) SENTReceiver: [DATA] 0x1
D (6436) SENTReceiver: [RAW] LOW 15 us -> HIGH 27 us
D (6437) SENTReceiver: [DATA] 0x2
D (6437) SENTReceiver: [RAW] LOW 15 us -> HIGH 30 us
D (6438) SENTReceiver: [DATA] 0x3
D (6438) SENTReceiver: [RAW] LOW 15 us -> HIGH 33 us
D (6438) SENTReceiver: [DATA] 0x4
D (6439) SENTReceiver: [RAW] LOW 15 us -> HIGH 36 us
D (6439) SENTReceiver: [DATA] 0x5
D (6440) SENTReceiver: [RAW] LOW 14 us -> HIGH 40 us
D (6440) SENTReceiver: [DATA] 0x6
D (6441) SENTReceiver: [RAW] LOW 14 us -> HIGH 28 us
D (6441) SENTReceiver: [CRC ] 0x2 (valid)
D (6442) SENTReceiver: [FRAME] Status:0x0 Data:[0x1,0x2,0x3,0x4,0x5,0x6] CRC:0x2 (valid)
Frame 1/5 received: [0x0] 0x1 0x2 0x3 0x4 0x5 0x6 [0x2 (valid)
D (6443) SENTReceiver: [RAW] LOW 14 us -> HIGH 153 us
D (6444) SENTReceiver: SYNC pulse detected (153 us, nominal 168 us)
D (6444) SENTReceiver: [RAW] LOW 15 us -> HIGH 21 us
D (6445) SENTReceiver: [STAT] 0x0
D (6445) SENTReceiver: [RAW] LOW 15 us -> HIGH 24 us
D (6445) SENTReceiver: [DATA] 0x1
D (6446) SENTReceiver: [RAW] LOW 15 us -> HIGH 27 us
D (6446) SENTReceiver: [DATA] 0x2
D (6446) SENTReceiver: [RAW] LOW 15 us -> HIGH 30 us
D (6447) SENTReceiver: [DATA] 0x3
D (6447) SENTReceiver: [RAW] LOW 15 us -> HIGH 33 us
D (6447) SENTReceiver: [DATA] 0x4
D (6448) SENTReceiver: [RAW] LOW 15 us -> HIGH 36 us
D (6448) SENTReceiver: [DATA] 0x5
D (6448) SENTReceiver: [RAW] LOW 15 us -> HIGH 39 us
D (6449) SENTReceiver: [DATA] 0x6
D (6449) SENTReceiver: [RAW] LOW 15 us -> HIGH 27 us
D (6450) SENTReceiver: [CRC ] 0x2 (valid)
D (6450) SENTReceiver: [FRAME] Status:0x0 Data:[0x1,0x2,0x3,0x4,0x5,0x6] CRC:0x2 (valid)
Frame 2/5 received: [0x0] 0x1 0x2 0x3 0x4 0x5 0x6 [0x2 (valid)
D (6451) SENTReceiver: [RAW] LOW 15 us -> HIGH 153 us
D (6452) SENTReceiver: SYNC pulse detected (153 us, nominal 168 us)
D (6452) SENTReceiver: [RAW] LOW 15 us -> HIGH 21 us
D (6453) SENTReceiver: [STAT] 0x0
D (6453) SENTReceiver: [RAW] LOW 14 us -> HIGH 25 us
D (6454) SENTReceiver: [DATA] 0x1
D (6454) SENTReceiver: [RAW] LOW 14 us -> HIGH 28 us
D (6455) SENTReceiver: [DATA] 0x2
D (6455) SENTReceiver: [RAW] LOW 14 us -> HIGH 30 us
D (6456) SENTReceiver: [DATA] 0x3
D (6456) SENTReceiver: [RAW] LOW 15 us -> HIGH 33 us
D (6456) SENTReceiver: [DATA] 0x4
D (6457) SENTReceiver: [RAW] LOW 15 us -> HIGH 36 us
D (6457) SENTReceiver: [DATA] 0x5
D (6458) SENTReceiver: [RAW] LOW 15 us -> HIGH 39 us
D (6458) SENTReceiver: [DATA] 0x6
D (6459) SENTReceiver: [RAW] LOW 15 us -> HIGH 27 us
D (6459) SENTReceiver: [CRC ] 0x2 (valid)
D (6460) SENTReceiver: [FRAME] Status:0x0 Data:[0x1,0x2,0x3,0x4,0x5,0x6] CRC:0x2 (valid)
Frame 3/5 received: [0x0] 0x1 0x2 0x3 0x4 0x5 0x6 [0x2 (valid)
D (6461) SENTReceiver: [RAW] LOW 15 us -> HIGH 153 us
D (6461) SENTReceiver: SYNC pulse detected (153 us, nominal 168 us)
D (6462) SENTReceiver: [RAW] LOW 15 us -> HIGH 21 us
D (6462) SENTReceiver: [STAT] 0x0
D (6463) SENTReceiver: [RAW] LOW 15 us -> HIGH 24 us
D (6463) SENTReceiver: [DATA] 0x1
D (6463) SENTReceiver: [RAW] LOW 15 us -> HIGH 27 us
D (6464) SENTReceiver: [DATA] 0x2
D (6464) SENTReceiver: [RAW] LOW 15 us -> HIGH 30 us
D (6465) SENTReceiver: [DATA] 0x3
D (6465) SENTReceiver: [RAW] LOW 15 us -> HIGH 33 us
D (6465) SENTReceiver: [DATA] 0x4
D (6466) SENTReceiver: [RAW] LOW 15 us -> HIGH 36 us
D (6466) SENTReceiver: [DATA] 0x5
D (6466) SENTReceiver: [RAW] LOW 15 us -> HIGH 39 us
D (6467) SENTReceiver: [DATA] 0x6
D (6467) SENTReceiver: [RAW] LOW 15 us -> HIGH 27 us
D (6467) SENTReceiver: [CRC ] 0x2 (valid)
D (6468) SENTReceiver: [FRAME] Status:0x0 Data:[0x1,0x2,0x3,0x4,0x5,0x6] CRC:0x2 (valid)
Frame 4/5 received: [0x0] 0x1 0x2D (6469) SENTReceiver: [RAW] LOW 14 us -> HIGH 154 us
 0x3 0x4 0x5 0x6 [0x2 (valid)
D (6470) SENTReceiver: SYNC pulse detected (154 us, nominal 168 us)
D (6470) SENTReceiver: [RAW] LOW 14 us -> HIGH 21 us
D (6471) SENTReceiver: [STAT] 0x0
D (6471) SENTReceiver: [RAW] LOW 15 us -> HIGH 24 us
D (6472) SENTReceiver: [DATA] 0x1
D (6472) SENTReceiver: [RAW] LOW 15 us -> HIGH 27 us
D (6473) SENTReceiver: [DATA] 0x2
D (6473) SENTReceiver: [RAW] LOW 15 us -> HIGH 30 us
D (6474) SENTReceiver: [DATA] 0x3
D (6474) SENTReceiver: [RAW] LOW 15 us -> HIGH 33 us
D (6474) SENTReceiver: [DATA] 0x4
D (6475) SENTReceiver: [RAW] LOW 15 us -> HIGH 36 us
D (6475) SENTReceiver: [DATA] 0x5
D (6476) SENTReceiver: [RAW] LOW 15 us -> HIGH 39 us
D (6476) SENTReceiver: [DATA] 0x6
D (6477) SENTReceiver: [RAW] LOW 15 us -> HIGH 27 us
D (6477) SENTReceiver: [CRC ] 0x2 (valid)
D (6478) SENTReceiver: [FRAME] Status:0x0 Data:[0x1,0x2,0x3,0x4,0x5,0x6] CRC:0x2 (valid)
Frame 5/5 received: [0x0] 0x1 0x2 0x3 0x4 0x5 0x6 [0x2 (valid)
Received 5 frames, dropped 14 symbols, 0 short frames
D (6479) SENTReceiver: [RAW] LOW 15 us -> HIGH 153 us
D (6480) TASK: SENTReceiver will cancel...
D (6480) SENTReceiver: SYNC pulse detected (153 us, nominal 168 us)
D (6481) SENTReceiver: SENTReceiver task stopped
D (6481) TASK: SENTReceiver exited code regularly (cancel).
D (6482) TASK: SENTReceiver cancelled.
D (6482) rmt: del rx channel(0,0)
D (6483) rmt: del group(0)
D (6483) TASK: SENTReceiver ~Task
ESP32>
I'm afraid I don't understand why a larger maximum requires a larger buffer (isn't it just grabbing edges and therefore a longer maximum should require a smaller buffer?), but lo and behold: IT WORKS!

User avatar
ok-home
Posts: 157
Joined: Sun May 02, 2021 7:23 pm
Location: Russia Novosibirsk
Contact:

Re: RMT receiving oddities

Postby ok-home » Sun May 11, 2025 4:11 pm

hi
.signal_range_max_ns = 100 * 1000, // Max sync high pulse
This is a stop reception signal - distance between 2 fronts
If the interval is exceeded - rmt gives interval length = 0, sign of end of reception
if you put
.signal_range_max_ns = 175 * 1000
The receiver will receive data until it encounters a longer interval or the internal rmt buffer is full.
.mem_block_symbols = MemBlockBuffer;
flag setting
.en_partial_rx
puts the receiver into ping/pong mode and allows you to receive almost unlimited data in batches and give it back in batches if necessary.

DrMickeyLauer
Posts: 210
Joined: Sun May 22, 2022 2:42 pm

Re: RMT receiving oddities

Postby DrMickeyLauer » Sun May 11, 2025 8:47 pm

If the interval is exceeded - rmt gives interval length = 0, sign of end of reception
That's the secret sauce. Did I really overlook that in the documentation?

User avatar
ok-home
Posts: 157
Joined: Sun May 02, 2021 7:23 pm
Location: Russia Novosibirsk
Contact:

Re: RMT receiving oddities

Postby ok-home » Mon May 12, 2025 1:04 am

If the interval is exceeded - rmt gives interval length = 0, sign of end of reception
That's the secret sauce. Did I really overlook that in the documentation?
This is hidden a little deeper in the documentation ))
Esp32 trm p414 rmt.JPG
https://www.espressif.com/sites/default/files/documentation/esp32_technical_reference_manual_en.pdf
Esp32 trm p414 rmt.JPG (58.2 KiB) Viewed 181 times

Who is online

Users browsing this forum: Baidu [Spider], ChatGPT-User, Google [Bot] and 2 guests